티스토리 뷰

개요

 RISC - V 의 ARM 프로세서의 어셈블리 언어를 보고 싶다면 시뮬레이터를 이용하면 됩니다. 사용하기 전에 기초지식과 RARS, VENUS 시뮬레이터에 대해 간단하게 훑고, 시뮬레이션 방법을 설명해드리겠습니다. 또한 간단하게 예제코드를 통해 C언어가 어셈블리 언어(RISC-V ARM)으로 변경되는 결과를 보여드리겠습니다.


GUI-based RISC-V 시뮬레이터는 RARS, VENUS가 있다. 본 글에서는 RARS를 사용합니다.

 

RARS : https://github.com/TheThirdOne/rars

VENUS : https://venus.cs61c.org

 

 

RARS의 장점

  1. RV64I Instructions 을 지원하여 내가 짠 코드에서 사용한 ld, sd 등을 인식이 가능하다.
  2. 수도 명령어를 기계어로 변환한 것을 단계별로 비교할 수 있다.
  3. 깃허브에 최신버전이 꾸준히 업데이트 된다.

RARS 단점

  1. JDK를 설치해야한다.
  2. VS Code Extension을 지원하지 않는다.

VENUS의 장점

  1. VS Code Extension 지원
  2. web interface 지원

VENUS의 단점

  1. RV64I 명령어를 지원하지 않고, RV32IM 명령어만 지원한다.
  2. 2017년이후로 지속적인 업데이트가 되지않는다.

 

RARS 선택 이유

비너스는 RV64I 명령어를 지원하지 않으므로 64bit regiter도 다룰 수 없다. 내가 짠 코드는 64bit 프로세서 기준이므로 RARS를 이용한다.

 

RARS 사용 과정

  1. JDK를 설치한다. 
  2. RARS 1.6 Java executable file을 설치한다. (설치 : https://github.com/TheThirdOne/rars)
  3. java -jar ‘경로\rars1_6.jar’ 을 powershell에서 타이핑한다.
  4. File-New
  5. test code를 입력
  6. assemble the current file and clear breakpoints 클릭
    1. Address 부분은 4byte 의 길이를 가진 것을 확인 할 수 있다.
    2. code의 4byte는 32bit의 길이를 가진 machine code이다.
  7. Setting > 64bit check : ld와 sd를 사용하기 위하여 설정 체크

 

JAVA가 잘 설치됐는지 확인
3.  powershell에서  `java -jar ‘경로\rars1_6.jar` 입력
5. test code 작성

 

6.assemble the current file and clear breakpoints 클릭


간단한 예제코드로 시뮬레이션

C언어 코드

 어셈블리 언어를 단순성을 위하여 A[10]= {1,-1,1,-1,1,-1,1,-1,1,-1} 로 하자

 

C언어코드

 

assembly 코드

레이블 Assembly 언어 주석
  addi x5, x0, 1 A[10] = {1,-1,1,-1,1,-1,1,-1,1,-1} 를 변수 선언하기 위하여 1과 -1을 x5, x6에 담음
  addi x6, x0, -1  
     
  addi x2, x2, -80 80byte (10개*8byte) 저장하기 위한 stack pointer 조정
  sd x5, 0(x2)  
  sd x6, 8(x2)  
  sd x5, 16(x2)  
  sd x6, 24(x2)  
  sd x5, 32(x2)  
  sd x6, 40(x2)  
  sd x5, 48(x2)  
  sd x6, 56(x2)  
  sd x5, 64(x2)  
  sd x6, 72(x2)  
  add x25, x0, x2 x25에 x2의 값을 저장한다. x2는 스택포인터 의미
  add x24, x0, x0 sum = 0
  add x22, x0, x0 i = 0
  addi x5, x0, 10 x5 : = 10
LOOP: bge x22, x5 EXIT i>10 이면 EXIT로 분기
  slli x6, x22, 3 x5 : = i*8
  add x6, x6, x25 x5 : = &A + i*8
  ld x6,0(x6) x6 : =&A[i]
  bge x0, x6, IF_N A[i]≤0이면 IF_N으로 이동
  add x24, x24, x6 A[i]>0일 경우 sum = sum+A[i]
IF_N: addi x22, x22, 1 i=i+1
  beq x0, x0, LOOP  
EXIT:    

시뮬레이션 결과

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함