-
컴퓨터 과학에서 명령어의 구조는 기본적이고 필수적인 지식인 거 같습니다.
이번에 공부를 통해 간단하게 이 구조에 대하여 알아보려 합니다.
| 명령어의 기본 구조
명령어는 크게 연산 코드(op-code)와 오퍼랜드(operand) 두 부분으로 나뉩니다.
연산 코드는 덧셈, 뺄셈과 같은 산술 연산이나 데이터 전송 같은 데이터로 수행할 동작을 의미하고,
오퍼랜드는 이러한 연산의 대상이 되는 데이터를 말합니다. 이런 오퍼랜드는 피연산자라고 할 수도 있고,
이는 데이터가 직접 명시되기도 하고, 레지스터 이름, 메모리 주소 같은 대상의 위치가 명시되기도 합니다.
또한 같은 코드를 실행하는 명령어의 개수는 오퍼랜드의 개수에 따라서 달라질 수 있습니다.
| 연산 코드의 종류
연산 코드는 크게 데이터 전송, 산술 / 논리 연산, 제어 흐름 변경, 입출력 제어 등으로 구분할 수 있습니다.
종류는 cpu마다 다르지만 대표적으로 사용되는 연산 코드는 다음과 같습니다.
데이터 전송
- MOVE: 데이터를 옮기기 - STORE: 데이터 저장하기 - LOAD(FETCH): 메모리에서 가져오기 - PUSH: 스택 최상단에 데이터 저장하기 - POP: 스택 최상단의 데이터를 가져오기
산술 / 논리 연산
- AND/SUBTRACT/MULTIPLY/DIVIDE: 덧셈/뺄셈/곱셈/나눗셈 하기 - INCREMENT/DECREMENT: 1증가/감소 시키기 - AND/OR/NOT: AND/OR/NOT 연산을 수행하기 - COMPARE: 두 숫자 또는 TRUE/FALSE값 비교하기
제어 흐름 변경
- JUMP: 특정 주소로 실행 순서 옮기기 - CONDITIONALJUMP: 조건에 부합할 경우 특정 주소로 실행 순서 옮기기 - HALT: 프로그램 실행 멈추기 - CALL: 되돌아올 주소를 저장한 채 특정 주소로 실행 순서 옮기기 - RETURN: CALL 호출 시 지정했던 주소로 돌아가기 (함수 호출 반환 시 사용)
입출력 제어
- READ(INPUT): 특정 입출력 장치로부터 데이터 읽기 - WRITE(OUTPUT): 특정 입출력 장치로 데이터 쓰기 - START IO: 입출력 장치 시작하기 - TEST IO: 입출력 장치 상태 확인
| 주소 지정 방식
오퍼랜드의 위치(주소)를 지정하는 방식은 다양합니다. 이는 명령어의 길이가 한정되어 있기 때문에
효율적으로 데이터의 위치를 찾기 위한 방법입니다.주소 지정은 유효 주소를 찾는 방법이고, cpu마다 차이가 있습니다.
-> 유효주소: 연산 코드에 사용할 데이터가 저장된 위치
즉시 주소지정
- 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
- 가장 빠른 주소지정, 데이터 크기에 제한
직접 주소 지정
- 오퍼랜드 필드에 유효 주소(연산에 사용될 데이터가 저장된 메모리 주소) 명시
- 오퍼랜드 필드로 표현 가능한 메모리 주소 크기에 제한
간접 주소 지정
- 오퍼랜드 필드에 유효 주소의 주소 명시
- 유효 주소 크기에 제한은 없으나, 속도가 비교적 느림
레지스터 주소 지정
- 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시
레지스터 간접 주소 지정
- 연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시
- 메모리 접근은 한번
'얇게 공부한 CS' 카테고리의 다른 글
HTTP(HyperText Transfer Protocol) 이해하기 (0) 2024.02.26 REST API (0) 2024.02.25 쿠키(Cookie)와 세션(Session) (0) 2024.02.23 웹 브라우저의 동작 (0) 2024.02.21 [네트워크] OSI 7 계층 (0) 2024.02.02