Assembly

혀누·2021년 12월 30일
0

우당탕탕C

목록 보기
5/5

Basic

  • 레지스터 이름 앞에 %를 붙여서 레지스터를 나타낼 수 있다.

  • (%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

profile
개발자(물리)

0개의 댓글