컴퓨터구조

[컴퓨터 구조] 어셈블리어 2. 예제

greenkang 2023. 5. 1. 01:33

📗 어셈블리 메모리 주소, 크기, 포인터 표기법

📌 메모리 주소 표기법

메모리 주소는 대괄호 [] 로 표기한다.

ex) [00402001], [02130423] 등등등,,

 

📌 크기 표기법

레지스터의 크기에 맞춰 명령어에 들어갈 필수 입력 정보

  • DWORD : 4byte
  • WORD : 2byte
  • BYTE : 1byte

 

📌 포인터 표기법

PTR 


📗 C언어로 작성된 간단한 사칙연산 소스 코드 

int square(int num) {
    int a = 1, b = 2;
    int c = a + b;
    
    return c;
}
push    rbp
mov     rbp, rsp
mov     DWORD PTR [rbp-20], edi
mov     DWORD PTR [rbp-4], 1
mov     DWORD PTR [rbp-8], 2
mov     edx, DWORD PTR [rbp-4]
mov     eax, DWORD PTR [rbp-8]
add     eax, edx
mov     DWORD PTR [rbp-12], eax
mov     eax, DWORD PTR [rbp-12]
pop     rbp
ret
  • push    rbp : 특정 함수 접근을 위해 스택의 공간 확보
  • mov     rbp, rsp : rsp의 값을 rbp에 저장, 가장 최근에 저장된 공간의 주소(rsp)를 스택의 바닥공간 주소(rbp)로 저장
  • mov     DWORD PTR [rbp-20], edi : 함수를 호출할 때, 할당한 edi를 rbp-20위치에 크기 4byte만큼 할당하여 저장
  • mov     DWORD PTR [rbp-4], 1 : 1을 rbp-4위치에 크기 4byte만큼 할당하여 저장
  • mov     DWORD PTR [rbp-8], 2 : 2를 rbp-8위치에 크기 4byte만큼 할당하여 저장
  • mov     edx, DWORD PTR [rbp-4] : rbp-4 위치에 있는 값을 edx에 저장
  • mov     eax, DWORD PTR [rbp-8] : rbp-8 위치에 있는 값을 eax에 저장
  • add     eax, edx : eax에 있는 값 edx에 있는 값을 더하여 eax에 저장
  • mov     DWORD PTR [rbp-12], eax : eax에 있는 값을 rbp-12위치에 크기 4byte만큼 할당하여 저장
  • mov     eax, DWORD PTR [rbp-12] : rbp-12에 값을 eax에 저장
  • pop     rbp : 사용이 끝난 레지스터 pop
  • ret : 함수를 호출한 바로 다음 지점으로 이동

어셈블리에 대한 내용을 짧게 정리해보았습니다!

 

글을 쓰면 쓸수록.. 아직 많이 부족하다는 생각이 드네요😢.

예제를 살펴보면서 알게된 스택프레임 등등.. 많은 것들을 정리하지 못해서 아쉽습니다.

 

혼자공부하는컴퓨터구조+운영체제를 완독하면 관심가는 부분은 따로 더 깊게 공부해서 아쉬움을 채워보도록 하겠습니다!