Krafton_Jungle/Study
Krafton_jungle 5기 19일차 TIL - CSAPP
전낙타
2024. 4. 6. 00:27
CSAPP
데이터의 형식
C declaration | Intel data type | Assembly-code suffix | Size |
char | Byte | b | 1 |
short | Word | w | 2 |
int | Double word | l | 4 |
long | Quad word | q | 8 |
char * | Quad word | q | 8 |
float | Single precision | s | 4 |
double | Double precision | l | 8 |
이 내용은 인텔 레지스터에 자주 사용되는 단위임으로 Assembly-code suffix는 모두 외우고 있는게 좋다.
정보 접근하기
정수 레지스터 | 중첩된 상자들이 보여주듯이 인스트럭션들은 16개의 레지스터 하위 바이트들에 저장된 다양한 크기의 데이터에 대해 연산할 수 있다. |
역할 | 스택을 관리하고, 함수의 인자를 넘겨주고, 함수에서 값을 리턴하고, 로컬데이터와 임시 데이터를 저장하기 위해 사용된다. |
오퍼랜드 식별자 | 연산을 수행할 소스값과 그 결과를 저장할 목적지의 위치를 명시한다. |
식별자 타입 | immediate - 상수값을 말한다. $기호 다음에 C표준 서식을 사용해서 표현 register - 레지스터의 내용을 말함. effective address - 메모리 주소가 저장되어 있는 부분을 명시 |
데이터 이동 인스트럭션 | movb, movw, movl, movq 네개의 인스트럭션 모두는 값을 옮기는 역할을 하는데, 여기서 뒤에 붙는 접미사는 아까 위에서 봤던 byte의 단위이다. 해당 byte 단위에 유효한 데이터만 옮길 수 있다. |
스택 데이터의 저장과 추출 | 스택은 기본적으로 선입선출의 구조를 띈다. 스택은 아래 방향으로 성장하며, 스택의 바닥을 가르키는 rbp와 프로시저를 call할때 스택의 현재 위치를 저장하는 rsp가 있음 |
산술 연산과 논리 연산
유효 주소 적재 | 유효 주소 적재 인스트럭션 leaq로 사용하며 movq 인스트럭션의 변형. 메모리에서 레지스터로 읽어들이는 인스트럭션의 형태를 갖지만, 메모리를 전혀 참조하지 않는다. 유효주소를 목적지에 복사한다는 방식은 마치 포인터를 연상시켰음 |
기타 연산 | 당항 및 이항 연산과 쉬프트 연산 또한 가능하다. n의 n승을 계산할때 해당 방법을 사용할것으로 추정 |
프로시저
프로시저란? | 또 추상화된 개념이다. 함수와 비슷하다고 생각되나, 함수처럼 직접적인 계산을 의미하는 것이 아닌, 함수, 메소드, 서브루틴, 핸들러 등으로 구성된 작업을 의미하는 것 같다. |
런타임 스택 | 스택 자료구조가 제공하는 후입 선출 메모리 관리 방식을 활용함. 함수를 call하면 스택에 차곡차곡 쌓이는 방식으로 작동한다. |
제어의 이동 | 다른 프로시저를 call하고 그 값을 return 받는 방식은 아래 사진과 같다. |
드디어 어셈블리어와 첫 대면을 끝냈다.