8月中旬,我正在为我的计算机工程考试做一些学习。一些练习是关于对汇编器中某些指令的工作寄存器和状态寄存器进行计数。我正在努力了解状态寄存器,尤其是零标志在此练习中的工作方式。该练习是关于在这11条指令之后计算WREG的值。我已经在每一行上写下了答案,但是不知何故我没有正确获取状态寄存器和零标志:
CLRF WREG;
WREG = 0x00 BSF STATUS,C;
进位标志= 1 BSF WREG,7;
WREG = 0x80(1000 0000)第七位设置为1。RLCF WREG;
W = 0x01和状态寄存器0x03? BC MCARRY;
我们将分支,因为设置了C。ADDLW 0x01;
因此,将跳过此行。MCARRY DECF WREG;
W = 0x00 MOVLW OxFF;
W = 0xFF,状态寄存器在某种程度上为7 BZ MHALT;
Z位。INCF WREG;
因此我跳过了这一行 11。MHALT GOTO MHALT;
WREG = 0xFF,这是正确的答案,但是我不明白状态寄存器在第4行会发生什么。不知何故,它与WREG一起旋转,并将值放入状态寄存器。然后状态寄存器的值是7(第8行),我对此感到很困惑。您中的任何人是否有很好的解释,可以使我了解在汇编器中执行指令时状态寄存器(尤其是零标志)会发生什么情况?
END
答案 0 :(得分:3)
不清楚您遇到什么问题。首先,您提到第4行。如此处正确注释,WREG的MSB为1,并将其旋转为C。C的原始值(也为1)被旋转为WREG的LSB。因此,WREG = 0x01,C = 1,Z = 0。第7行将设置WREG = 0x00,C = 1和Z = 1。 MOVW
不会影响标志,因此第9行将使用第7行的值而不是第4行的值。
请注意,状态寄存器为0 0 0 N OV Z DC C
。
答案 1 :(得分:0)
WREG = 0x80 C = 1
通过进位向左旋转。进位移入WREG的LSBit,WREG的MSBit移入进位:
WREG = 0x01 C = 1
答案 2 :(得分:0)
任何汇编程序操作(在我的情况下为WREG)导致WREG的内容为0时,将设置零标志。