检测点11.1
写出下面每条指令执行后,ZF、PF、SF、等标志位的值。
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
检测点涉及的相关内容:
ZF是flag的第6位,零标志位,记录指令执行后结果是否为0,结果为0时,ZF=1
PF是flag的第2位,奇偶标志位,记录指令执行后结果二进制中1的个数是否为偶数,结果为偶数时,PF=1
SF是flag的第7位,符号标志位,记录有符号运算结果是否为负数,结果为负数时,SF=1
add、sub、mul、div 、inc、or、and等运算指令影响标志寄存器
mov、push、pop等传送指令对标志寄存器没影响。
检测点11.2
写出下面每条指令执行后,ZF、PF、SF、CF、OF等标志位的值。
al CF OF SF ZF PF
sub al,al 0h/0000 0000b 0 0 0 1 1
mov al,10h 10h/0010 0000b 0 0 0 1 1
add al,90h a0h/1010 0000b 0 0 1 0 1
mov al,80h 80h/1000 0000b 0 0 1 0 1
add al,80h 0h/0000 0000b 1 1 0 1 1
mov al,0fch 0fch/1111 1100b 1 1 0 1 1
add al,05h 1h/0000 0001b 1 0 0 0 0
mov al,7dh 7dh/1111 1101b 1 0 0 0 0
add al,0bh 88h/1000 1000b 0 1 1 0 1
检测点涉及的相关内容:
ZF是flag的第6位,零标志位,记录指令执行后结果是否为0,结果为0时,ZF=1
PF是flag的第2位,奇偶标志位,记录指令执行后结果二进制数中1的个数是否为偶数,结果为偶数时,PF=1
SF是flag的第7位,符号标志位,记录有符号运算结果是否为负数,结果为负数时,SF=1
CF是flag的第0位,进位标志位,记录无符号运算结果是否有进/借位,结果有进/借位时,SF=1
OF是flag的第11位,溢出标志位,记录有符号运算结果是否溢出,结果溢出时,OF=1
add、sub、mul、div 、inc、or、and等运算指令影响flag
mov、push、pop等传送指令对flag没影响
检测点11.3
(1)补全下面的程序,统计F000:0处32个字节中,大小在[32,128]的数据个数。
mov ax,0f000h
mov ds,ax
mov bx,0 ;ds:bx指向第一个字节
mov dx,0 ;初始化累加器
mov cx,32
s: mov al,[bx]
cmp al,32 ;和32进行比较
jb s0 ;如果低于al转到s0,继续循环
cmp al,128 ;和128进行比较
ja s0 ;如果高于al转到s0,继续循环
inc dx
s0: inc bx
loop s
[32,128]是闭区间,包括两端点的值
(32,128)是开区间,不包括两端点的值
检测点11.3
(2)补全下面的程序,统计F000:0处32个字节中,大小在(32,128)的数据个数。
mov ax,0f000h
mov ds,ax
mov bx,0 ;ds:bx指向第一个字节
mov dx,0 ;初始化累加器
mov cx,32
s: mov al,[bx]
cmp al,32 ;和32进行比较
jna s0 ;如果不高于al转到s0,继续循环
cmp al,128 ;和128进行比较
jnb s0 ;如果不低于al转到s0,继续循环
inc dx
s0: inc bx
loop s
[32,128]是闭区间,包括两端点的值
(32,128)是开区间,不包括两端点的值
检测点11.4
下面指令执行后,(ax)= 45h
mov ax,0
push ax
popf
mov ax,0fff0h
add ax,0010h
pushf
pop ax
and al,11000101B
and ah,00001000B
推算过程:
popf后,标志寄存器中,本章节介绍的那些标志位都为0(但是此时标志寄存器并不是所有位置都为0,这个不用关心,没学过的位置用先代替),向下进行,那么pushf将计算后的当时状态的标志寄存器入栈,然后pop给ax,这是ax是寄存器的值(这个值中包含了我们的号),接下来就是对那些没有学过的标志位的屏蔽操作,这就是最后两条指令的意义所在,将不确定的位置都归0,那么只剩下我们能够确定的位置了,所以,结果就可以推理出来了。
mov ax,0
push ax
popf
mov ax,0fff0h
add ax,0010h
pushf
pop ax 0 0 0 0 of df if tf sf zf 0 af 0 pf 0 cf
0 0 0 0 0 0 * * 0 1 0 * 0 1 0 1
ax=flag=000000** 010*0101b
and al,11000101B al=01000101b=45h
and ah,00001000B ah=00000000b=0h