Код сборки x86 выполняется успешно, но vscode показывает ошибку без дополнительной информации.
Я новичок в сборке, и у меня возникла проблема. Я скомпилировал следующий код с помощью 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 показывает некоторые ошибки без дополнительной информации.
Я попытался удалить строку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 после исправления
Может ли кто-нибудь помочь мне решить проблему и объяснить ее? Спасибо!
1 ответ
Спасибо за мистера/мисс. Ответ Питера (а также спасибо за ответ г-на/г-жи rpatel3001): я решаю эту проблему, резервируя место в стеке.
Вот код после изменения:
.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