sltiu

sltiu

RISC-V 어셈블리 참조

lyszt.net은 sltiu 및 기타 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

설명

sltiu는 slti와 sltu를 결합한 것입니다. 레지스터와 상수를 비교하며 두 값을 모두 부호 없는 값으로 취급합니다. 이름은 set less than, immediate, unsigned의 각 부분을 쌓아 만든 것입니다. 아래 형식은 rs1이 상수 imm보다 작을 때 rd에 1을 쓰고, 두 값을 모두 음이 아닌 수로 읽으며, 그렇지 않으면 0을 씁니다.

sltiu rd, rs1, imm

sltu 페이지에서처럼 부호 없음은 최상위 비트가 수의 일반적인 자릿수로 계산된다는 뜻이므로, 범위는 0부터 약 40억까지입니다. sltiu는 음수가 될 수 없는 값에 대한 범위 검사, 예를 들어 인덱스가 배열의 크기보다 작은지 검사하는 일을 한 명령어로 처리합니다.

아래 줄은 값이 1보다 작은지 묻습니다.

sltiu rd, rs, 1

1보다 작은 부호 없는 값은 0뿐이므로, rs가 0일 때 결과는 1이고 그렇지 않으면 0입니다. 이것은 0과의 동등을 검사하며, seqz 축약형은 이것으로 만들어집니다. 두 값 사이의 동등도 이로부터 따릅니다. 두 값을 XOR하면 일치할 때만 0이 나오므로, 그 결과를 0과 검사합니다.

RISC-V 매뉴얼에 따르면 상수는 먼저 32비트로 부호 확장된 다음 부호 없는 수로 취급됩니다. 따라서 음수 상수는 매우 큰 부호 없는 값이 됩니다. 매뉴얼은 상수 1을 사용하는 sltiu를 0을 검사하는 방법으로 제시하며, 이것이 seqz 의사 명령어입니다.

slti와 마찬가지로, 12비트 범위를 넘는 상수는 li로 레지스터에 로드되고 sltu로 비교됩니다.

예시

li t0, -1
sltiu t1, t0, 5   # t1 = 0 (t0 read as unsigned is huge)