LISTORY

[윈도우즈 시스템 프로그래밍] LOAD & STORE 명령어 디자인 본문

IT/윈도우 프로그래밍

[윈도우즈 시스템 프로그래밍] LOAD & STORE 명령어 디자인

LiStoryTeller 2018. 5. 21. 16:07



뇌를 자극하는 윈도우즈 시스템 프로그래밍 책의 YouTube 강의 정리이다.


이번에 정리할 내용은 LOAD & STORE 명령어 디자인 부분이다.


⊙ YouTube 주소 ⊙ ☞  LOAD & STORE 명령어 디자인




LOAD & STORE 명령어 디자인


이번 강의에 들어가기 앞서 저번 강의 부분을 이어 정리하겠다.


사칙연산이외의 명령어를 디자인 해보자



⊙ 명령어 구조 및 명령어 디자인


앞 강의 내용에 따르자만 CPU에서 연산한 결과는 바로 메모리에 저장하지 않고 레지스터에 저장한다. 


왜 메모리에 직접 저장하는 것은 안될까?


모든 CPU의 데이터는 레지스터를 통해서 빠져나간다.


레지스터는 여러 역할이 있지만 데이터의 입출력 관련해서 역할은 데이터를 CPU로 들여보내고 내보내는 역할을 맡는다.


그럼 어차피 항상 데이터는 레지스터를 통해서 나가는데 명령어에 레지스터 주소를 써줘야 할까?


바로 최종 목적지 메모리 주소를 쓰면 더 간단하지 않을까


CISC에서는 이것이 가능하다. 하지만 RISC에서는성능 향상의 문제로 쓸 수 없다.


피연산자에는 레지스터와 숫자밖에 올 수 없다. 


근데 예를 들어 , 우리가 피연산자1과 피연산자2에 각기 다른 메모리 주소를 넣었다고 가정해보자.


이때, 메모리 주소만을 가지고 값에 직접 어드레싱 할 수 없으므로 결국 연산이 불가능 하다.


이렇게 어떠한 제약사항이 있으면 RISC에서는 성능상의 문제로 할 수 없다.


RAM에 있는 데이터들을 cpu에 넣고 싶을 땐 어떤 방법을 써야할까?


이런 경우를 대비하여 있는 명령어가 LOAD와 STORE 이다.


RAM에 있는 데이터를 레지스터로 옮기는 명령어를 LOAD, 반대가 STORE 명령어이다.



⊙ LOAD & STORE 명령어의 필요성


명령어의 제한

- 사칙연산의 피 연산자는 숫자 또는 레지스터 이다.

- 연산결과는 레지스터에 저장해야 한다.

- 즉, 레지스터를 통해서 모든 연산을 진행하도록 디자인 하겠다.


명령어에는 이러한 제한이 있고, 이러한 제한으로 인해 LOAD와 STORE 명령어가 필요하다.


예를 들어 보겠다.



변수 a,b,c 존재


int a = 10; // 0x10 번지 할당

int b = 20; // 0x20 번지 할당

int c = 0; // 0x30 번지 할당

c = a + b; 


이를 명령어로 바꾸어보면 ADD c a b 가 된다.


하지만 저장소는 레지스터 정보가 와야하는데, a, b, c는 메모리의 주소값이므로 불가능 하다.


일단 a b를 레지스터에 옮겨와서 연산하여 값을 레지스터에 저장하고 그 값을 c에 옮겨주어야 한다.


메인메모리에서 레지스터에 옮겨오는 것이 LOAD 반대가 STORE


EX> STORE r1 0x20












Comments