[RISC-V] Operand (피연산자)

2024. 11. 15. 00:39

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 뒤에 번호를 붙여 표기하는 것이 관례이다.

RISC-V calling convention register usage

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

 

본 정리는 컴퓨터 구조 및 설계 RISC-V (2판)을 중심으로 다양한 자료를 참고하여 작성되었습니다.
일부 내용에 오류가 있을 수 있습니다.

 

'Computer Architecture > ISA' 카테고리의 다른 글

[RISC-V] Instruction (명령어)  (0) 2024.11.16
ISA 이해하기: RISC-V를 중심으로  (0) 2024.11.14