slti

slti

RISC-V 어셈블리 참조

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

설명

slti는 레지스터를 상수와 비교하고 목적지에 1 또는 0을 씁니다. 이는 두 레지스터를 비교하여 결과를 숫자로 저장하는 slt(해당 페이지 참조)에서 두 번째 값을 즉시값으로 제공하는 형태입니다. 즉시값은 명령어에 인코딩된 상수이며, 이름의 i가 이를 나타냅니다.

slti의 형식은 아래와 같습니다. rs1의 값이 상수 imm보다 작으면 rd는 1을 받고, 그렇지 않으면 0을 받습니다.

slti rd, rs1, imm

비교는 부호 있는 비교이므로, 레지스터와 상수는 모두 음수가 될 수 있는 숫자로 읽힙니다.

미리 알려진 고정 임계값과 변수를 비교할 때 사용합니다. 인덱스가 10 미만인지 또는 값이 한계 아래로 떨어졌는지 확인하는 데 slti 하나면 충분합니다. 다음 줄은 t0가 0보다 작은지 묻는 것으로, 음수 값을 검사하여 음수이면 t1에 1을, 그렇지 않으면 0을 설정합니다.

slti t1, t0, 0

RISC-V 매뉴얼에 따르면 slti는 rs1과 부호 확장된 즉시값을 모두 부호 있는 숫자로 취급했을 때 rs1이 즉시값보다 작으면 rd에 1을, 그렇지 않으면 0을 넣습니다. 일반적인 부호 있는 덧셈의 오버플로 검사에서는 slt 페이지에 나온 것처럼 피연산자가 음수인지 기록하기 위해 이를 사용합니다.

상수의 범위는 -2048에서 2047까지입니다. 더 큰 값과 비교하려면 li로 상수를 레지스터에 로드하고 slt를 사용하십시오. 어셈블러는 범위를 벗어난 상수를 오류 메시지와 함께 거부합니다.

예시

li t0, 3
slti t1, t0, 5   # t1 = 1 (3 < 5)