neg
의사lyszt.net은 neg 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
설명
neg는 숫자의 부호를 반전합니다. 5는 -5가 되고, -5는 5가 됩니다. 이 이름은 negate를 줄인 것입니다. 아래 형식은 소스 레지스터 rs의 부정을 목적지 레지스터 rd에 넣습니다.
neg rd, rs
neg는 의사 명령어입니다. 어셈블러는 읽기 쉬운 이름인 의사 명령어를 프로세서가 그것을 만나기 전에 하나 이상의 실제 명령어로 다시 씁니다. neg는 아래 명령어가 되며, 이는 숫자를 항상 0을 담고 있는 특수 레지스터인 zero에서 뺍니다.
sub rd, zero, rs
0에서 x를 빼면 -x가 되므로, 이것은 부정을 만들어냅니다. RISC-V는 이렇게 뺄셈과 제로 레지스터를 재사용함으로써 실제 명령어 집합을 작게 유지합니다.
음수의 범위는 양수의 범위보다 한 단계 더 넓습니다. 약 -21억에 이르며, 양수 쪽은 약 +21억까지만입니다. 가장 음수인 수는 양수 대응값이 없으므로, 그것을 부정하면 감싸돌아 같은 수가 됩니다. 절댓값을 계산하는 코드는 이 경우를 고려해야 합니다.
RISC-V 매뉴얼은 sub를 rs1에서 rs2를 빼는 것으로 정의하고, 여기서 zero라고 불리는 레지스터 x0를 모든 비트가 0인 값으로 하드와이어되어 있다고 설명합니다. x0에서 값을 빼면 그 음수가 나오며, 이것이 neg가 되는 형식입니다.
이 예제는 5를 -5로 부정합니다. 숫자가 이미 양수일 때 neg를 건너뛰는 분기와 결합하면, 일반적인 두 명령어 절댓값을 만들어냅니다.
확장 대상
sub rd, zero, rs
어셈블러는 이 의사 명령을 위에 나열된 실제 명령 또는 명령들로 대체합니다.
예시
li t0, 5 neg t1, t0 # t1 = -5
하는주시
- [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.
