j의사

j

의사
RISC-V 어셈블리 참조

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

설명

j는 가장 단순한 점프를 수행합니다. 항상 조건 없이 제어를 레이블로 옮깁니다. 분기 명령은 비교가 성공할 때만 제어를 옮깁니다. 구문은 j label입니다.

이것은 무조건 점프이며, goto라고도 합니다. 루프와 if/else 블록은 이에 의존합니다. 기본 루프는 맨 위에 조건 분기를 두어 언제 빠져나갈지 결정하고, 루프 본문을 실행한 뒤, 다음 반복을 위해 맨 위로 돌아가는 j로 끝납니다. 그 점프가 없으면 실행은 끝에서 멈추고 루프는 결코 반복되지 않습니다. if와 else에서는 if 블록 끝의 j가 else 블록을 건너뛰므로 두 블록 중 하나만 실행됩니다.

j는 반환 주소를 기록하지 않으며, 이 점이 함수 호출과 다릅니다. 루프든 블록 건너뛰기든 코드 안을 이동할 때는 j를 사용하고, 실행이 되돌아와야 할 때는 call을 사용하세요. 결정적인 기준은 반환이 필요한지 여부입니다.

RISC-V 매뉴얼은 단순한 무조건 점프를 rd가 x0로 설정된 jal로 인코딩합니다. 항상 참인 조건 분기 대신 무조건 분기에는 항상 이 점프를 사용해야 한다고 명시합니다. 점프는 또한 pc 상대적이며, 분기보다 훨씬 넓은 범위를 커버하고, 조건 분기 예측 테이블을 건드리지 않습니다.

j는 아래 줄의 의사 명령어입니다.

jal zero, label

이것은 jump and link로, 반환 주소를 zero 레지스터에 기록합니다. 그 값은 버려지므로 점프만 남습니다. 이 예제는 루프의 맨 위로 다시 점프합니다.

확장 대상

jal zero, label

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

예시

j loop   # go back to the top of the loop