하시스하세요

하시스하세요

레지스터: CPU의 손

먼저, 비트란 무엇일까요? 비트는 0 또는 1 하나이며, 컴퓨터가 저장할 수 있는 가장 작은 정보 단위입니다. 이것을 32개 모으면 32비트 숫자가 되며, 0부터 약 40억까지 셀 수 있습니다. RISC-V의 모든 레지스터와 모든 메모리 슬롯은 하나의 32비트 숫자를 담습니다.

레지스터는 프로세서 내부에 있는 작은 저장 슬롯으로, 하나의 32비트 숫자를 담습니다. RISC-V는 32개의 레지스터를 제공합니다. 레지스터는 프로세서 코어 안에 있기 때문에 주 메모리보다 훨씬 빠르게 사용할 수 있으며, 그 차이는 수십 배에 이릅니다. 그중 몇 개만으로도 작성하는 대부분의 코드를 처리할 수 있습니다: t0부터 t2(임시 값), a0부터 a2(인수와 결과), zero(항상 0), sp(스택 포인터), ra(반환 주소).

ℹ
Simulator 탭은 프로그램이 실행되는 동안 값이 변하는 각 레지스터를 보여줍니다. 그 화면을 지켜보는 것이 레지스터가 어떻게 동작하는지 감을 잡는 가장 빠른 방법입니다.
첫 번째 프로그램: 42을 출력하세요
# 42을 출력하고 종료합니다.
# a7이 서비스를 선택하고 a0이 값을 전달합니다.
li a7, 1 # 서비스 1 = 정수 출력
li a0, 42 # 출력할 값을 입력하세요
ecall # 해당 작업을 수행하세요
li a7, 10 # 서비스 10을 종료합니다
ecall

는 load immediate의 약자이며, 상수를 레지스터에 넣습니다. 은 서비스 1을 선택하며, 이는 정수를 출력합니다. 는 출력할 숫자를 a0에 넣습니다. 은 제어를 시스템에 넘기고, 시스템은 a0의 값을 출력합니다. 그런 다음 은 종료 서비스를 선택하고, 이 프로그램을 끝냅니다. Run을 누른 다음, 42를 바꾸고 프로그램을 다시 실행하세요.

프로그램 실행
0x400000li a7, 1
0x400004li a0, 42
0x400008ecall
0x40000cli a7, 10
0x400010ecall
a71
a0—
출력—
pc0x400000

a7을 1로 설정하면 다음 ecall이 숫자를 출력합니다.

아래 그림은 시뮬레이터가 위의 다섯 줄을 실행할 때의 흐름을 따라갑니다. 각 줄은 프로그램이 로드될 때 차지하는 주소를 가지며, 모든 RISC-V 명령어는 4바이트 폭이기 때문에 주소는 4바이트씩 떨어져 있습니다. pc라고 표시된 상자는 프로그램 카운터의 약자로, 현재 강조 표시된 줄의 주소를 담습니다. 그 숫자가 프로세서가 프로그램 내 위치에 대해 아는 전부입니다. 즉, 프로그램 카운터에 있는 주소의 명령어를 가져와 실행한 다음, 프로그램 카운터에 4를 더해 다음 명령어에 도달합니다. 레지스터는 해당 줄의 가 실행될 때 값을 받고, 출력은 첫 번째 이 실행될 때만 나타납니다.