RISC-V의 Operands
RISC-V를 포함한 모든 RISC 아키텍처에서는 피연산자로 레지스터 및 즉시값(Immediate)만 사용할 수 있다.
(단, Data Transfer Operation에서는 데이터를 로드하거나 저장할 때에 한해 메모리도 피연산자로 사용할 수 있다.)
+ 반면, x86과 같은 CISC 아키텍처에서는 메모리 값을 피연산자로 바로 사용하는 것도 가능하다.
1. Register Operands
- 레지스터는 CPU가 데이터를 가장 빠르게 접근할 수 있는 저장소이다.
- RV32에서 레지스터 하나의 크기는 32비트이다. 이 32비트를 한 단위로 취급하며, word라고 부른다.
RV64에서 레지스터 하나의 크기는 64비트이다. 64비트 단위는 doubleword라고 한다. - RISC-V 아키텍처에는 32개의 레지스터(
x0
-x31
)가 포함되어 있다. 즉, 32비트 레지스터가 32개 있는 것이다. - RISC-V에서 각 레지스터는
x0
,x1
과 같이 x 뒤에 번호를 붙여 표기하는 것이 관례이다.
2. Immediate Operands
상수가 포함된 연산을 수행하려면, 메모리에서 상수가 저장된 위치에 접근해 값을 레지스터로 로드(load)한 뒤, 레지스터 간 연산을 수행해야 한다. 그러나 메모리에 접근하는 과정은 시간이 많이 소요되며, 이는 매우 비효율적인 방법이다
lw x9, AddrConstant4(x3) // 레지스터 x9에 상수 4를 load
add x22, x22, x9 // x22 = x22 + x9 (여기서 x9 = 4)
이를 해결하는 방법은, 상수 값 자체를 품고 있는 Instruction(I-type) 을 사용하는 것이다. 이 상수를 Immediate Operand라고 한다.
addi x22, x22, 4 // x22 = x22 + 4
+ 상수 중에서도 0은 자주 쓰이기에, RISC-V는 레지스터 x0
의 값이 0으로 고정되도록 하드웨어 회로를 구현하였다. (Hard-wired Zero)
3. Memory Operands
레지스터에는 소량의 데이터만을 저장할 수 있지만, 메모리에는 수십억 개의 데이터를 저장할 수 있다.
따라서 컴파일러는 가능한 한 데이터를 레지스터에 저장하지만, 넘치는 데이터는 메모리에 저장한다. (Spilling)
메모리 데이터에 접근하려면 아래와 같은 Data Transfer Instructions를 사용해야 한다.
ld x1, 0(x2) // 메모리 주소(x2 + 0)에서 데이터를 읽어 레지스터 x1에 저장
sd x1, 0(x2) // 레지스터 x1의 데이터를 메모리 주소(x2 + 0)에 저장
Operand 유형 별 Addressing Mode
1. Register addressing
2. Immediate addressing
3. Memory addressing (Base addressing)
Address: Mem[rs1 + imm]
imm 부분을 변위(offset)라 하고, rs1을 base register라고 한다.
메모리 데이터에 접근하려면 memory address를 지정해야 한다.
메모리는 주소가 Index 역할을 하는 큰 1차원 배열이다. Index는 0부터 시작한다.
memory address는 lw 명령어의 imm 부분과 두 번째 레지스터 값의 합으로 구해진다.
Example
lw x9, 32(x22) // Temporary reg x9 gets A[8]
메모리에 있는 배열 A[8]
에 접근하여 그 값을 x9에 저장하는 Load instruction이다.
- base register: x22에 저장되어 있는 A 배열의 시작 주소
- offset: 인덱스인 8을 구하기 위해 8*4=32.
(주소는 바이트 단위로 구분되는데, 배열의 한 원소의 크기는 word = 4바이트이므로 4를 곱한다.)
base register에 offset을 더한 값을 memory address로 한다.
Little Endian
두 종류가 있다.
- 가장 왼쪽, 즉 최상위(big end) 바이트 주소(MSB)를 워드 주소로 사용하는 컴퓨터
- 제일 오른쪽, 즉 최하위(little end) 바이트 주소(LSB)를 워드 주소로 사용하는 컴퓨터
RISC-V는 최하위 주소를 사용하는 리틀 엔디안(little-endian) 계열에 속한다.
Alignment restriction
메모리 내에서 데이터는 자연스러운 경계를 지켜서 정렬되어야 한다는 제약이다.
RISC-V와 Intel x86에는 Alignment Restriction이 없지만, MIPS에는 있다.
4. PC-relative addressing
Address: pc + imm
일부 내용에 오류가 있을 수 있습니다.
'Computer Architecture > ISA' 카테고리의 다른 글
[RISC-V] Instruction (명령어) (0) | 2024.11.16 |
---|---|
ISA 이해하기: RISC-V를 중심으로 (0) | 2024.11.14 |