내가 사용자와 "안녕하세요, 여기에 이름이"어셈블리에서 사용자 입력을 수락 하시겠습니까? (맥 OS에) 단일 프로그램
이 지금까지 내 코드 인쇄에서 이름을 받아이 간단한 프로그램 몇 가지 문제가 있어요 ...
%define SYSCALL_WRITE 0x2000004
%define SYSCALL_EXIT 0x2000001
%define SYSCALL_READ 0x2000003
SECTION .data
prompt db "Enter name "
text2 db "Hello, "
SECTION .bss
name resb 16
SECTION .text
global _start
_start:
call _printText1
call _getInput
call _printText2
call _printName
mov rax, SYSCALL_EXIT
mov rdi, 0
syscall
_printText1:
mov rax, SYSCALL_WRITE
mov rdi, 1
mov rsi, prompt
mov rdx, 11
syscall
ret
_getInput:
mov rax, SYSCALL_READ
mov rdi, 0
mov rsi, name
mov rdx, 1
syscall
ret
_printText2:
mov rax, SYSCALL_WRITE
mov rdi, 1
mov rsi, text2
mov rdx, 7
syscall
ret
_printName:
mov rax, SYSCALL_WRITE
mov rdi, 1
mov rsi, name
mov rdx, 16
syscall
ret
출력 할 때 "Hello"가 출력되지 않습니다. 다음 명령 행하기 전에 인쇄 입력 한 이름의 첫 글자 ...
nMy-MacBook:Assembly username$ ame
하고 이름의 나머지는 시스템이
-bash: ame: command not found
내가 뭘 잘못하고 있니? _getInput 및 _printName 함수를 삭제하고 여전히 "Hello"를 인쇄하지 않고 "Enter name"만 인쇄합니다.
감사합니다.
당신이 디버거를 사용하고 있습니까? – InfinitelyManic
@InfinitelyManic 난 그냥 내 맥에서 터미널을 사용하고 있습니다. – srsrso
예 - 실제로 실행중인 어셈블리 코드를 단계별로 실행하기 위해 일부 디버거 소프트웨어를 사용하고 있습니까? 디버거를 사용하면 오류 지점을 식별하는 데 도움이됩니다. 예를 들어 GDB를 사용합니다. 그러나 커맨드 라인에서 Linux OS 나 OpenBSD를 사용합니다. – InfinitelyManic