首先补充一些知识
CF(carry flag):进位标志位 OF(overflow flag):溢出标志位 SF(sign flag):负数标志位 ZF(zero flag):零标志位
PF(parity):奇偶标志位
CF是对无符号数进行运算,纪录的进位值或借位值
OF是对有符号数会不会产生溢出的标志 同样的SF也是对有符号数操作的。
同样一条指令,例如 add al,80H (假设原先al里的值位80H)
那么此时 CF=1 因为80H+80H=100H,超出al所能存储的2位16进制数了,此时al=00H
这里的OF等于多少呢? 它也等于 1 因为OF是对口有符号数,80H在有符号数里 = -128,-128+(-128)=-256 超出了-128~127,所以溢出了。
那么SF应该等于多少呢?,书中讲它是对有符号数运行等结果是否为负数,看上面结果=-256那SF=0吗?
其实不是虽然结果=-256,但是它看的是AL中的值由于AL=00H,所以应该SF=1
下面给出11.2的表格(带答案,与主流答案有一个出入,我会特别标出来)
CF | OF | SF | ZF | PF | 注释 | |
sub al,al | 0 | 0 | 0 | 1 | 1 | |
mov al,10H | 0 | 0 | 0 | 1 | 1 | |
add al,90H | 0 | 0 | 1 | 0 | 1 | A0H(-96) |
mov al,80H | 1 | 0 | 1 | 0 | 1 | 80H(-128) |
add al,80H | 1 | 1 | 0 | 1 | 1 | |
mov al,0FCH | 1 | 1 | 0 | 1 | 1 | 0FCH(-4) |
add al,05H | 1 | 0 | 0 | 0 | 0 | 05H(5) |
mov al,7DH | 1 | 0 | 0 | 0 | 0 | 7DH(125) |
add al,0BH | 0 | 1 | 0 | 0 | 1 | 0BH(11) |
最后的 那一条,7DH+0BH(125+11=136)明明是正数SF应该=0,但我看其他的资料SF=0,搞不懂为什么。欢迎解答