하시스하세요
레지스터: 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이 숫자를 출력합니다.
pc라고 표시된 상자는 프로그램 카운터의 약자로, 현재 강조 표시된 줄의 주소를 담습니다. 그 숫자가 프로세서가 프로그램 내 위치에 대해 아는 전부입니다. 즉, 프로그램 카운터에 있는 주소의 명령어를 가져와 실행한 다음, 프로그램 카운터에 4를 더해 다음 명령어에 도달합니다. 레지스터는 해당 줄의 가 실행될 때 값을 받고, 출력은 첫 번째 이 실행될 때만 나타납니다.