---
# System prepended metadata

title: Day08-학습정리
tags: [2020 Boostcamp]

---

###### 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)
      $$

