해당 블로그 포스트의 내용은 [한빛미디어]의 '혼자 공부하는 컴퓨터 구조와 운영체제' 책의 저자이신 강민철님께서 강의하신 내용을 위주로 정리했습니다.
https://youtube.com/playlist?list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&si=H1U9OoqlmQ8ZiZai
1. Insturction의 구조
Instruction의 구조
- Opcode: 연산 코드, 수행할 연산
- Operand: 연산에 사용될 데이터 or 연산에 사용될 데이터가 저장된 위치
1.1) Operand
연산에 사용될 데이터 혹은 연산에 사용될 데이터가 저장된 위치
일반적으로는 연산에 사용될 데이터가 저장된 위치를 더 많이 저장한다.
이러한 점에서 operand가 담기는 공간을 주소 필드라고 한다.
각 Instruction마다 Operand는 없을 수도 있고, 하나 이상일 수도 있다.
1.2) Opcode
수행할 연산
CPU마다 가지고 있는 Opcode는 다 다르다.
다만 대부분의 CPU가 공통으로 가지고 있는 Opcode는 다음과 같다.
1) 데이터 전송
2) 산술 / 논리 연산
3) 제어 흐름
4) 입출력 제어
1) 데이터 전송의 대표적인 Opcode는 다음과 같다.
Stack은 한쪽 끝이 막혀있는 듯한 저장공간, 자료를 저장하는 구조(자료구조) 이다.
Stack은 아래와 같이 생겼기에, 이를 LIFO (Last in, First out) 구조라고도 한다.
Queue는 양쪽 끝이 뚫려있는 듯한 통과 같은 자료구조를 뜻한다.
먼저 들어간 값이 먼저 나오기에, 이를 FIFO (First in, First out) 구조라고도 한다.
2) 산술/논리 연산의 대표적인 Opcode는 다음과 같다.
3) 제어/흐름 변경의 대표적인 Opcode는 다음과 같다.
특정 메모리 주소로 실행의 순서를 Jump 해서 옮기는 유형의 연산이다.
2. 명령어 주소 지정 방식
이전에 Operand에서는 연산에 사용될 데이터 or 연산에 사용될 데이터가 저장된 위치라고 했다.
그리고 둘 중 연산에 사용될 데이터가 저장된 위치가 더 많이 Operand 로서 사용되기에 이를 주소 필드라고도 부른다.
그렇다면 왜 굳이 연산에 사용하는 데이터 자체보다 연산에 사용하는 데이터가 저장된 위치를 더 많이 사용하는 걸까?
Instruction 내에서 표현할 수 있는 데이터의 크기가 제한되어 있기에 연산에 사용되는 데이터 자체를 Operand
다음과 같이 Opcode가 4bit이고 Operand가 점점 더 많아질수록 표현할 수 있는 데이터의 크기는 더 줄어든다.
표현할 수 있는 정보의 크기가 제한받지 않도록 하기 위해
Operand Field에 연산에 사용될 데이터의 위치(메모리 주소, Register)를 명시한다.
유효 주소(effective address)는 연산에 사용될 데이터가 저장된 위치라 한다.
명령어 주소 지정 방식 (addressing modes)은 연산에 사용될 데이터가 저장된 위치를 찾는 방법이다.
즉, Addressing Mode는 유효 주소를 찾는 방법이고
다양한 명령어 주소 지정 방식이 존재한다.
2.1) Immediate Addressing Mode (즉시 주소 지정 방식)
Immediate Addressing Mode는 연산에 사용할 데이터를 Operand Field에 직접 명시하는 방식이다.
2.2) Direct Addressing Mode (직접 주소 지정 방식)
Direct Addressing Mode는 Operand Field에 유효 주소를 직접적으로 명시한다.
2.3) Indirect Addressing Mode (간접 주소 지정 방식)
Indirect Addressing Mode는 Operand Field에 유효 주소의 주소를 명시한다.
CPU가 Memory를 뒤적거리는 시간은 굉장히 속도가 느리다.
따라서 Memory 접근을 최소화시키는 것이 무조건 속도가 빠르다.
2.4) Register Addressing Mode (레지스터 주소 지정 방식)
Register Addressing Mode는 연산에 사용될 데이터가 저장된 Register를 명시한다.
CPU가 Memory에 접근하는 속도보다 Register에 접근하는 속도가 훨씬 빠르다.
2.5) Register Indirect Addressing Mode (레지스터 간접 주소 지정 방식)
Register Indirect Addressing Mode는 연산에 사용될 데이터를 메모리에 저장한다.
그리고 해당 주소를 저장한 Register를 Operand Field에 명시한다.