sub
lyszt.net은 sub 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
인코딩 형식
설명
sub는 한 레지스터의 값을 다른 레지스터의 값에서 뺀 뒤, 그 결과를 세 번째 레지스터에 저장합니다. 이 기능은 레지스터, 즉 프로세서 내부에 있는 각각 32비트 숫자 하나를 저장하는 작은 번호가 매겨진 저장 슬롯에서 작동합니다.
sub의 형식은 아래와 같으며, 결과는 rd = rs1 - rs2입니다. rd는 결과가 저장되는 대상 레지스터입니다. rs1과 rs2는 소스 레지스터입니다. 순서는 중요하며, 순서를 뒤바꾸는 것은 초보자들이 흔히 저지르는 실수입니다.
sub rd, rs1, rs2
다음 줄은 t0에서 t1을 뺀 값을 계산합니다. 왼쪽 소스(rs1)는 뺄 수 있는 값입니다.
sub rd, rs1, rs2
상수를 뺄 때 사용하는 subi 명령어는 없습니다. addi는 음수 상수를 허용하므로, 고정된 수를 뺀다는 것은 그 부호가 반전된 값을 더하는 것을 의미합니다. 다음 줄은 t0의 값을 1 줄여줍니다.
addi t0, t0, -1
RISC-V에는 항상 값 0을 유지하는 zero라는 특수 레지스터가 있습니다. zero에서 숫자를 빼면 부호가 반전되므로, 다음 줄은 t1의 음수를 t0에 저장합니다. neg 명령어는 이를 나타내는 약어입니다.
sub t0, zero, t1
RISC-V 매뉴얼에서는 sub를 rs1에서 rs2를 뺀 값으로 정의합니다. 오버플로는 무시되며, 결과값 중 XLEN 비트 이하의 저위 비트만 rd에 기록됩니다. 여기서 XLEN은 레지스터의 비트 폭을 의미하며, 이 예제에서는 32입니다. 또한 매뉴얼에는 레지스터 x0(이 시뮬레이터에서는 zero로 명명됨)이 모든 비트가 0인 값으로 고정되어 있다고 명시되어 있습니다.
이 예제에서 10에서 4를 빼면 t2에 6이 남습니다. 두 피연산자의 순서를 바꾸면 -6이 되며, 프로세서는 이를 자체적인 음수 처리 방식에 따라 저장합니다.
예시
li t0, 10 li t1, 4 sub t2, t0, t1 # t2 = 6
하는주시
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.2, Integer Register-Register Instructions, page 29.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.1, Programmers' Model for Base Integer ISA, page 23.
- [3]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4, Integer Computational Instructions, page 27.
