sltu
lyszt.net은 sltu 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
인코딩 형식
설명
sltu는 slt처럼 목적 레지스터를 1 또는 0으로 설정하며, 두 수를 부호 없는 값으로 비교합니다. 이름은 set less than, unsigned의 약자입니다. slt 페이지에서는 비교 결과를 1 또는 0으로 저장하는 방법을 다룹니다.
같은 32비트는 최상위 비트가 음수를 의미하고 범위가 대략 -20억에서 +20억인 부호 있는 수로 읽을 수도 있고, 음수가 없고 범위가 0에서 약 40억인 부호 없는 수로 읽을 수도 있습니다. slt는 부호 있는 값을 읽고 sltu는 부호 없는 값을 읽습니다. 모든 비트가 1로 설정된 레지스터는 slt에게는 -1이고 sltu에게는 가능한 가장 큰 값이므로, 두 명령어는 동일한 입력에 대해 서로 다른 결과를 낼 수 있습니다.
메모리 주소, 크기, 개수, 위치처럼 음수가 될 수 없는 양에는 sltu를 사용하세요. 두 메모리 주소를 부호 있는 slt로 비교하면, 주소가 충분히 커져서 최상위 비트가 설정되는 순간 부호 있는 해석이 이를 음수로 취급하므로 잘못된 결과가 나옵니다.
RISC-V 매뉴얼은 slt와 sltu를 함께 rs1이 rs2보다 작으면 rd에 1을 쓰고 그렇지 않으면 0을 쓰는 부호 있는 비교와 부호 없는 비교로 설명합니다. 0이 아닌지 테스트하는 방법으로 아래 줄을 제시하며, 이것이 snez 의사 명령어입니다.
sltu rd, x0, rs2
sltu의 형식은 아래와 같습니다.
sltu rd, rs1, rs2
아래의 특수한 경우에는 0이 다른 모든 부호 없는 값보다 작기 때문에 rs가 0이 아닐 때마다 rd가 1이 됩니다. 이는 임의의 수를 1 또는 0으로 줄여 줍니다.
sltu rd, zero, rs
예시
li t0, -1 li t1, 1 sltu t2, t0, t1 # t2 = 0 (t0 read as unsigned is huge)
