|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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)
求问,我这么理解了 为何就和答案不同。。。。答案是如何理解的??? |
|