[汇编语言] 检测点11.4
2019-08-03 本文已影响0人
耿杰
一、下面的程序执行后:(ax) = ?
mov ax, 0
push ax
popf
mov ax, 0fff0h
add ax, 0010h
pushf
pop ax
and al, 11000101B
and ah, 00001000B
解答
- 1、mov ax, 0
ax = 0000
- 2、push ax
ax = 0000
- 3、pops
ax = 0000
- 4、mov ax, 0fff0h
ax = 0fff0
- 5、add ax, 0010h
ax = 0000
1、ax为什么等于0000
实际结果值(无符号运算): 0fff0 + 0010 = 10000h。由于ax是16位寄存器,所以1是进位值,ax = 0000
2、标志寄存器值为多少
a、逻辑结果值(有符号运算):
0fff0 对应着有符号数:-10h
0010 对应着有(无)符号数:10h
-10h + 10h = 0
b、
ZF = 1,ax的值为0000
OF = 0,没有溢出
CF = 1, 无符号运算结果为 10000h,溢出了
SF = 0,结果为0,不是负数
PF = 1,结果为0,对应的二进制为: 0000 0000, 偶数个1。
c、
flag 寄存器的结构
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF
0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1
d、0000 0000 0100 0101 对应着16进制值为 0045h。
e、注意:实际运行结果是 0000 0000 0100 0111 对应着16进制值为 0045h。但是不影响ax最终的值。
- 6、pop ax
ax = 0069h
- 7、and al, 11000101B
al = 0100 0101 & 11000101 = 0100 0101 = 45h
- 8、and ah, 00001000B
ah = 0000 0000 & 00001000B = 0h
- 9、ax =
0045h