Процедуры из 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"
Другие вопросы по тегам