snez
의사lyszt.net은 snez 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
설명
snez는 레지스터가 0이 아닌 값을 가지고 있는지 검사하며, seqz의 반대입니다. 이름은 0이 아닐 때 설정한다는 뜻입니다. rs가 0이 아니면 아래 형식은 rd에 1을 쓰고, rs가 0이면 0을 씁니다.
snez rd, rs
snez는 seqz처럼 의사 명령어이며, 어셈블러가 이를 실제 명령어로 확장합니다. 그 명령어는 0이 그 값보다 작은지 묻습니다.
sltu rd, zero, rs
이는 0이 아닌 모든 값에 대해 성립합니다. 어셈블러는 snez를 작성할 때 이 변환을 수행합니다.
계산은 종종 그 값의 유일하게 유용한 속성이 0인지 여부인 값을 만들어 냅니다. 예를 들어 남은 항목 수, 두 가지의 차이, 또는 플래그 그룹 등입니다. snez는 그 값을 0이 아닐 때 1로, 0일 때 0으로 줄입니다. 이는 예 또는 아니오 답을 반환하는 함수의 표준 형식입니다.
RISC-V 매뉴얼은 snez를 x0을 첫 번째 소스로 하는 sltu의 어셈블러 의사 명령어로 정의합니다. rs2가 0이 아니면 rd를 1로, 그렇지 않으면 0으로 설정합니다.
snez는 XOR과 함께 사용하여 같지 않음을 검사합니다. 두 값을 XOR하면 서로 다를 때만 0이 아닌 결과가 나오므로, snez를 적용하여 다를 때 1을 얻습니다. seqz와 함께, 이는 같음과 같지 않음에 대한 참 또는 거짓 결과를 만들어 내며, 점프 없이 and와 or와 결합하여 더 큰 조건으로 만들 수 있습니다.
확장 대상
sltu rd, zero, rs
어셈블러는 이 의사 명령을 위에 나열된 실제 명령 또는 명령들로 대체합니다.
예시
li t0, 5 snez t1, t0 # t1 = 1
