检测点 11.1
写出下面每条指令执行后,ZF、PF、SF 等标志位的值。
sub al,al ZF=1 PF=1 SF=0
结果为 00000000B,因此 ZF=1(零标志为真),PF=1(含 0 个 1,即偶数个 1,奇偶标志为真),SF=0(结果为非负数,负数标志为假)。
mov al,1 ZF=1 PF=1 SF=0
mov 指令为传送指令,不影响标志寄存器的值,因此标志寄存器保持原来的数据不变。
因此,虽然结果为 00000001B,但仍然是 ZF=1(零标志为真),PF=1(含 0 个 1,即偶数个 1,奇偶标志为真),SF=0(结果为非负数,负数标志为假)。
push ax ZF=1 PF=1 SF=0
push 指令为传送指令,不影响标志寄存器的值,因此标志寄存器保持原来的数据不变。
因此,虽然结果为 ss:[sp]=(ax),但仍然是 ZF=1(零标志为真),PF=1(含 0 个 1,即偶数个 1,奇偶标志为真),SF=0(结果为非负数,负数标志为假)。
pop bx ZF=1 PF=1 SF=0
pop 指令为传送指令,不影响标志寄存器的值,因此标志寄存器保持原来的数据不变。
因此,虽然结果为 (bx)=(ax),但仍然是 ZF=1(零标志为真),PF=1(含 0 个 1,即偶数个 1,奇偶标志为真),SF=0(结果为非负数,负数标志为假)。
add al,bl ZF=0 PF=0 SF=0
(bx)=(ax),所以 add al,bl 的结果为 (al)=0010B,因此结果为“非零”、“奇数个 1”、“非负数”,即标志位 ZF=0,PF=0,SF=0(三个标志位均为“假”)。
add al,10 ZF=0 PF=1 SF=0
计算的结果为 (al)=12(1100B),因此结果为“非零”、“偶数个 1”、“非负数”。
mul al ZF=0 PF=1 SF=0
计算结果为 (ax)=144(10010000B),因此结果为“非零”、“偶数个 1”、“非负数”。