beqz
의사lyszt.net은 beqz 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
설명
beqz는 레지스터가 0을 담고 있을 때 분기합니다. 이 이름은 0과 같으면 분기한다는 뜻입니다. 아래 형식에서 프로세서는 rs가 0일 때 레이블이 붙은 위치로 점프하고, 그렇지 않으면 다음 명령어로 계속 진행합니다.
beqz rs, label
beqz는 의사 명령어로, 어셈블러가 실제 명령어로 다시 써 넣는 읽기 쉬운 이름입니다. 이것은 아래 명령어가 되며, 레지스터를 항상 0을 담고 있는 특수 레지스터인 zero와 비교합니다.
beq rs, zero, label
beqz는 가장 흔한 비교를 더 짧게 쓸 수 있는 방법을 제공합니다. 분기와 레이블이 어떻게 동작하는지는 beq를 참고하세요.
0은 저수준 코드에서 자주 나타나기 때문에 이 축약형이 존재합니다. 0 바이트는 텍스트의 끝을 표시합니다. 0은 연산이 성공했다는 일반적인 신호입니다. 0은 또한 비어 있거나 없는 값을 나타내며, 카운트다운 루프는 0에서 끝납니다. 0 검사는 문자를 로드한 뒤 문자열의 끝을 감지할 때, 반환된 상태에서 성공 경로를 택할 때, 그리고 카운터에서 루프를 끝낼 때 사용됩니다.
RISC-V 매뉴얼은 그 분기가 하나의 레지스터를 0과 비교하는 대신 두 개의 레지스터를 비교하는 이유를 하나 제시합니다. 0과의 비교에는 무시할 수 없는 회로 지연이 필요하므로 산술 크기 비교만큼 거의 비쌉니다. 따라서 beqz는 zero와 함께 beq를 사용하는 의사 명령어입니다.
아래 첫 번째 줄은 0과의 비교를 풀어 쓴 두 번째 줄보다 더 명확하게 읽힙니다.
beqz t0, done beq t0, zero, done
의사 명령어는 가독성을 위해 존재하며, 그것들이 생성하는 기계어는 동일합니다. 그 반대는 값이 0이 아닐 때 분기하는 bnez입니다.
확장 대상
beq rs, zero, label
어셈블러는 이 의사 명령을 위에 나열된 실제 명령 또는 명령들로 대체합니다.
예시
li t0, 0 beqz t0, done # t0 == 0, so jump to 'done'
