lui
lyszt.net은 lui 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
인코딩 형식
설명
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)
