내가 ASM에 새로운 오전, 나는이 기능을 사용하여 기본 안녕하세요 세계 프로그램을 만들려고 해요 :하지만,ASM의 x86_64에 안녕하세요 세계 프로그램
이section .text
global main
print_msg:
push rbp
mov rbp, rsp
mov rax, 1
mov rdi, 1
mov rsi, Buffer ;to change
mov rdx, BufferSize ;to change
syscall
mov rsp, rbp
pop rbp
ret
main:
mov rdi, Buffer
mov rsi, BufferSize
call print_msg
mov rax, 60
mov rdi, 0
syscall
section .rodata
Buffer: db 'Hello, world !', 0x0A
BufferSize: equ $-Buffer
이 코드는 실제로 작동 만 내가 직접 버퍼 복사로 인해 RDX의 RSI와 버퍼 크기에, 내 "print_msg"기능에,하지만이 두 레지스터에 수신 가지 인자를 복사 할, 내가 좋아하는 것을 보았다
mov rsi, [rsp + 8]
mov rdx, [rsp + 12]
을하지만 그것은 여기에 작동하지 않습니다.
mov rdi, Buffer
mov rsi, BufferSize
call print_msg
당신이 인수 rdi
및 rsi
로드, 왜 당신이 그들을 호출 된 함수의 스택에있을 것으로 예상합니까 : 코드도 보여으로