Сегодня я начал изучать сборку 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
Похоже, я использую ложные регистры.