![](https://velog.velcdn.com/images/sieunpark/post/59f83a4d-2996-4ebf-84a0-f569caf1f8d3/image.png)
이전 포스팅 컴퓨터의 기본 구조에서 CPU가 어떻게 구성되어있는지 먼저 보고오자!
▶ 명령어의 형식
CPU는 명령어를 받아 처리한다.
그렇다면, 명령어는 어느 형식으로 이루어져 있을까?
▷ 구성
- 명령어는 오퍼레이션(연산 코드)과 오퍼랜드(피연산자)로 구성되어 있다.
![](https://velog.velcdn.com/images/sieunpark/post/84144671-89dc-4740-8b9d-970c835e8a6d/image.png)
- 오퍼레이션(Operation code)
- 연산자를 담당
- 동사에 해당(더해라, 곱해라, 나눠라, 저장해라)
- 오퍼랜드(operand)
- 피연산자를 담당
- 목적어에 해당 (
더해라 무엇을)
- '연산에 사용할 데이터'(숫자나 문자) 또는 '연산에 사용할 데이터가 저장된 위치'(메모리 주소나 레지스터 이름) 이다.
- 오퍼랜드 필드는 '연산에 사용할 데이터가 저장된 위치' 가 훨씬 많이 쓰이므로 주소 필드라고 하기도 한다.
![](https://velog.velcdn.com/images/sieunpark/post/8bd354ae-f9ba-429b-8f12-a4fe1875605c/image.png)
- 오퍼랜드는 명령어 안에 하나도 없을 수도 있고, 한 개만 있을 수도 있고, 한 개 이상일 수도 있다.
![](https://velog.velcdn.com/images/sieunpark/post/06f0e767-d228-45a4-8bb7-daf5af800299/image.png)
▷ 주소에 따른 명령어 방식
- 명령어 형식은 오퍼랜드 수에 따라 3, 2, 1, 0 주소 방식으로 구분한다.
- 오퍼랜드가 하나도 없는 명령어를 0-주소 명령어, 오퍼랜드가 하나인 명령어를 1-주소 명령어, 두 개인 명령어를 2-주소 명령어, 세 개인 명령어를 3-주소 명령어라고 부른다.
![](https://velog.velcdn.com/images/sieunpark/post/ef667bc1-d201-4bd7-bda1-8272c5e343e8/image.png)
① 0-주소 명령어
- 정의
- 연산코드부(오퍼레이션)만 존재하고 주소를 지정하는 오퍼랜드가 존재하지 않는 명령어
- 특징
- 스택과 관련된 자료를 처리할 때 사용하며, Stack 메모리의 TOP(Stack 포인터)이 가리키는 Operand를 이용하여 명령을 수행한다.
- 스택을 사용하여 모든 연산을 수행하기 때문에 수행 후에는 원래의 자료가 모두 지워진다!
- 피연산자들을 먼저 PUSH 해주고, 연산자를 만나면 피연산자를 POP한 후에 연산 결과를 PUSH한다.
- Postfix 방식으로 수식을 표현한다.
- 다른 주소 명령어들과 달리 STOR 명령어를 사용하지 않는다. (PUSH/POP 사용)
![](https://velog.velcdn.com/images/sieunpark/post/ae508c71-298d-466f-991b-93874c7fce53/image.png)
② 1-주소 명령어
- 정의
- 특징
- 누산기(AC)를 이용하여 처리하며 연산 결과도 AC에 저장한다.
- 1주소 명령어는 피연산자 하나로 연산을 수행하는 것이 가능하다!
- AC를 1개만 갖고 있는 컴퓨터에서는 데이터가 AC에 있음을 나타낼 필요가 없고, 연산 결과를 항상 AC에 기억하도록 하면 연산의 주소를 지정할 필요가 없어 하나의 입력 자료의 주소를 생략할 수 있는 것이다.
- 따라서 1-주소 명령어를 쓰는 시스템에서 연산의 중심이 되는 레지스터가 되는 것이다!
![](https://velog.velcdn.com/images/sieunpark/post/8020e451-2c7e-4ed2-a024-921cae3834fa/image.png)
- 예시
- 메모리 X번지의 내용과 AC의 내용을 더하고, 그 결과를 다시 AC에 저장해라
![](https://velog.velcdn.com/images/sieunpark/post/5f40dcb0-f826-407f-89e0-2ae9876b73de/image.png)
- X번지의 데이터를 누산기에 저장해라
![](https://velog.velcdn.com/images/sieunpark/post/6335fd6f-c48b-412d-965f-b1f579b407cb/image.png)
③ 2-주소 명령어
- 정의
- 특징
- 가장 일반적인 명령어 방식
- 연산코드, R1, R2가 될 수도 있고, 연산코드 R1, X(기억장치 주소)가 될 수도 있다.
![](https://velog.velcdn.com/images/sieunpark/post/52c9f5bf-e345-41ab-8cc2-d3351d2ca898/image.jpg)
- 장점
- 실행 속도가 빠르고 기억 장소 효율이 좋다.
- 수행 결과를 기억장치에 저장하고 중앙처리장치에도 남아 있어서 결과를 테스트할 때 시간을 절약할 수 있다.
- 단점
- 전체 프로그램 길이가 길어진다.
- 연산 결과를 한쪽에 저장해야 해서 input 받은 값 중에 한쪽의 자료가 사라진다.
- 예시
- R1과 R2를 더하고 그 값을 R1에 저장해라
- R2에 있는 값을 R1으로 이동시켜라
- 메모리 X번지에 있는 값을 가져와 R1이랑 더한다음 그 값을 R1에 저장해라
![](https://velog.velcdn.com/images/sieunpark/post/f0b0ede1-a1d0-472e-9cdf-e49015dbdff6/image.png)
- Y번지의 기억장치 데이터를 X번지의 기억장치로 이동시켜라 (X, Y는 주소를 나타냄)
![](https://velog.velcdn.com/images/sieunpark/post/67fdf5b1-95b3-46ea-b115-6286ec4d78bb/image.png)
④ 3-주소 명령어
- 정의
- 장점
- 수식 계산의 연산 후에도 입력 자료가 사라지지 않는다.
- 두 개의 피 연산자의 연산을 수행하고, 연산 결과 값을 나머지 한 개의 오퍼랜드에 저장할 수 있기 때문
- 프로그램 길이를 짧게 할 수 있다.
- 명령 인출을 위하여 주기억장치를 접근하는 횟수가 줄어든다.
- 한 개의 명령어로 여러 명령을 수행하므로 전체 명령어를 읽어오는 시간은 단축된다.
- 단점
- 명령어 한 개의 길이가 너무 길어진다.
- 하나의 명령을 수행하기 위해서 최소한 4번 기억장소에 접근해야 하므로 수행시간이 길어진다.
- 예시
- Y와 Z번지의 데이터를 더하여 X번지에 저장해라 (X,Y,Z는 각각 주소를 나타냄)
![](https://velog.velcdn.com/images/sieunpark/post/ebcd7105-26d1-474b-89d8-f70acea111c1/image.png)
▷ 학습 활동
4가지 주소 형식으로 다음과 같은 연산 프로그램을 구현해 보자 (❁´◡`❁)
- 명령어 리스트
![](https://velog.velcdn.com/images/sieunpark/post/c9193853-c3e8-4bed-8960-b900e29e0188/image.png)
- 학습 활동1
- 수식을 준 다음 1-주소 명령어로 써봐라, 2-주소 명령어로 써봐라, 3-주소 명령어로 써봐라 하는 문제 나올 가능성 존재
- 주소 형식 간의 세부적인 것을 주고 뜻을 써 보라는 문제 나올 가능성 존재
- 어떤 명령을 수행하는 건지 써 보라는 문제 나올 가능성 존재
![](https://velog.velcdn.com/images/sieunpark/post/8be5d7af-e0fc-4978-9e2b-e81fd30ffbf1/image.png)
- 학습활동 2 ( 출처 : https://jeongminhee99.tistory.com/56 )
![](https://velog.velcdn.com/images/sieunpark/post/3ff8654e-ae29-4682-990a-3fc6818cd069/image.png)
![](https://velog.velcdn.com/images/sieunpark/post/d5a62d0d-f8b2-4895-9c22-d37535b1fb4e/image.png)
![](https://velog.velcdn.com/images/sieunpark/post/3fadc1b5-028b-47d2-bd1e-456596cbfe84/image.png)
![](https://velog.velcdn.com/images/sieunpark/post/319bcfdf-ac78-44c6-b542-d15809f27f84/image.png)
![](https://velog.velcdn.com/images/sieunpark/post/0ca7dedd-3015-4d13-b05e-cf564a081cad/image.png)
📎참조