지난번엔 데이터영역과 텍스트영역을 나누어
데이터영역에는 Hello World 라는 문자열을 담고
실제로 코드를 실행시키는 텍스트영역에는 msg 변수를 사용했다
과거 32비트 운영체제에는 e로 시작하는 레지스터들을 사용했었음
64비트는 r로 시작함
rax는 가장 중요한 레지스터 중 하나이고 system call의 실질적인 번호를 가리키는 레지스터이자 함수가 실행된 뒤에 결과가 담기는 곳
rbx는 베이스레지스터라고 하고 메모리 주소를 지정할 때 사용
rcx는 카운터레지스터로써 주로 반복문에 많이 사용됨
rdx는 데이터레지스터로써 연산을 수행할 때 rax와 함께 많이 사용이 됨
rax~rdx 데이터 레지스터라고 한다
rsi rdi rbp rsp 는 포인터 레지스터라고 한다 (특정한 주소를 가리키는 레지스터)
rsi는 메모리를 이동하거나 비교할 때 그 출발지 주소를 가리킨다
rdi는 메모리를 이동하거나 비교할 때 그 목적지 주소를 가리킨다
rbp는 함수의 파라미터나 변수의 주소를 가리킬 때 사용
rsp 또한 중요한데 스택에서 가장 위의 있는 주소 가리키는 레지스터
r8~r15 함수의 매개변수로써 자주 사용이 된다