assembly x86汇编代码成功运行,但vscode显示错误,没有更多信息

ygya80vv  于 2023-04-21  发布在  Vscode
关注(0)|答案(1)|浏览(157)

我是新来的assmbly,我有一些问题。我用GCC编译了以下代码:

.intel_syntax noprefix

.section .data
number:
    .int 65

message:
    .ascii "The number is %d %d.\n\0"

.section .text
    .globl  _main

_main:
    push ebp

    lea eax, [message]
    mov ebx, number
    mov [esp + 8], ebx
    add ebx, 1
    mov [esp + 4], ebx
    mov [esp], eax

    call _printf

    pop ebp
    xor eax, eax
    ret

它可以在控制台上显示消息The number is 66 65.,但vscode显示一些错误,没有更多信息。
vscode output
我尝试删除mov [esp + 4], ebx行,vscode显示的错误得到修复。

.intel_syntax noprefix

.section .data
number:
    .int 65

message:
    .ascii "The number is %d %d.\n\0"

.section .text
    .globl  _main

_main:
    push ebp

    lea eax, [message]
    mov ebx, number
    mov [esp + 8], ebx
    add ebx, 1
    mov [esp], eax

    call _printf

    pop ebp
    xor eax, eax
    ret

vscode output after fixing
有谁能帮我解决这个问题并解释一下吗?谢谢!

ca1c2owp

ca1c2owp1#

感谢Peter先生/女士的回答(也感谢rpatel 3001先生/女士的回答),我通过保留堆栈空间来解决这个问题。
下面是修改后的代码:

.intel_syntax noprefix

.section .data
number:
    .int 65

message:
    .ascii "The number is %d %d.\n\0"

.section .text
    .globl  _main

_main:
    push ebp
    sub esp, 8 # <-----

    lea eax, [message]
    mov ebx, number
    mov [esp + 8], ebx
    add ebx, 1
    mov [esp + 4], ebx
    mov [esp], eax

    call _printf

    add esp, 8 # <-----

    pop ebp
    xor eax, eax
    ret

相关问题