Ассемблерная подсказка для ввода пользователя не работает - PullRequest
0 голосов
/ 31 мая 2018

Сегодня я начал изучать сборку x86_64 с NASM на Linux.Я успешно написал программу Hello World.Теперь я хочу написать другую простую программу.Программа должна спросить у пользователя его имя и затем вывести «hi [name]».Моя проблема в том, что программа не запрашивает имя.Если я запускаю программу, она ничего не печатает и останавливается без ошибки.Вот мой код:

section .data
    msg1 db "Type in ur Name? ", 10
    len1 equ $ - msg1       ; Get the Size of msg1

    msg2 db "Hi, "
    len2 equ $ - msg2       ;Get the Size of msg2

section .bss
    name resb 16            ;16 Bytes for name

section .text
    global _start

_start:

    ;Call Functions
    call _printMsg1
    call _getName
    call _printMsg2
    call _printName

    mov eax, 60
    mov ebx, 0
    int 0x80


_printMsg1:
    mov eax, 1
    mov ebx, 1
    mov ecx, msg1
    mov edx, len1
    int 0x80
    ret


_printMsg2:
    mov eax, 1
    mov ebx, 1
    mov ecx, msg2
    mov edx, len2
    int 0x80
    ret


_printName:
    mov eax, 1
    mov ebx, 1
    mov ecx, name
    mov edx, 16     ; reserve 16 Bytes for the name
    int 0x80
    ret


_getName:
    mov eax, 0      ;Syscall 0 = User Input
    mov ebx, 0
    mov ecx, name
    mov edx, 16     ;16 Bytes for the name
    int 0x80
    ret

Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ: Я нашел проблему.Программа работает, если я заменяю следующие регистры с: eax на rax ebx на rdi ecx на rsi edx на rdx

Похоже, я использую ложные регистры.

1 Ответ

0 голосов
/ 31 мая 2018

Системные вызовы x86-32 и x86-64 сильно различаются по номерам, регистрам и инструкциям системного вызова.

Системный вызов x86-32 использует int 80h, и эти номера и регистры: http://www.lxhp.in -berlin.de / lhpsysc0.html

Системный вызов x86-64 использует syscall, и это номера и регистры: http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/

Вы используете x86-32системные вызовы, поэтому измените номера в EAX соответственно.

...