컴퓨터구조
[컴퓨터 구조] 어셈블리어 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 : 함수를 호출한 바로 다음 지점으로 이동
어셈블리에 대한 내용을 짧게 정리해보았습니다!
글을 쓰면 쓸수록.. 아직 많이 부족하다는 생각이 드네요😢.
예제를 살펴보면서 알게된 스택프레임 등등.. 많은 것들을 정리하지 못해서 아쉽습니다.
혼자공부하는컴퓨터구조+운영체제를 완독하면 관심가는 부분은 따로 더 깊게 공부해서 아쉬움을 채워보도록 하겠습니다!