초보 게임 클라이언트

산술 명령어(arithmetic instruction)

RISC-V 산술 명령의 특징은 다음과 같다.

  • 반드시 한 종류의 연산만 지시한다.
  • 반드시 3개의 피연산자를 갖는다.

따라서 네 변수 b, c, d, e를 더해서 그 합을 a에 넣으라는 산술 연산을 RISC-V 어셈블리어로 컴퓨터에 지시하는 것은 아래와 같다.

add a, b, c    // a에 b와 c의 합이 저장된다.
add a, a, d    // a에 a와 d의 합이 저장된다.
add a, a, e    // a에 a와 e의 합이 저장된다.

조금 더 복잡한 예를 살펴보자. 아래는 어떤 C 프로그램의 코드이다. 

f = (g + h) - (i + j);

C 프로그램을 RISC-V 어셈블리 언어 명령어로 바꾸는 것은 컴파일러의 일이다. C 컴파일러가 생성할 RISC-V 코드를 살펴보자.

add t0, g, h    // g와 h의 합을 구하고 결과를 임시 변수 t0에 저장한다.
add t1, i, j    // i와 j의 합을 구하고 결과를 임시 변수 t1에 저장한다.
sub f, t0, t1   // 뺄셈 명령어가 t0에서 t1를 빼고 결과를 변수 f에 저장한다.

산술 피연산자(arithmetic operand)

RISC-V는 산술 명령어의 피연산자로는 레지스터만을 사용할 수 있다는 제약이 있다. RISC-V 구조에서 레지스터의 크기는 32비트, 개수는 32개이므로 산술 명령어의 모든 피연산자는 32개의 32비트 레지스터 중 하나여야 한다는 말로 풀어쓸 수 있겠다. 명령어에서 단순히 숫자 0부터 31로 레지스터를 표시할 수도 있지만, RISC-V의 관례는 x 뒤에 레지스터 번호를 붙인다. 위의 예에서 컴파일러가 변수 f, g, h, i, j를 레지스터 x19, x20, x21, x22, x23에 각각 할당했다고 한다면 아래와 같은 코드로 바뀔 것이다.

add x5, x20, x21
add x6, x22, x23
sub x19, x5, x6

달라진 건 변수 대신에 위에서 말한 레지스터를 사용하고, 임시 변수 대신 임시 레지스터 x5와 x6를 사용한 것 뿐이다.

'RISC-V' 카테고리의 다른 글

<RISC-V> 1. RISC-V란?  (0) 2023.12.27
profile

초보 게임 클라이언트

@앵춘

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그