레지스터 이름 앞에 %를 붙여서 레지스터를 나타낼 수 있다.
(%eax)와 %eax는 엄연히 다른 역할을 한다. 괄호가 붙으면 해당레지스터에 메모리 주소가 들어있고, 그 메모리 주소가 가리키는 값을 나타낸다. 즉, 포인터다.
어셈블리 언어에서 사용되는 상수의 경우는 기본적으로 해당 주소의 메모리 값을 나타낸다. 해당 상수 자체를 나타내기 위해서는 $를 앞에 붙인다.
-> $8: 상수 8을 나타냄
-> 8: 메모리의 0x8 주소에 있는 값을 나타냄
add, sub, mov 등의 명령어 뒤에 붙는 b,w,l등은 변수의 크기를 나타낸다.
-> movb: byte단위의 명령
-> movw: word(4byte)단위의 명령
-> movl: double word(8byte)단위의 명령
괄호활용
-> (%eax, %ebx) => (%eax + %ebx) => 두 레지스터의 값의 합이 가리키는 메모리 주소의 값.
-> (%eax, %ebx, 3) => (%eax + %ebx *3)=>마지막 항은 두번째 항에 곱하기로 적용
-> 8(%eax) => (8+%eax) => 상수를 더한 결과가 가리키는 주소의 값
mov, push, pop 명령어의 용도
-> movl A B: A의 값을 B에 저장한다.
-> pushl A: A의 값을 stack에 저장 (ex; pushl %eax)
-> popl A: stack에서 값을 하나 제거하면서 A에 저장(ex; popl %eax => stack의 맨위의 값을 %eax레지스터에 저장)
ret : return