bgez의사

bgez

의사
RISC-V 어셈블리 참조

lyszt.net은 bgez 및 기타 RISC-V 명령어를 더 자세히 다룹니다.

설명

bgez는 레지스터의 값이 0이거나 양수일 때 분기합니다. 이름은 branch if greater than or equal to zero를 의미합니다. 아래 형식은 rs가 0 이상일 때 레이블 위치로 점프하고, 그렇지 않으면 다음 명령어로 폴스루합니다.

bgez rs, label

어셈블러는 이를 의사 명령어로 취급하여 아래 명령어로 다시 씁니다. 이 명령어는 레지스터를 항상 0을 담고 있는 레지스터인 zero와 비교합니다.

bge rs, zero, label

비교는 부호 있는 비교이므로, 레지스터의 32비트는 음수가 될 수 있는 수로 읽힙니다. 0은 일치로 간주되며, 이 점이 bgez를 bgtz와 구분합니다. 이는 bltz의 반대이므로, 어떤 값에 대해서든 둘 중 정확히 하나가 분기합니다. 두 레지스터의 비교에 대해서는 bge를 참조하세요.

bgez는 길이, 개수, 인덱스처럼 음수가 되어서는 안 되는 값에 대한 자연스러운 검사입니다. 카운터에서 1을 빼고 카운터가 0 아래로 내려가지 않는 동안 계속 반복하는 프로그램은 루프 끝에서 이것을 사용합니다.

addi t0, t0, -1
bgez t0, loop

위의 루프는 뺄셈 후 t0가 0 이상인 동안 반복되므로, t0가 0일 때 한 번 더 실행되고 t0가 -1에 도달하면 멈춥니다.

확장 대상

bge rs, zero, label

어셈블러는 이 의사 명령을 위에 나열된 실제 명령 또는 명령들로 대체합니다.

예시

li t0, 4
bgez t0, done   # t0 >= 0, so jump to 'done'