###### tags: `2020 Boostcamp` # Day08-학습정리 ### 스스로 확인할 사항 - **프로그램 실행 과정에 따라 레지스터가 어떻게 변화하는 지 확인하고 정리한다.** - 레지스터: CPU 내에 존재하는 메모리로 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 공간 - 메모리 계층의 최상위에 위치, 가장 빠른 속도로 접근 가을 - 데이터 연산을 위해서는 반드시 레지스터를 거처야 함 - 특정 주소를 가리키거나 메모리로부터 값을 불러올 수 있음 - 일반적 구성 - PC: 다음에 실행할 명령어의 주소를 가지고 있다. - IR : 현재 수행 중인 명령어를 가지고 있다. - MAR : 메모리로부터 읽어오거나 메모리에 쓰기 위한 주소를 가지고 있다. - MBR : 메모리로부터 읽어온 데이터 또는 메모리에 써야할 데이터를 가지고 있다. - I/O AR : 입출력 장치에 따른 입출력 모듈의 주소를 가지고 있다. - I/O BR: 입출력 모듈과 프로세서 간의 데이터 교환을 위해 사용된다. - 함수 프롤로그 과정 1. 함수 Call : 함수 호출시 복귀 주소를 스택에 저장한 뒤 해당 함수 코드로 점프 2. PUSH EBP : 이전 스택 프레임의 EBP를 저장 - 함수 에필로그 과정 1. MOV ESP,EBP : 사용중이던 스택의 끝을 EBP레지스터에 저장된 스택프레임 시작 주소로 복구 2. POP EBP : ESP가 가리키는 주소에 저장된 이전 EBP 주소를 EBP레지스터에 저장 3. RET : POP EIP로 스택에 저장된 복귀 주소를 EIP에 저장 - **반복문이나 함수 호출을 구현하려면, fetch() 부분만 바꿔서 동작하도록 하고 싶다면 어떻게 구현할 지 정리한다.** - fetch 할 때, PC를 저장 해놓고 반복문의 끝이나 함수 호출이 종료 될 때 다시 PC 값을 복구 시킨다 ![](https://i.imgur.com/jhwYI7t.png) ### 다같이 확인할 사항 - **비교를 위한 Compare 명령을 추가한다면 필요한 구조, 변경할 사항에 대해 토론한다.** - 비교를 위한 추가적인 register가 필요하다 - 메모리 주소값을 비교할 것인지 값을 비교할 것인지에 대한 인터페이스가 필요하다 - 대소비교를 위한 연산이 추가적으로 필요하다 - **실수(부동소숫점)을 표현하는 표준에 대해 학습하고, ALU에서 그대로 처리가 가능한 지 혹은 별도 구조가 필요한지 토론한다.** - 부동소수점 > `실수`를 컴퓨터상에서 근사하여 표현할 때 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것으로, `유효숫자`를 나타내는 `가수(假數)`와 소수점의 위치를 풀이하는` 지수(指數)`로 나누어 표현 - 부동소수점 레지스터가 필요 ![](https://i.imgur.com/7PZwjBJ.png) - 정규화된 표현을 사용한다 $$ x = \pm(.b_1b_2\dotsm b_k)* \beta^e $$ - IEEE 754 $$ N = (-1)S 2E-127 (1.M) $$