使用printf打印bx寄存器中的值(汇编语言)

时间:2015-02-26 06:44:38

标签: assembly stack printf

我试图打印出bx register的内容。

print_str早先定义为:

    print_str:  db "Result: %d", 10, 0        

当我在bx中弹出debugger时,我发现3已放入bx。但是,在致电printf后,我获得了output "Result: 196611"

    pop  bx
    push eax
    push bx     ; substitute with whatever you want to print
    push print_str    ; defined in the .data section
    call printf
    add esp, 8  ; pop the Msg and number off the stack
    pop eax     ; restore the value in eax that we stashed

修改:当我将push bx替换为push 3时,会print "Result: 3",因此我不会说出push bx出现的问题:(

1 个答案:

答案 0 :(得分:1)

如果您push bx将16位值推送到堆栈。它不会转换为32位值,堆栈仅递减2(两个字节)。您似乎使用32位C库,其中printf期望堆栈上的32位值。因此,printf会将BX 作为以前推送EAX的一部分。

BX展开到EBX并推送EBX

movsx ebx, bx
push ebx