注册 登录
编程论坛 汇编论坛

PF & ZF?

有容就大 发布于 2012-09-06 22:57, 693 次点击
王爽汇编 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
-

求大牛帮忙解答
5 回复
#2
信箱有效2012-09-06 23:17
学习。
PF ZF 佩服 折服
#3
刘培2012-09-07 02:24
标志寄存器我还没学到。。。。。
#4
有容就大2012-09-07 09:27
回复 2楼 信箱有效
SF 私服?

#5
有容就大2012-09-07 09:27
回复 3楼 刘培
赶快啊 一起研究~~
#6
有容就大2012-09-07 10:48
扇自己个耳刮子  我脑袋怎么一根筋呢  擦
add、sub、mul、div 、inc、or、and等运算指令影响标志寄存器
mov、push、pop等传送指令对标志寄存器没影响。
1