명령어의 구조
명령어는 크게 연산 코드와 오퍼랜드로 구성되어 있음
- 연산 코드 (Operation Code): 명령어가 수행할 연산 (더해라~ 빼라~)
- 오퍼랜드 (Operand): 연산에 사용할 데이터 혹은 그 데이터가 저장된 위치
연산 코드
명령어가 수행할 연산으로 아래 유형의 것들을 수행
- 데이터 전송
- MOVE : 데이터를 옮겨라
- STORE : 메모리에 저장하라
- LOAD(FETCH) : 메모리에서 CPU로 데이터를 가져와라
- PUSH : 스택에 데이터를 저장하라
- POP : 스택의 최상단 데이터를 가져와라
- 산술/논리 연산
- ADD/SUBTRACT/MULTIPLY/DIVIDE : 덧셈/뺄셈/곱셈/나눗셈
- INCREMENT/DECREMENT : 오퍼랜드에 1을 더하라/빼라
- AND/OR/NOT : 논리 연산을 수행하라
- COMPARE: 두 개의 숫자 또는 TRUE/FALSE 값을 비교하라
- 제어 흐름 변경
- JUMP : 특정 주소로 실행순서를 옮겨라
- CONDITIONAL JUMP : 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
- HALT : 프로그램의 실행을 멈춰라
- CALL : 되돌아올 주소를 저장할 채 특정 주소로 실행 순서를 옮겨라
- RETURN : CALL을 호출할 때 저장했떤 주소로 돌아가라
- 입출력 제어
- READ(INPUT) : 특정 입출력 장치로부터 데이터를 읽어라
- WRTIE(OUTPUT) : 특정 입출력 장치로부터 데이터를 써라
- START IO : 입출력 장치를 시작하라
- TEST IO : 입출력 장치의 상태를 확인하라
오퍼랜드
연산에 사용할 데이터 혹은 그 데이터가 저장된 위치를 나타냄. 저장된 위치는 보통 메모리 혹은 레지스터 주소가 올라오게 됨.
오퍼랜드 필드에 데이터를 직접 담기에는 공간이 부족하기 때문에 보통 메모리나 레지스터 주소가 온다.
오퍼랜드에는 명령어 안에 없을 수도, 1개~3개가 있을 수도 있다. 오퍼랜드의 수에 따라 '0-주소 명령어 형식', '1-주소 명령어 형식', '2-주소 명령어 형식', '3-주소 명령어 형식'으로 부른다
주소 지정 방식
오퍼랜드 필드에 데이터가 저장된 위치를 명시 할 때 연산에 사용할 데이터 위치를 찾는 방법을 '주소 지정 방식(addressing model)'이라고 함. 즉, 피연산의 대상인 데이터의 주소인 '유효 주소(effective address)'를 찾는 방식을 주소 지정 방식이라 함.
현대 CPU는 아래 다섯 가지 방식의 주소 지정 방식을 대표적으로 이용
- 즉시 주소 지정 방식 (Immediate addressing mode)
- 연산에 사용할 데이터를 오퍼랜드 필드에 직접적으로 올리는 방식. 별도의 데이터 찾는 과정이 없기 때문에 빠르지만, 명령어에 올릴 수 있는 데이터 수가 한정적이라는 단점이 존재.
- 직접 주소 지정 방식 (Direct addressing mode)
- 직접적인 데이터가 아닌 데이터가 저장된 유효 주소를 명시하는 방식. 즉시 주소 지정 방식보다는 더 많은 데이터에 대한 연산을 담을 수 있음
- 간접 주소 지정 방식 (Indirect addressing mode)
- 유효 주소의 주소를 오퍼랜드 필드에 적는 방식. 직접 주소 지정보다 더 폭넓게 유효 주소를 표현할 수 있지만, 데이터를 찾는 과정이 한 번 더 늘어나 느리다는 단점이 존재
- 레지스터 주소 지정 방식 (Register addressing mode)
- 직접 주소 지정 방식과 유사하지만 데이터의 저장 위치가 메모리가 아닌 레지스터라는 점에서 다름. 일반적으로 CPU 외부에 있는 메모리에 접근하는 것보다, CPU 내부에 있는 레지스터에 접근하는 것이 더 빠르므로, 이 방식이 직접 주소 지정 방식보다 더 빠름.
- 레지스터 간접 주소 지정 방식 (Register indirect addressing mode)
- 오퍼랜드 필드에 유효 주소를 저장한 레지스터를 올리는 방식. 따라서 연산에 필요한 데이터를 찾는 과정은 CPU가 레지스터에서 유효 주소를 찾고 -> 그 유효 주소에 가서 데이터를 찾는 과정이 됨. 간접 주소 지정 방식과 비슷하지만 메모리에 접근하는 횟수가 1회 더 적으므로 더 빠르다는 장점 존재
'CS' 카테고리의 다른 글
[혼공컴운] 명령어 사이클과 인터럽트 (0) | 2023.03.31 |
---|---|
[혼공컴운] 프로세스 개요 (0) | 2023.03.30 |
[혼공컴운] 레지스터 (0) | 2023.03.28 |
[혼공컴운] 운영체제 시작하기 (0) | 2023.03.16 |
[혼공컴운] ALU와 제어장치 (0) | 2023.03.15 |