벌써 5일차라니!!
명령어의 구조
어제 명령어는 기계어와 어셈블리어 형태의 저급언어가 있다고 공부했다.
명령어는 아래 그림처럼 ‘무엇을 대상으로, 어떤 작동을 수행하라’ 라는 구조로 되어 있다.

여기서 ‘더하라’는 명령어가 수행할 연산을 뜻하는데, 이렇게 명령어가 수행할 연산을 연산 코드라고 하고, 연산자라고도 부른다.
‘10과’, ‘20을’ 처럼 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치를 오퍼랜드라고 하고, 피연산자라고도 부른다.

위의 그림에서 분홍색으로 색칠된 연산코드가 담기는 영역은 연산 코드 필드라고 부르고,
색칠 되지 않은 오퍼랜드가 담기는 영역은 오퍼랜드 필드라고 부른다.
연산코드
연산코드는 명령어가 수행할 연산을 의미한다.
연산 코드 유형은 크게 4가지로 나눌 수 있는데, 명령어의 종류와 생김새는 CPU마다 다르기 때문에 연산코드의 종류와 생김새 또한 CPU마다 다르다.
1. 데이터 전송
- MOVE : 데이터를 옮겨라
- STORE : 메모리에 저장하라
- LOAD(FETCH) : 메모리에서 CPU로 데이터를 가져오ㅘ라
- PUSH : 스택에 데이터를 저장하라
- POP : 스택의 최상단 데이터를 가져와라
2. 산술/논리 연산
- ADD / SUBTRACT / MULTIPLY / DIVIDE : 덧셈 / 뺄셈 / 곱셈 / 나눗셈을 수행하라
- INCREMENT / DECREMENT : 오퍼랜드에 1을 더하라 / 오퍼랜드에 1을 빼라
- AND / OR /NOT : AND / OR / NOT 연산을 수행하라
- COMARE : 두 개의 숫자 또는 TRUE / FALSE 값을 비교하라
3. 제어 흐름 변경
- JUMP : 특정 주소로 실행 순서를 옮겨라
- CONDITIONAL JUMP : 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
- HALT : 프로그램의 실행을 멈춰라
- CALL : 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라
- RETURN : CALL을 호출할 때 저장했던 주소로 돌아가라
4. 입출력 제어
- READ(INPUT) : 특정 입출력 장치로부터 데이터를 읽어라
- WRITE(OUTPUT) : 특정 입출력 장치로 데이터를 써라
- START IO : 입출력 장치를 시작하라
- TEST IO : 입출력 장치의 상태를 확인하라
오퍼랜드
오퍼랜드는 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치를 의미한다.
오퍼랜드 필드에는 숫자나 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 올 수 있지만,
숫자나 문자와 같은 연산에 사용할 데이터를 직접 명시하기보다는 연산에 사용할 데이터가 저장된 위치인 메모리 주소나 레지스터 이름이 담긴다.
그래서 오퍼랜드 필드를 주소필드라고 부르기도 한다.
오퍼랜드는 명령어 안에 하나도 없을 수도 있고, 한 개만 있을 수도 있고, 두 개 또는 세 개 등 여러개가 있을 수도 있고, 그에 따라 부르는 이름이 다르다.

주소지정방식
오퍼랜드 필드에 메모리나 레지스터의 주소를 담는 이유는 명령어 길이 때문이다.
하나의 명령어는 n비트로 되어 있고, 그중 연산 코드 필드가 m비트로 되어 있다면,
오퍼랜드 필드에 가장 많은 공간을 할당할 수 있는 1-주소 명령어라 할지라도 오퍼랜드 필드의 길이는 n-m비트가 된다.
2-주소 명령어나 3-주소 명령어라면, 오퍼랜드 필드의 크기는 점점 줄어들어 오퍼랜드 필드에 담을 수 있는 데이터의 크기 또한 줄어들게 된다.
하지만 오퍼랜드 필드 안에 메모리 주소가 담긴다면 표현할 수 있는 데이터의 크기는 하나의 메모리 주소에 저장할 수 있는 공간만큼 커지게 된다.
연산 코드에 사용할 데이터 즉 연산의 대상이 되는 데이터가 저장된 위치를 유효주소라고 하고,
오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법을 주소 지정 방식이라고 한다.
(주소 지정 방식은 유효 주소를 찾는 방법이다.)
대표적인 주소 지정방식에는 5가지가 있다.
1. 즉시 주소 지정 방식
연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식이다.
표현할 수 있는 데이터가 작아지는 단점이 있지만, 연산에 사용할 데이터를 메모리나 레지스터로부터 찾는 과정이 없기 때문에 속도가 빠르다.
2. 직접 주소 지정 방식
오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식이다.
오퍼랜드 필드에서 표현할 수 있는 데이터의 크기는 즉시 주소 지정 방식보다 커졌지만,
유효 주소를 표현할 수 있는 범위는 연산 코드의 길이만큼 짧아져 표현할 수 있는 유효 주소에 제한이 생길 수 있다.
3. 간접 주소 지정 방식
유효 주소의 주소를 오퍼랜드 필드에 명시하는 방식이다.
직접 주소 지정 방식보다 표현할 수 있는 유효 주소의 범위가 넓어지지만 두 번의 메모리 접근이 필요하기 때문에 일방적으로 느린 방식이다.
4. 레지스터 주소 지정 방식
연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방법이다.
일반적으로 CPU 외부에 있는 메모리에 접근하는 것보다 CPU 내부에 있는 레지스터에 접근하는 것이 더 빠르기 때문에 데이터에 빠르게 접근할 수 있지만,
표현할 수 있는 레지스터 크기에 제한이 생길 수 있다.
5. 레지스터 간접 주소 지정 방식
연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법이다.
메모리에 접근하는 횟수가 한 번으로 줄어든다는 장점이 있고, 간접 주소 지정 방식보다 빠르다.
'컴퓨터구조 & 운영체제' 카테고리의 다른 글
20250103 컴퓨터구조 + 운영체제 7일차 (0) | 2025.01.03 |
---|---|
20250101 컴퓨터구조 + 운영체제 6일차 (0) | 2025.01.01 |
20241230 컴퓨터구조 + 운영체제 4일차 (3) | 2024.12.30 |
20241229 컴퓨터구조 + 운영체제 3일차 (0) | 2024.12.29 |
20241218 컴퓨터 구조 + 운영체제 2일차 (3) | 2024.12.18 |