명령어 형식에서 주소필드수, 즉 몇주소 형식인가는 컴퓨터의 레지스터 구성에따라 다르다. 컴퓨터의 cpu구조는 '단일누산기구조', '범용레지스터구조', '스택구조' 중 하나이다.
명령어 형식
1) 0 - 주소 명령형식
동작코드 |
동작코드만 존재하고 주소가 없는 형식이다. 이 형식은 스택을 이용하게 된다. 데이터를 기억시킬때 PUSH나 껴낼때 POP을사용한다. (PUSH,POP명령어는 스택에만 존재)
동작방식은 바이너리 연산의 경우 스택의 상단부 데이터 두개로 이루어지며, 연산 수 결과는 top이 지정하는 곳의 하단에 기억된다. 스택 구조 컴퓨터에서 수식을 계산하려면 우선 수식을 역polish표현으로 변환해야 한다.
ex) 계산기
2) 1 - 주소 명령형식
동작코드 |
주소 |
연산대상이 되는 두개중 하나면 표현하고 나머지하나는 누산기(AC)를 사용하는 것이다.
동작방식은 주기억장치 내의 데이터(주소에서 표현한 번지에 잇는 데이터)와 AC 내의 데이터로 연산이 이루어지며 , 연산결과는 AC에 저장된다.
ex) PDP계열
3) 2 - 주소 명령형식
동작코드 |
주소1 |
주소2 |
연산대상이 되는 두개의 주소를 표현하고 연산결과를 그중 한곳에 저장한다. 동작특성상 한 곳의 내용이 연산결과 저장으로 소멸된다.
연산결과를 기억시킬 곳의 주소를 인스트럭션 내에 표시할 필요가 없다. 또한 주소1과 중양처리내의 AC에 동시에 기억시키도록 할 수 도 있으며 이렇게 하면 계산결과를 시험할 필요가 있을때 중앙처리 장치 내에서 직접 시험이 기능하므로 시간을 절약할 수 있다.
ex) pc용, smartphone
4) 3 - 주소 명령형식
동작코드 |
주소1 |
주소2 |
주소3 (결과) |
연산 대상이 두개의 주소와 연산결과를 저장하기 위한 결과주소를 표현한다.
여러개의범용 레지스터를 가진 컴퓨터에서 사용할 수 있는 형식이다. 하나의 인트트럭션을 수행하기 위해서 최소한 4 번 기억장치에 접근하여야 하므로 수행기간이 길어서 특수목적 이외에는 잘 사용하지 않는다. 연산 후에 입력자료가변하지 않고 보존된다.
ex) 서버용
예
X = ( A+B )*( C+D )
0 주소 명령 | 1 주소 명령 | |||
PUSH A PUSH B ADD PUSH C PUSH D ADD MUL POP X | TOS ← A TOS ← B TOS ← (A+B) TOS ← C TOS ← D TOS ← (C+D) TOS ←(C+D)*(A+B) M[X] ← TOS TOS(Top of Stack) | LOAD A ADD B STORE T LOAD C ADD D MUL T STORE X | AC ← M[A] AC ←AC + M[B] M[T] ← AC AC ← M[C] AC ← AC + M[D] AC ← AC * M[T] M[X] ← AC |
2 주소 명령 | 3 주소 명령 |
||
MOV R1, A ADD R1, B MOV R2, C ADD R2, D MUL R1, R2 MOV X, R1 | R1 ← M[A] R1 ← R1+B R2 ← M[C] R2 ← R2+D R1 ← R1*R2 M[X] ← R1 | ADD R1, A, B ADD R2, C, D MUL X, R2, R2 | R1 ← A + B R2 ← C + D X ← R2 * R2 |
Z = (B+C)*A
0번지 명령 |
1번지 명령 |
2번지 명령 |
3번지 명령 |
PUSH B
PUSH C
ADD
PUSH A
MUL
POP Z |
LOAD B
ADD C
MUL A
STORE Z |
MOV R1, B
ADD R2, C
MUL R1, A
MOV Z, R1 |
ADD R1, C, Z
MUL Z, A, R1 |
4번지나 5번지 명령은 없다. 명령어를 보면 어셈블리 언어로 되어잇는 것을 확인할 수 있는데 그 다음부터는 컴푸일러가 너무 발달이 잘되어서 어셈블리를 쓸 필요가 없어졋다. 저급언어라고 불리우는 어셈블리언어는 요즘에 거의 쓰기지 않고 C기반언어JAVA같은 고급언어를 많이 쓰기때문에 3번지 이후 더 만들필요가 사리진 것이다.
그렇지 않더라도 사실 명령어를 표한하기위한 충분조건은 3개이고 필요조건은 2개이다. 0-2주소도 알고보면 3가지(2개의 목적어)를 표현한 것이다.
CPU 구조
1) 단일누산기 구조 (1주소)
ㅋ모든 명령은 누산기에서 실행되며 이 형식의 명령은 ADD X 와ㅏ 같이 주소필드가 하나 필요하다.
이 가산명령은 AC<- AC+M[X]를 실행한다. ( M[X] : 주소X에 잇는 기억장치내용 )
2) 범용 레지스터 구조 (2,3주소)
명령 형식은 3개의 주소필드가 필요하다 이경우 가산명령은 ADD.
....
.
3) 스택구조 (0주소)
push와 pop명령은 주소필드가 한 필요하나 연산 명령은 스택의 top에 잇는 두값으루 연산에 사용하므로 주소 필드없이 동작코드만으로 표현한다.
㉠ 스택
㉡ 스택의 구성
㉢ push 및 pop 동작
㉣ 스택의 응용
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
6. 명령 사이클 (0) | 2012.10.20 |
---|---|
5. 주소지정 방식(Adressing mode) (0) | 2012.10.15 |
3. 명령어의 종류 (0) | 2012.10.13 |
2. 명령어의 구조 (0) | 2012.10.13 |
1. 중앙처리장치(Centural Processing Unit : CPU) (0) | 2012.10.13 |