Assembly로 뭘 할 수 있을까?
나는 생각했다 내가 입력한걸 10번 출력해주는 그런 것을
그래서 만들어 보았다
코드
section .text
global _start
_start:
mov rsi, rsp
sub rsi, 0x10
mov rdx, 0x10
xor rdi, rdi
xor rax, rax
syscall
;write
mov r10, 1
again:
cmp r10, 10
je done
inc r10
mov rax, 1
mov rdi, 1
syscall
jmp again
;finish
done:
mov rax, 0x3c
mov rdi, 0
syscall
처음에 배울 때 "대체 왜?? 저렇게 하는 거지??"라고 생각했던 것들이 이젠 하루 지나니 조금은 이해가 되었나 보다
위의 코드는 처음으로 내가 스스로 만들어 본 것이다.
코드를 작성하며 헷갈렸던 부분은 syscall 할 때마다 rax에는 함수 호출 후의 반환 값이 들어간다는 것이었다
그래서 again에서
again:
cmp r10, 10
je done
inc r10
mov rax, 1
syscall
jmp again
syscall을 하기 전 mov rax, 1로 rax를 계속 바꿔 주는 것을 볼 수 있다.