GAS (GNU Assembler)
macOS 에서는 as 컴파일러 사용.
macOS 에서는 clang에 포팜된 컴파일러가 사용된다
Hello, World! 출력 코드 작성
Reference : http://www.idryman.org/blog/2014/12/02/writing-64-bit-assembly-on-mac-os-x/
hello1.s 작성
.globl _main |
64bit assembly 에서는 system call 방식이 int 0x80 에서 syscall 로 변경되었다.
또한 syscall 번호도 base 0x2000000 이 추가된다
syscall 번호 확인 : https://opensource.apple.com/source/xnu/xnu-4570.1.46/bsd/kern/syscalls.master.auto.html
4 AUE_NULL ALL { user_ssize_t write(int fd, user_addr_t cbuf, user_size_t nbyte); }
rax 레지스터에 write syscall 인 4 + base 추가
rdi 레지스터에 stdout 인 1 추가 (fd)
rsi 레지스터에 "Hello, World!\n" 가 저장된 주소 추가 (cbuf)
rdx 레지스터에 길이 값 추가 (nbyte)
syscall 실행
ret 호출로 마무리