检测点11.1
写出下面每条指令执行后,ZF、PF、SF等标志位的值。
sub al,al ZF=1 PF=1 SF=0
mov al,1 ZF=1 PF=1 SF=0
push ax ZF=1 PF=1 SF=0
pop bx ZF=1 PF=1 SF=0
add al,bl ZF=0 PF=0 SF=0 ;al为00000001,bl为00000001 add后00000010
add al,10 ZF=0 PF=1 SF=0 ;al为00000010,10为00001010 add后00001100
mul al ZF=0 PF=1 SF=0 ;相乘结果为 00000000 1001 0000
00001100*00001100=00000000 1001 0000
注意点:
push、pop、mov指令对flag寄存器没有影响
第七条mul al指令执行,其中al为8位寄存器,执行的是8位乘法,结果为应为16位,放在ax中,也即00000000 1001 0000(而非1001 0000,导致判断错误),可知sf为负,debug中验证可知,sf值为PL,表示非负