PF & ZF?
王爽汇编 11章检测点 关于 标志寄存器的 检测点11.1
下面这个是标准答案:
写出下面每条指令执行后,ZF、PF、SF、等标志位的值。
sub al,al al=0h ZF=1 PF=1 SF=0
mov al,1 al=1h ZF=1 PF=1 SF=0
push ax ax=1h ZF=1 PF=1 SF=0
pop bx bx=1h ZF=1 PF=1 SF=0
add al,bl al=2h ZF=0 PF=0 SF=0
add al,10 al=12h ZF=0 PF=1 SF=0
mul al ax=144h ZF=0 PF=1 SF=0
检测点涉及的相关内容:
ZF是flag的第6位,零标志位,记录指令执行后结果是否为0,结果为0时,ZF=1
PF是flag的第2位,奇偶标志位,记录指令执行后结果二进制中1的个数是否为偶数,结果为偶数时,PF=1
SF是flag的第7位,符号标志位,记录有符号运算结果是否为负数,结果为负数时,SF=1
add、sub、mul、div 、inc、or、and等运算指令影响标志寄存器
mov、push、pop等传送指令对标志寄存器没影响。
======================================================
想不通啊 明明结果al = 1h时 ZF 应该是0啊 PF 也应该是0 啊 为什么恰恰相反?
奇怪的是用debug 写入程序后单步跟踪 显示的标志寄存器还真和他给的答案一样 我晕
那么他指的运行结果究竟是什么? 不是al = 1h?
下面的单步跟踪的 详细过程:
C:\DOCUME~1\ADMINI~1>debug
-a
0C1C:0100 sub al,al
0C1C:0102 mov al,1
0C1C:0104 push ax
0C1C:0105 pop bx
0C1C:0106 add al,bl
0C1C:0108 add al,10
0C1C:010A mul al
0C1C:010C
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0102 NV UP EI PL ZR NA PE NC
0C1C:0102 B001 MOV AL,01
-t
AX=0001 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0104 NV UP EI PL ZR NA PE NC
0C1C:0104 50 PUSH AX
-t
AX=0001 BX=0000 CX=0000 DX=0000 SP=FFEC BP=0000 SI=0000 DI=0000
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0105 NV UP EI PL ZR NA PE NC
0C1C:0105 5B POP BX
-t
AX=0001 BX=0001 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0106 NV UP EI PL ZR NA PE NC
0C1C:0106 00D8 ADD AL,BL
-t
AX=0002 BX=0001 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0108 NV UP EI PL NZ NA PO NC
0C1C:0108 0410 ADD AL,10
-t
AX=0012 BX=0001 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=010A NV UP EI PL NZ NA PE NC
0C1C:010A F6E0 MUL AL
-t
AX=0144 BX=0001 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=010C OV UP EI PL NZ NA PE CY
0C1C:010C 1599CD ADC AX,CD99
-
求大牛帮忙解答