汇编语言11.1检测点求指点,实在不明白.
这个题目谁会
sub al,al ZF=1 PF=1 SF=0
mov al,1 ZF=0 PF=0 SF=0
后面的就不会了。
谁能给个详细的解释,我看了小甲鱼的答案,但是还是不懂啊。求调教啊。
这是关键,其它应该没问题 add al,bl al=2 即00000010,
add al,10 al=12d 即00001100
mul al ax=144d 即00000000 10010000 ,ax是16位的寄存器, sf要看所放寄存器的最高位是0还是1
这主要是搞明白每步执行之后的结果是什么就好办了,我们慢慢分析
你看。从第一步开始。
sub al,al ;al-al结果为0,所以zf=1,pf=1,sf=0
mov al,1 ;al=0000 0001 zf=0,pf=0,sf=0
push ax ;因为push是传送指令,所以对标志寄存器没有影响,结
;果还是zf=0,pf=0,sf=0
pop bx ;(bx)=(ax)=0000,0000,0000,0001b
;所以同上zf=0,pf=0,sf=0
add al,bl ;也就是0000 0001+0000 0001=0000 0010b
;所以 zf=0,pf=0,sf=0
add al,10 ;注意,这里的10 是十进制的换成二进制就是1010b
;再加上al就是0000 1010(10的二进制)+0000 0010(al)=0000 1100b 所以zf=0,pf=1,sf=0
mul al ;因为是8位的乘法,所以一个默认放在al中,此时(al)=0000 1100b,再乘以al就是0000 1100b*0000 1100b
;也就是0BH*0BH,就是两个十六进制的B相乘,结果是79H
;存储在ax中,换成二进制就是 0000 0111 0000 1001b
;所以,zf=0,pf=0,sf=0
这样说,你理解了吗?
如果。。。 发表于 2012-8-19 09:49 static/image/common/back.gif
这主要是搞明白每步执行之后的结果是什么就好办了,我们慢慢分析
你看。从第一步开始。
最后一个应该是 0CH * 0CH = 90H 。
因为1100b转换成16进制是C。不知道你是不是忽略了。
所以最后一个是 zf = 0, pf = 1, sf = 0.
特别谢谢你的解答。 离丶dong子 发表于 2012-8-21 18:01 static/image/common/back.gif
最后一个应该是 0CH * 0CH = 90H 。
因为1100b转换成16进制是C。不知道你是不是忽略了。
所以最后一个是 ...
嗯嗯。对对,,。。。。是啊!
页:
[1]