ISA와 어셈블리
RISC-V의 auipc 명령어(add upper immediate to PC)의 동작으로 올바른 것은?
- APC의 값을 그대로 메모리에 저장한다
- B자신의 주소(PC)에 20비트 즉치값을 12비트 왼쪽으로 시프트한 값을 더하여 레지스터에 넣는다
- C즉치값으로 지정한 주소로 무조건 점프하여 PC를 고쳐 쓴다
정답과 해설 보기
정답: B. 자신의 주소(PC)에 20비트 즉치값을 12비트 왼쪽으로 시프트한 값을 더하여 레지스터에 넣는다
auipc는 'PC+(즉치값<<12)'를 레지스터에 넣을 뿐인 명령어입니다. 이어서 jalr이나 lw로 하위 12비트의 오프셋을 더하면, 현재 위치에서 ±2GiB 정도 범위에 있는 함수나 데이터의 주소를 PC로부터의 거리로 지정할 수 있습니다. 이에 따라 프로그램을 어디에 로드해도 동작하는 위치 독립 코드에서 먼 함수를 호출하거나 전역 변수를 읽을 수 있습니다.