관리 메뉴

juniverse

[RISC-V] RV32I 메모리접근 명령어 본문

컴퓨터구조 computer organization and design/RISC-V edition

[RISC-V] RV32I 메모리접근 명령어

iamjunis 2022. 7. 20. 23:26
반응형
SMALL

RISC-V에서 데이터처리 명령어는 source 레지스터를 읽어 연산을 하고, 그 결과를 destination 레지스터에 저장한다.

그런데 컴퓨터를 켜면 CPU 레지스터 파일에는 아무런 데이터도 없는 상태이다. 그래서 메모리에서 데이터를 가져와야 하고 후속 연산을 위해 연산 후 레지스터에 저장된 값을 메모리로 저장하기도 해야 한다.

 

이렇게 메모리에 있는 데이터를 CPU 레지스터로 읽어오고, CPU 레지스터에 있는 데이터를 메모리로 저장하기 위해 CPU는 메모리접근 명령어를 제공한다.

 

메모리접근 명령어는 I-type과 S-type 형태로 구성되어 있다.

메모리를 읽을 때, load 명령어를 사용해야 하고 이때 I-type 형태를 사용하고

메모리를 쓸 때는 store 명령어를 사용해야 하고 이때 S-type 형태를 사용해야 한다.

 

# 메모리 접근 명령어

1) Memory Read(Load) / I-type

- lb rd, imm[11:0](rs1)            // load byte

lb x10, 4(x7)                          // x10 ← mem[x7 + 4]

메모리에서 1-byte를 읽은 후, 32-bit로 sign-extension하고 x10에 저장한다.

- lbu rd, imm[11:0](rs1)            // load byte unsigned

lbu x10, 4(x7)                          // x10 ← mem[x7 + 4]

메모리에서 1-byte를 읽은 후, 32-bit로 zero-extension하고 x10에 저장한다.

signed일 때, sign-extension하고 unsigned일 때, zero-extension해야 읽어온 byte 값의 의미가 그대로 유지된다.

 

- lh rd, imm[11:0](rs1)            // load half-word(1-word = 32-bit = 4-byte이므로 2-byte = 16-bit = half-word)

lh x10, -4(x7)                         // x10 ← mem[x7 + (-4)]

메모리에서 2-byte(half-word)를 읽은 후, 32-bit로 sign-extension하고 x10에 저장한다.

- lhu rd, imm[11:0](rs1)            // load half-word unsigned

lhu x10, -4(x7)                         // x10 ← mem[x7 + (-4)]

메모리에서 2-byte(half-word)를 읽은 후, 32-bit로 zero-extension하고 x10에 저장한다.

 

- lw rd, imm[11:0](rs1)            // load word

lw x10, -16(x7)                       // x10 ← mem[x7 + (-16)]

메모리에서 4-byte(word)를 읽은 후, x10에 저장한다.

 

2) Memory Write(Store) / S-type

- sb rs2, imm[11:0](rs1)         // store byte

sb x10, -3(x7)                        // mem[x7 + (-3)] ← x10[7:0]

x10[7:0] 즉 레지스터 마지막 1-byte를 메모리에 저장한다.

- sh rs2, imm[11:0](rs1)         // store half-word

sh x10, -2(x7)                        // mem[x7 + (-2)]  x10[15:0]

x10[15:0] 즉 레지스터 하위 2-byte(half-word)를 메모리에 저장한다.

- sw rs2, imm[11:0](rs1)         // store word

sw x10, -8(x7)                        // mem[x7 + (-8)]  x10[31:0]

레지스터에 있는 4-byte(word)를 메모리에 저장한다.

 

# Reference
원리부터 설계까지 쉽고 명확한 컴퓨터구조 RISC-V 중심으로 - 서태원 지음 - 도서출판 홍릉
반응형
LIST