汇编语言 标志寄存器 状态位的问题: MOV AX,34C5H ADD AX,546AH
问题描述:
汇编语言 标志寄存器 状态位的问题: MOV AX,34C5H ADD AX,546AH
解:0011010011000101
0101010001101010
-------------------------------------
1000100100101111
答案是:CF:0;SF:1;ZF:0;AF 0;OF 1;PF:0;
CF,SF,ZF,PF都好理解:CF,由于没有存在进位的情况,所以为0 ;SF由于跟最高位相同,所以为1;ZF由于结果不为零,所以为0;PF由于低8位1的个数为5,为奇数,所为为0.
但是OF跟AF难以理解——结果也没有溢出啊?AF,应该在低字节向高节有进位的,但却为1.是不是搞反了?
答
of是溢出标志,是真对有符号数而言.所有的计算都认为是有符号数,由于次高位与最高位的进位不一样所以溢出,但编程时应该知道,假如它是无符号数,用CF判断有无进位,OF就没有意义
af是辅助进位标志,是低4位向高4位有进位时为1,这里没有进位就是0OF溢出标志位现在我已搞懂了。AF辅助进位标志,在这里难道不是看倒数第8位的进位情况?百度百科的解释是:“AF(Auxiliary Carry Flag)辅助进位标志:在字节操作时低半字节向高半字节进位或借位,字操作时低字节向高字节进位或借位,AF置1,否则置0。 ”这里是字操作,应该是看低字节的最高位呀!请解释。AF主要是用于BCD码调整时用的一个标志位,只对字节中的低4位进位指示