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 | 1 | 0 |
destination : 데이터를 저장할 레지스터 정보 LOAD r1, 0x20
source : 데이터를 읽어올 메모리의 주소 정보
STORE 명령어
<-예약-> | <- STORE -> | <destination> | <- source -> | ||||||||||||
1 | 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 명령어로 연산을 하면 사칙연산에서의 피연사자 문제를 해결 할 수있다.
'강좌 정리 > 뇌를자극하는윈도우즈시스템프로그래밍' 카테고리의 다른 글
05장. 프로세스의 생성과 소멸 ① 프로세스와 스케줄러의 이해 (0) | 2012.07.03 |
---|---|
04.장 컴퓨터 구조에 대한 두번째 이야기 ③ Direct 모드와 Indirect 모드 (0) | 2012.07.02 |
04.장 컴퓨터 구조에 대한 두번째 이야기 ① 컴퓨터 구조의 접근방법 (0) | 2012.06.29 |
03장. 64비트 기반 프로그래밍 ② 프로그램 구현 관점에서의 WIN32 vs WIN64, 오류의 확인 (0) | 2012.06.28 |
03장. 64비트 기반 프로그래밍 ① WIN32 vs WIN64 (0) | 2012.06.28 |