명령어 처리
- CPU는 메모리에서 처리할 Instruction을 가져옵니다. (Fetch)
- 해당 명령어를 CPU가 해석합니다. CPU가 해석하기 위해서는 정해진 Format에 맞춘 형식여야 합니다. (Decode)
명령어는 고정된 형식으로 구성됩니다.
오퍼코드(Opcode): 어떤 연산을 수행할지를 나타냅니다. 예를 들어, 더하기, 빼기, 곱하기 등의 연산이 이 오퍼코드로 표현됩니다.
오퍼랜드(Operand): 연산에 필요한 데이터나 그 데이터의 주소입니다. 예를 들어, 덧셈 연산을 수행할 두 숫자, 혹은 그 숫자가 저장된 메모리 주소입니다.
종류
- Arithmetic 연산 (ADD, SUB, SHIFT...) - R-format, I-format (상수 포함)
- Data Transfer 연산 (LDUR, STUR...) D-format
- Branch 연산 B-format
- Opcode (11bits): 명령어가 수행해야 할 작업을 정의
- Rd (5bits): 결과를 저장할 목적지 레지스터
- Shamt (6bits): 시프트 연산을 할 때 데이터가 얼마나 왼쪽 또는 오른쪽으로 시프트되어야 하는지를 정의
- Rn(5bits): 첫 번째 소스 레지스터 (더할 값 1)
- Rm(5bits): 두 번째 소스 레지스터 (더할 값 2)
- Opcode (10bits): 명령어가 수행해야 할 작업을 정의
- immediate (12bits): 명령어 내에 포함된 상수 값, 레지스터나 메모리 주소를 참조하지 않고 즉시 수행 (메모리 참조 비용 최소화)
- Rn (5bits): 첫 번째 소스 레지스터
- Rd (5ibts): 결과를 저장할 목적지 레지스터
- Opcode (11bits): 명령어가 수행해야 할 작업을 정의
- Address (9bits): 메모리에서 데이터를 읽거나 쓸 때 사용하는 메모리 위치 (offset)
- Op2 (2bits): Op2는 즉시 값, 레지스터 값, 시프트된 레지스터 값 등을 포함할 수 있다.
- Rn (5bits): 첫 번째 소스 레지스터
- Rt (5bits): 결과를 저장할 목적지 레지스터
예시
A[30] = h + A[30] + 1;
X10: base A, X21: h
compiled into:
LDUR X9, [X10, #240]
ADD X9, X9, X21
ADD X9, X9, #1
STUR X9, [X10, #240]
to instruction format
(LDUR-D-format) 1986(10), 240, 0, 10, 9
11111000010, 011110000, 00, 00110, 00101 (2)
=> 1111100010011110000000011000101(2)