LOAD & STORE 명령어 디자인


LOAD & STORE 명령어의 필요성


명령어의 제한

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

연산결과는 레지스터에 저장.

레지스터를 통해서 모든 연산을 진행 해야 한다.




사칙연산 명령어 구성

 <-예약->

 <-  연산자  ->

 <-  저장소  ->

<-    피연산자1    ->

<-     피연산자2   ->

                

                      ADD                  r2                        r1                            7


저장소 : 레지스터

피연사자1,2:레지스터 or 숫자


챕터①에서 명령어의 구성을 살펴보면  연산결과를 레지스터에만 저장 할 수있도록 제한이 되었다. CPU로 오가는 데이터는 모두 레지스터를 통하기 때문에 일단 레지스터에 저장을 해야한다. 

그럼 메모리를 목표로 할때 레지스터로 통해 나간다 치고 

명령어에 메모리주소를 넣으면 좋지 않을까? 

복잡한 명령어의 CISK에서는 가능하지만 RISK에서는 성능향상을 위해 어쩔수없다.

 


문제


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

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

int c=0;  //0x3 0번지 할등


c=a+b;



그러면 !!

왼쪽과같이 메모리에 있는 연산자를 연산하려고한다. 하지만 연산자구성을 보면 피연산자는 레지스터 또는 숫자만 가능하도록 제한하였다.

그래서 메모리에 있는 값을 레지스터로 불러들이고 반대로 메모리에 연산결과를 저장하는 것을 위해

LOAD & STORE 명령어 가 필요한 것이다.








LOAD & STORE 명령어 디자인


LOAD 명령어


 <-예약->

 <-  LOAD  ->

 <destination>

<-                    source                   ->

  

 1

           

                                                                                          

destination : 데이터를 저장할 레지스터 정보        LOAD r1, 0x20

source : 데이터를 읽어올 메모리의 주소 정보



STORE 명령어


 <-예약->

 <-  STORE  ->

 <destination>

<-                    source                   ->

  

 1

1

           

 

source : 데이터를 읽어올 레지스터 정보             STORE r1, ox20

destination : 데이터를 저장할 메모리의 주소 정보


※명령어 2진코드 110, 111은 사칙연산에 겹치지않게 만든것이다.


문제해결

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

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

int c=0;  //0x3 0번지 할등

c=a+b;

LOAD r1 , 0x10

LOAD r2 , 0x20

ADD r3, r1, r2

STORE r3, 0x30

 r0

 메모리

 r1

←a    10                                           0x10

 r2

 

 r3        

↖b    20                                           0x20

 r4       ir

 

 r5      sp

 
 r6      lr   c    30                                           0x30
  r7     pc 

ㄴㅇㅁㄴㅇㅁㄴㅇㅁㄴㅇ


 c=a+b를 이러한 명령어 조합으로 만들어 볼수있다. 

메모리에 있는 값을 LOAD명령어로 불러들여온후 ADD 명령어로 연산을 하면 사칙연산에서의 피연사자 문제를 해결 할 수있다.




+ Recent posts