명령어도 컴퓨터 내부에서는 높고 낮은 전기 신호의 연속으로 저장되므로 숫자로 표현할 수 있다.
RISC-V의 명령어의 길이는 워드 길이인 32비트이다. 모든 RISC-V 명령어는 예외 없이 32비트이다.
명령어를 숫자로 나타내어 보자.
add x9, x20, x21
0000000 | 10101 | 10100 | 000 | 01001 | 0110011 |
이렇게 명령어를 이진수의 필드로 구성하는 표현 형식을 명령어 형식(instruction format)이라고 하고, 이렇게 명령어를 숫자로 표현하는 것을 기계어(machine language)라고 한다. 이런 명령어들의 sequence를 machine code라고 한다.
instruction format에 대해 더 알아보자.
1. RISC-V 명령어의 필드
RISC-V 명령어의 각 필드에는 명칭이 붙어 있다.
funct7 (7 bits) | rs2 (5 bits) | rs1 (5 bits) | funct3 (3 bits) | rd (5 bits) | opcode (7 bits) |
- opcode: 명령어가 실행할 연산의 종류. 연산자.
- rd: 목적지 레지스터. 연산 결과가 기억된다.
- funct3: 추가 opcode field
- rs1: 첫 번째 register source operand
- rs2: 두 번째 register source operand
- funct7: 추가 opcode field
산술 연산자에서는 위와 같은 instruction format이 잘 적용되지만, lw나 addi와 같은 명령어에서는 이를 사용하기에 한계가 있다. RISC-V에서는 모든 명령어의 길이를 같게 하되, 명령어 종류에 따라 형식을 다르게 한다. 예를 들어 위의 instruction format은 R-type이다. 이 형식에 대해 더 자세히 살펴보자.
1) R-type
funct7 (7 bits) | rs2 (5 bits) | rs1 (5 bits) | funct3 (3 bits) | rd (5 bits) | opcode (7 bits) |
2) I-type
상수 피연산자 하나를 갖는 산술 연산 명령어나 적재 명령어에 사용된다.
immediate (12 bits) | rs1 (5 bits) | funct3 (3 bits) | rd (5 bits) | opcode (7 bits) |
3) S-type
2개의 source register와 주소 offset을 위한 immediate field가 필요한 저장 명령어(sw)를 위해서 사용된다.
immediate[11:5] (7 bits) | rs2 (5 bits) | rs1 (5 bits) | funct3 (3 bits) | immediate[4:0] (5 bits) | opcode (7 bits) |
12비트의 immediate는 하위 5비트, 상위 7비트로 나누어지는데, 이는 모든 명령어 형식에서 rs1, rs2 필드의 위치를 같게 하기 위해서이다.
2. RISC-V 어셈블리 언어를 기계어로 번역
프로그래머가 작성하는 것부터 컴퓨터가 실행하는 것까지 모든 과정을 다뤄보자.
먼저 다음 C 문장을 살펴보자.
A[30] = h + A[30] + 1;
이 C 문장은 아래와 같이 컴파일 된다.
lw x9, 120(x10)
add x9, x21, x9
addi x9, x9, 1
sw x9, 120(x10)
이 네 명령어에 해당하는 RISC-V machine language를 살펴보자. 편의를 위해 기계어 명령어를 십진수로 표현해보자.
rs1이 같은 위치에서 나타나는 것을 확인할 수 있다.
이진수로 표현해 기계어를 확인해보자.
명령어의 각 요소가 field와 어떻게 매칭되는지 확인해보자.
추가적으로, addi의 경우 immediate 값 120을 2^5로 나눠 상위 7 비트와 하위 5 비트로 분리할 수 있다. 상위 7비트에는 몫 3이 들어가고, 하위 부분에는 나머지 24가 들어간다.
'Computer > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] Arithmetic for Computers(1): 덧셈과 뺄셈 (0) | 2024.05.29 |
---|---|
[컴퓨터구조] Instructions, RISC-V(5): 프로시저(Procedure) (0) | 2024.05.29 |
[컴퓨터구조] Instructions, RISC-V(4): 논리 연산 명령어, 조건부 분기 (0) | 2024.05.29 |
[컴퓨터구조] Instructions, RISC-V(1): 산술, 적재, 저장 명령어 (0) | 2024.05.29 |