. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->标志寄存器
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于PF的问题  [已解决] 回复[ 6次 ]   点击[ 562次 ]  
nice_future
[帖 主]   [ 发表时间:2010-09-19 19:41 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-14 15:30
assume cs:code
code segment
     mov ax,0010 0000 0000 0000b
     add ax,1
     mov ax,4c00h
     int 21h
code ends
end
这段测试代码在add指令执行后PF怎么会等于0?!看了论坛上勘误区的关于214页的勘误(http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1289&qkSg=2&qID=50747&readSg=1)我晕了@@!求解!!
masmaster
[第1楼]   [ 回复时间:2010-09-20 19:38 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
AL的最低有效字节是AL,这里, AL=00000000B,加1以后,AL=00000001B,可以看出1的个数不是偶数,所以, PF=0.例如:

d:\MASM>debug
-a
1472:0100 mov ax,2000;ax=0010000000000000B
1472:0103 add ax,1   ;ax=0010000000000001B
1472:0106 add ax,2   ;ax=0010000000000011B
1472:0109 ret
1472:010A
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1472  ES=1472  SS=1472  CS=1472  IP=0100   NV UP EI PL NZ NA PO NC
1472:0100 B80020        MOV     AX,2000
-t

AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1472  ES=1472  SS=1472  CS=1472  IP=0103   NV UP EI PL NZ NA PO NC
1472:0103 050100        ADD     AX,0001
-t

AX=2001  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1472  ES=1472  SS=1472  CS=1472  IP=0106   NV UP EI PL NZ NA PO NC
1472:0106 050200        ADD     AX,0002                    ;加1后,PO
-t

AX=2003  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1472  ES=1472  SS=1472  CS=1472  IP=0109   NV UP EI PL NZ NA PE NC
1472:0109 C3            RET                                ;加2后,PE
-t
nice_future
[第2楼]   [ 回复时间:2010-09-20 20:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-14 15:30
首先谢谢你能来帮我解答!
后来我用如下代码测试
assume cs:code
code segment
     mov al,0a0h
     mul al
     mov ax,4c00h
     int 21h
code ends
end
结果发现标志寄存器一个都没变化,mul指令真的会影响标志位吗?我又做了测试,如下
-a
13E2:0100 mov al,a0
13E2:0102 mov bl,0
13E2:0104 mul bl
13E2:0106 ret
13E2:0107
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13E2  ES=13E2  SS=13E2  CS=13E2  IP=0100   NV UP EI PL NZ NA PO NC
13E2:0100 B0A0          MOV     AL,A0
-t

AX=00A0  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13E2  ES=13E2  SS=13E2  CS=13E2  IP=0102   NV UP EI PL NZ NA PO NC
13E2:0102 B300          MOV     BL,00
-t

AX=00A0  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13E2  ES=13E2  SS=13E2  CS=13E2  IP=0104   NV UP EI PL NZ NA PO NC
13E2:0104 F6E3          MUL     BL
-t

AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13E2  ES=13E2  SS=13E2  CS=13E2  IP=0106   NV UP EI PL NZ NA PO NC
13E2:0106 C3            RET ;此时计算结果为ax=0,可是标志寄存器一个都没变!
不知道是哪里出的问题!
masmaster
[第3楼]   [ 回复时间:2010-09-20 22:06 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
乘法指令影响的标志位:CF和OF(AF、PF、SF和ZF无定义)
masmaster
[第4楼]   [ 回复时间:2010-09-20 22:08 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
补充:乘除法跟加减法对标志的影响是不一样的。
nice_future
[第5楼]   [ 回复时间:2010-09-21 12:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-14 15:30
原来是这样啊,学习了!再次感谢!
nice_future
[第6楼]   [ 回复时间:2010-09-21 12:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-14 15:30
此贴由 贴主 于 [ 2010-09-21 12:18 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved