Процедуры из C в сборке
Я должен написать короткую программу на ассемблере, но моя версия не работает. Он должен напечатать ASCII char, затем заменить его на целочисленное значение с помощью функции atoi и распечатать это значение. Для этого важно использовать процедуры из C: put () и atoi().
Что я делаю не так? Пожалуйста, объясни мне это как можно яснее. Я использую gcc, и я пишу в сборке intel_syntax.
Это мой код:
.intel_syntax noprefix
.text
.globl main
main:
mov eax, offset msg
push eax
call puts
pop eax
push eax
call atoi
pop eax
push eax
call puts
pop eax
.data
msg:
.asciz "a"
заранее спасибо
1 ответ
С помощью atoi
не имеет смысла в этом контексте. Вы уверены, что должны использовать это?
Предполагая, что вы хотите напечатать код ASCII вместо (который 97
за a
) вы могли бы использовать printf
или нестандартный itoa
вместо.
Кстати, вы уничтожаете возвращаемое значение из atoi
посредством pop eax
, Кроме того, вам не хватает ret
в конце main
,
Пример кода с использованием printf
:
main:
push offset msg
call puts
pop eax
movzx eax, byte ptr [msg]
push eax
push offset fmt
call printf
add esp, 8 # clean up stack
xor eax, eax # zero return value
ret # return
.data
msg:
.asciz "a"
fmt:
.asciz "%d\n"