关于检测点11.1和小甲鱼的不同意见
原题:检测点11.1写出下面每条指令执行后,ZF、PF、SF、等标志位的值。
sub al,al
mov al,1
push ax
pop bx
add al,bl
add al,10
mul al
首先,我不知道pop bx出来了个啥值(这个感觉是本题的BUG,因为这个值谁都不知道,而且会影响后面的结果。。。我们就按小甲鱼给的答案1来算)
下面是小甲鱼的答案:
sub al,al al=0h ZF=1 PF=1 SF=0
mov al,1 al=1h ZF=1 PF=1 SF=0
push ax ax=1h ZF=1 PF=1 SF=0
pop bx bx=1h ZF=1 PF=1 SF=0
add al,bl al=2h ZF=0 PF=0 SF=0
add al,10 al=12h ZF=0 PF=1 SF=0
mul al ax=144h ZF=0 PF=1 SF=0
前面都没问题,对于最后一行,我提出一点不同意见。add al,10,是给al+10,不是10h!也就是说,倒数第二句执行完,al应该等于0ch,也就是12.而mul al执行后,应该为144,也就是90h。所以,最后一句的sf=1.
小甲鱼在这里直接将指令在debug中输入,大家都知道debug默认是16位的,从而造成了这个问题。
建议楼主查指令集手册,弄错了方向白忙活了哦 你看下pop 寄存器的意思 是出栈 用一个寄存器接受出栈数据 前面push ax 是把ax入栈 再pop给bx 此时 bx和ax相等 ......
AX=000CBX=0001CX=0011DX=0000SP=0000BP=0000SI=0000DI=0000
DS=0B3FES=0B3FSS=0B4FCS=0B4FIP=000A NV UP EI PL NZ NA PE NC
0B4F:000A F6E0 MUL AL
-t
AX=0090BX=0001CX=0011DX=0000SP=0000BP=0000SI=0000DI=0000
DS=0B3FES=0B3FSS=0B4FCS=0B4FIP=000C NV UP EI PL NZ NA PE NC
0B4F:000C B8004C MOV AX,4C00
......
ax=0090h=10010000b, SF位为PL,是0,为什么?
支持楼主,最后一行sf=1 MUL为无符号数乘法指令 不影响SF位 所以SF=0
IMUL是有符号乘法指令 影响SF位
页:
[1]