PicoBlaze是否为各寄存器组配备独立标志位?附代码验证疑问
PicoBlaze寄存器组与标志位的关系及代码执行结果
PicoBlaze的两个寄存器组(regbank A和B)共用同一组全局标志位,和Z80每组寄存器配备独立标志位的设计不同。
针对你给出的示例代码:
regbank a load s0, 0 sub s0, 0 regbank b load s0, 1 sub s0, 0 regbank a jump z , success jump nz, failure
真实PicoBlaze硬件的执行结果是跳转到failure,具体流程:
- 切换到regbank A,
load s0,0后执行sub s0,0,结果为0,零标志位(Z)置1。 - 切换到regbank B,
load s0,1后执行sub s0,0,结果为1(非零),零标志位(Z)被清零。 - 切回regbank A时,标志位保持最后一次操作的状态(Z=0),因此触发
jump nz, failure。
你开发的模拟器跳转到success的行为,和真实PicoBlaze硬件的架构不符——PicoBlaze的标志寄存器是全局共享的,寄存器组切换仅切换s0-s7的映射,不会保存或恢复标志位状态,所有运算操作都会直接更新这组全局标志位。
内容的提问来源于stack exchange,提问作者FlatAssembler
相关产品推荐
相关产品推荐

