RISC-V에서 load
명령의 offset에 레지스터를 지정할 수 없습니다. RISC-V의 load
명령어는 **즉시 값(즉, 상수 오프셋)**만을 허용하며, 레지스터 기반 오프셋을 사용할 수 없습니다.
RISC-V는 설계상 간단하고 효율적인 명령어 집합을 제공하기 위해 기본적으로 상수 오프셋을 사용합니다. 즉, 메모리에서 데이터를 읽어올 때, 레지스터에 저장된 베이스 주소와 상수로 주어진 오프셋을 더한 결과를 기반으로 데이터를 읽어옵니다. 오프셋에 레지스터를 사용할 수 없고, 반드시 정수 상수만 사용해야 합니다.
load
명령어 형식:RISC-V에서 load
명령어는 다음과 같은 형식을 가집니다:
LW rd, offset(rs1)
rd
: 데이터를 로드할 목적지 레지스터.offset
: 상수로 주어진 오프셋.rs1
: 베이스 주소를 담고 있는 레지스터.예시:
LW x1, 4(x2)
x2
레지스터에 저장된 주소에 4바이트 오프셋을 더한 위치에서 32비트 데이터를 읽어와 x1
에 저장합니다.load
명령에서 상수 오프셋만 허용함으로써 명령어가 간단해지고, 하드웨어 복잡성도 줄일 수 있습니다.만약 두 레지스터를 더한 결과를 메모리 주소로 사용하고 싶다면, 오프셋을 미리 계산해야 합니다. 예를 들어, 두 레지스터의 값을 더하고 그 결과를 베이스 주소로 사용해야 합니다.
예시:
ADD x3, x1, x2 // x1 + x2의 결과를 x3에 저장 (주소 계산)
LW x4, 0(x3) // x3에 저장된 주소에서 데이터를 로드
위 예시에서는 x1
과 x2
에 저장된 값을 더해 x3
에 저장한 후, x3
을 베이스 주소로 사용하여 메모리에서 값을 로드합니다.