美文网首页
[汇编语言] 检测点11.4

[汇编语言] 检测点11.4

作者: 耿杰 | 来源:发表于2019-08-03 23:41 被阅读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

    相关文章

      网友评论

          本文标题:[汇编语言] 检测点11.4

          本文链接:https://www.haomeiwen.com/subject/vcnsdctx.html