lui

lui

RISC-V 어셈블리 참조

lyszt.net은 lui 및 기타 RISC-V 명령어를 더 자세히 다룹니다.

인코딩 형식

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

설명

lui는 큰 상수를 조립합니다. RISC-V 명령어는 32비트를 차지하며, 그 비트들은 연산, 해당 레지스터, 그리고 임의의 상수를 담습니다. 일반 명령어는 대략 12비트의 상수를 담을 수 있는데, 이는 작은 수는 커버하지만 완전한 32비트 값에는 미치지 못합니다. 여러 명령어가 큰 상수의 조각들을 공급합니다.

lui(load upper immediate)는 상위 조각을 공급합니다. 이는 20비트 상수를 받아 목적 레지스터의 상위 20비트에 기록하고, 하위 12비트는 0으로 남깁니다. 그 형식은 아래에 나옵니다.

lui rd, value

완전한 상수에는 두 개의 명령어가 필요합니다. lui가 상위 20비트를 설정하고, addi가 하위 12비트를 더합니다. li 의사 명령어가 이 작업을 대신 수행하므로, 일반적인 수에 대해 직접 작성한 lui는 거의 필요하지 않습니다.

RISC-V 매뉴얼은 lui와 auipc의 어셈블리 구문이 상수의 하위 12비트를 생략한다고 기술하는데, 그 비트들은 항상 0이기 때문입니다. 또한 lui 뒤에 jalr이 오면 어떤 32비트 절대 주소에도 도달할 수 있다고 기술합니다. lui가 대상 주소의 상위 20비트를 로드하고 jalr이 하위 비트를 더합니다.

lui는 하위 비트가 0인 반올림된 주소, 예를 들어 하드웨어 장치의 고정 주소를 로드할 때 직접 나타나며, 여기서 단일 lui가 값 전체를 공급합니다. 그 가까운 친척은 현재 위치를 기준으로 주소를 구성하는 auipc입니다.

예시

lui t0, 0x10     # t0 = 0x10000 (0x10 << 12)