[汇编语言] 检测点11.2
2019-08-03 本文已影响0人
耿杰
一、写出下面每条指令执行后,ZF、PF、SF、CF、OF等标志位的值
sub al, al
mov al, 10H
add al, 90H
mov al, 80H
add al, 80H
mov al, 0FCH
add al, 05H
mov al, 7DH
add al, 0BH
答案:
逐条分析
- 1、sub al, al
al = 0
答案:
CF = 0
OF = 0
SF = 0
ZF = 0
PF = 0
- 2、mov al, 10H
al = 10H
答案:传递指令,对标志寄存器没有影响
CF = 0
OF = 0
SF = 0
ZF = 0
PF = 0
- 3、add al, 90H
al = A0H
答案:
CF = 0
a、10H +90H = A0H,对应着10进制值为160。对于无符号数来说,没有进位,所以为0
OF = 0
a、10H对应的10进制值为16,小于127,对应的有符号数也是10H
b、90H对应的10进制值为144,大于127。对应的有符号数 = 256 - 144 = -112。也就是90H是有符号数-112的补码。
c、对于有符号数运算,16 + (-112) = -96
d、没有溢出
SF = 1
a、对于有符号数运算,结果是-96,是负数。所以为1
ZF = 0
a、结果是-96,所以为0.
PF = 1
a、结果是-96。1的个数为偶数,所以为1
96的补码 0110 0000
-96的补码 1010 0000
- 4、mov al, 80H
al = 80H
答案:传递指令,对标志寄存器没有影响
CF = 0
OF = 0
SF = 1
ZF = 0
PF = 1
- 5、add al, 80H
al = 00H
答案:
CF = 1
a、80H + 80H = 256, 对应着10进制值为256。对于无符号数来说,产生进位,所以为1。
b、255 1111 1111
256 1 0000 0000
OF = 1
a、80H对应着无符号数值为128, 对应着有符号数-128。
b、-128 + (-128) = -256,8位寄存器放不下,最小为-128。溢出了1位,al寄存器的值为00,所以OF为1,
SF = 0
a、对于有符号运算结果来说,是负数,所以为1
ZF = 1
a、al寄存器为1,所以为1
PF = 1
a、-256 二进制码 1 0000 0000,8位寄存器中,没有任何1,所以为偶数。所以PF=1
- 6、mov al, 0FCH
al = 0FCH
答案:传递指令,对标志寄存器没有影响
CF = 1
OF = 1
SF = 0
ZF = 1
PF = 1
- 7、add al, 05H
al = 01
答案:
CF = 1
a、0FC表示无符号数252,同时又表示有符号数 -(256-252)= -4。
b、05H表示有(无)符号数5。
c、无符号计算:252 + 5 > 256,借位了,所以CF=1
OF = 0
a、有符号计算:-4 + 5 = 1, 没有溢出,所以OF=0
SF = 0
a、有符号计算:-4 + 5 = 1,不是负数,所以SF = 0
ZF = 0
a、有符号计算:-4 + 5 = 1,不是0,所以ZF = 0
PF = 0
a、有符号计算:-4 + 5 = 1,对应着二进制: 0000 0001, 只有奇数1,所以PF = 0
- 8、mov al, 7DH
al = 7DH
答案:
CF = 1
OF = 0
SF = 0
ZF = 0
PF = 0
- 9、add al, 0BH
al =
答案:
CF = 1
a、7DH表示有(无)符号数125。
b、0BH表示有(无)符号数11。
c、有符号计算: 125 + 11 < 255, 所以为0
OF = 1
a、无符号计算:125 + 11 > 127,溢出了,所以1
SF = 1
a、有符号计算:125 + 11 = 136,136对应着无符号数为-120,是负数,所以SF = 1
ZF = 0
a、因为有符号计算值为-120,不为0,所以ZF =0
PF = 1
a、136,对应着二进制:1000 1000,有偶数个1,所以PF=1
总结:
1、al的值实际是无符号运算的
2、SF的值是CPU对有符号数运算结果的一种记录
3、PF的值是CPU对无符号数运算结果的一种记录
4、CF的值是CPU对无符号数运算结果的一种记录
5、OF的值是CPU对有符号数运算结果的一种记录
6、ZF的值是CPU对无符号数运算结果的一种记录