鱼C论坛

 找回密码
 立即注册
查看: 3307|回复: 1

关于课后题11.1引发的对标记寄存器的思考,求解惑

[复制链接]
发表于 2011-4-9 16:20:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
首先,我们看一下11.1需要做的事情:
写出下面每条指令执行后,ZF\PF\SF等标志位的值
……………………

那么,我们回顾一下关于鱼老师对ZF\PF\SF标志位的教学:
标记寄存器中,2、6、7位分别存放的是PF\ZF\SF值
思考一:标志寄存器,到底和普通寄存器一样,类似AX BX这样,还是仅仅是对计算结果的一个判断?如果是一个标志寄存器的话,它的符号是什么?在054讲中,一直都没说到这个值是存放在哪里的!
OK,这个是后面引申出来的问题,我们先接着往下看

紧接着,讲了关于ZF的用法,并举例说明了:

mov ax,1
sub ax,1
执行后,结果为0,ZF=1
mov ax,2
sub ax,1
执行后,结果为1,ZF=0、

以上,从字面都能理解,但是!

思考二:执行后的结果为0/1那么,这个0/1是放在AX中的对吧?此时并没有说明向“标志寄存器”中写入这个结果,我们的标志寄存器如何来判断的那个结果0/1,从而得出的ZF=0/1呢?
还是说,直接是将0/1转换成了00000000/00000001,然后直接对第六位进行判断?
OK,这个问题的答案也是显然是前者,那么请说明解释下吧!

接下来,关于SF的问题就大了
思考三:
00000001B,可以看做是1,或者是+1
10000001B,可以看做是129,或者是-127
刚好,这里说的符号位也正是第七位,而SF的标志位也在第七位!
还是上面的问题,这里的第七位是0/1就向SF中写入0/1吗?还是说SF是直接读取的这里的0/1来作为自己的值?前者需要有寄存器来存储,后者就无需寄存器来存储
所以也请解释解释

关于课后题11.1……额,也许是我笨吧……至今没想明白
来看看吧
【每条执行后的ZF PF SF值,所以我写出自己的计算吧,求高手解惑或者老师解答】
sub al,al
--al-al=00000000B
所以,ZF=1(因为结果是0)PF=1(有0个1,为偶)SF=0(按上面说的看第七位的值为0,所以SF为0了)
mov al,1
--al=00000001B
所以,ZF=0(因为结果是1,不是0)PF=0(有1个1,为奇)SF=0(同上,所以SF为0)
push ax
无影响3个值,同上
此时将1推入了栈
pop bx
无影响3个值,同上
此时将栈中的1拿出来赋给了BX
add al,bl
--al=00000001B,bl=00000001B,al=al+bl=00000010B
所以,ZF=0(因为结果是2,不是0)PF=0(有1个1,为奇)SF=0(同上,所以SF为0)
add al,10
--al=2+10=12=00001100
所以,ZF=0(因为结果是12,不是0)PF=1(有2个1,为偶)SF=0(同上,所以SF为0)
mul al
--al=al*al=144=10010000
所以,ZF=0(因为结果是144,不是0)PF=1(有2个1,为偶)SF=1(同上,所以SF为1)

求问,我这么理解了   为何就和答案不同。。。。答案是如何理解的???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-11 13:09:01 | 显示全部楼层
前面的那些东西关于CPU是怎么知道指令操作标志位的我不知道。
但是。后边监测点,你的思考是有问题的。
你学标志寄存器要把所以的因素都考虑进去。
第一条答案对了。第二条答案就错了。因为mov指令根本就不影响任何标志位。所以不管mov al,中什么值。一万也好。一千也罢。ZF,SF,PF都不变。你要看执行的指令是否影响标志位。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 22:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表