[汇编语言] 检测点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

解答

ax = 0000
ax = 0000
ax = 0000
ax = 0fff0
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最终的值。
ax = 0069h
al = 0100 0101 & 11000101 = 0100 0101  = 45h
ah = 0000 0000 & 00001000B = 0h
上一篇下一篇

猜你喜欢

热点阅读