王爽汇编语言程序设计第十一章检测点问题
本帖最后由 大西洋1912 于 2013-1-3 17:45 编辑1、写出下面每条指令执行后ZF、PF、SF标志位的值 Subal,al Moval,1 Pushax Popbx Addal,bl Addal,10 Mul al ZF=0PF=0 SF=0其中SF=0是因为最后的结果是保存在ax中吗注:ax=0090h=00000000 1001 0000B?2、写出下面每条指令执行后,ZF、PF、SF、CF、OF标志位的值。①Sub al,al CF=0OF=0SF=0ZF=1PF=1②Moval,10h CF=0OF=0SF=0ZF=1PF=1③Add al,90h CF=0OF=0SF=1ZF=0PF=1④Mov al,80h CF=1OF=1SF=0ZF=1PF=1⑤Add al,80h⑥Moval,0fch CF=1OF=0SF=0ZF=0PF=0⑦Add al,05h⑧Moval,7dh CF=0OF=1SF=1ZF=0PF=1⑨Addal,0bh上面两个题红色部分是怎么计算出来的呢?mov指令对PF不影响吗?为什么第二句前面几个标志和前一句一样,而④⑥⑧句就不相同了? 监测点11.1Subal,al ZF=1 PF=1 SF=0(AL=0)
Moval,1 无影响
Pushax 无影响
Popbx 无影响 (BL=AL=1)
Addal,bl ZF=0 PF=0 SF=0(AL=010B)
Addal,10 ZF=0 PF=1 SF=0(AL=1100B)
Mul al ZF=0 PF=1 SF=1
注:ax=0090h=00000000 1001 0000B兄弟,答案是对的,不过标志位标错了
ZF 零标志/Zero Flag结果为0,ZF=1。
PF 奇偶标志/Parity Flag结果为偶数PF=1最后我们的结果是两个1,偶数
SF 符号标志/Sign Flag 结果为负数 SF=1 我们的结果是 AL=1001 0000B 负数
以上结果经由debug和vs2010调试过
关键在最后一个mul上面,sf的值我也迷茫过,究竟是看ax还是看al,调试结果证明还是看al的,估计因为我们的mul 的操作是针对al的。
现学现卖,见笑了。
后面的题,回头有空继续 哦,对了,调试看结果的时候记得在代码前加上一句mov ah,0将ah清零,不然标志位结果可能会不一样。 汗颜,监测点11.2自己算的基本都算错了,唉
以下是vs2008调试的结果:(同样,需要将ah清0,否则结果会不一致)sub al,alCF=0 OF=0 SF=0 ZF=1 PF=1add al,90Hal=10H+90H=A0H=1010 0000B CF=0 OF=0 SF=1 ZF=0 PF=1add al,80H80H对于有符号数是-128,那al=-128-128=-256 所以溢出了,此时:OF=1
对于无符号数:al=80H+80H=100HCF=1 SF=0 ZF=1 PF=1add al,05H0FCH的有符号数是-4,那al=-4+5=1 ,没有溢出,OF=0
对于无符号数的运算:al=0FCH+05H=101H=0001 0000 0001B CF=1 SF=0 ZF=0 PF=0add al,0BHal=7DH+0BH=88H=1000 1000H
CF=0 OF=1 SF=1 ZF=0 PF=1
虽然是正数,但是超出了有符号数的表达范围(-80H ~ 7FH),所以溢出了。
果然比较难,这次算是比较深入的学习了一下标志寄存器了。
参考资料:
http://baike.baidu.com/view/1845107.htm
http://blog.csdn.net/masefee/article/details/4094183
补码的知识也需要,因为对于有符号数的转换
http://blog.fishc.com/442.html
页:
[1]