有一段代码,请写出寄存器的变化情况?jmp $+9
mov ax,0
mov cx,8
add ax,cx请写出其不16位的情况和32位的情况,谢谢!!

解决方案 »

  1.   

    int main(int argc, char* argv[])
    {
    _asm
    {
    jmp $+9
    mov ax,0
    mov cx,8
    add ax,cx
    }
    return 0;
    }运行结果为:
    ax初始值为0xCCCCCCCC,cx为0
    jmp $+9跳过了mov ax,0直接运行mov cx,8
    所以最后cx是8,ax是0xCCCCCCCC + 8
      

  2.   

    10:           jmp $+9
    00401028   jmp         main+21h (00401031)
    11:           mov ax,0
    0040102D   mov         ax,offset main+1Fh (0040102f)
    12:           mov cx,8
    00401031   mov         cx,offset main+23h (00401033)
    13:           add ax,cx
    00401035   add         ax,cx
    这是上面的语句编译后的代码,jmp用了4bit,mov也是4bit,所以jmp $+9就跳过了mov ax,0