QtSpim 사용법

강한친구·2021년 9월 25일
0

Computer Architecture

목록 보기
4/12

QtSpim

QtSpim은 제임스 라루스가 개발한 MIPS 시뮬레이터이다. 따로 에디터 공간이 존재하지 않고, .s 확장자로 만들어진 assemblr 파일을 실행시켜주는 도구이다.
이 글에서는 QtSpim 사용법에 대해 설명하도록 하겠다.

1. 설치

설치링크
링크를 타고 들어가서 다운로드 받은 후, 설치를 하면 된다.

2. Text 영역

Text 영역은 실행되는 코드를 눈으로 보여주는 영역이다.
위의 User Text Segment 영역이 우리가 작성한 코드가 실행되는 공간인것이다. 그림에 그려진 빨간선을 기준으로 그 위의 코드들은 자동적으로 실행 시 동작하는 코드이다. 그 후, jal Main을 통해 내가 작성한 main코드로 점프하고, 그에 맞는 코드를 수행하게 된다.

앞에 대괄호안에 적혀있는 숫자들ㅇ느 주소값이다. 보이는것처럼 4 단위로 움직이는것을 알 수 있다.

3. Register 영역

다음은 레지스터 영역이다. 32개의 레지스터를 모두 보여주고, 그 안에 지금 어떠한 값이 저장되어 있는지 보여주는 장치이다. 맨 위에는 PC, 즉 다음 명령은 무엇이 수행되는지 보여주는 장치가 저장되어 있다.

4. Data 영역

다음은 데이터 영역이다. 유저가 어떠한 데이터를 제공했는지 보여주는 영역이다. 지금은 작성된 코드가 없기에 어떤 데이터도 들어있지 않다.

5. 코드작성

코드는 Notepad(메모장)을 이용하여 작성한다.

.text # 텍스트 영역 
.globl main # 명령 시작지점 설정 

main: 	la $t0, value # value를 t0로 이동 
	lw $t1, 0($t0) # t0를 t1으로 불러옴 
	lw $t2, 4($t0) # t0에서 4만큼 이동한 값을 t2로 불러옴 
	add $t3, $t1, $t2 # t1, t2를 더하여 t3에 저장함 
	sw $t3, 8($t0) # t0에서 8만큼 떨어진곳에 t3를 저장함 

.data # 데이터영역 
value: .word 10, 20, 0 #value 제공 

주석을 보면 코드를 이해할 수 있을것이다.

  • 코드를 저장할때는 .s 확장자를 이용하여 어샘블러 파일로 바꿔주어야한다.

6. 코드실행 준비

그림에서의 빨간색 부분을 눌러서 코드를 불러오면 실행할 준비가 된다.

  • Reinitialize and load file을 사용하는 이유는 코드를 불러오기 전 항상 장치를 초기화화고 불러와서 오류를 없애기 위함이다.

코드를 불러오면 다음과같이 내가 작성한 코드들이 jal main뒤로 준비되어 있는것을 볼 수 있다.

또한

데이터값 역시 내가 value를 통해 값을 넣었기에 변동이 있는것을 알 수 있다.

7. Step 실행

f10 키를 통해 디버깅하듯, 한줄씩 코드를 실행에 옮길 수 있다.

현재 jal 직전에 멈춰있는 상태이다.

PC는 다음명령인 jal 400014를 저장하고 있고, 위의 ㅈ동명령어들에 따라 레지스터의 값이 조금씩 변화한것을 알 수 있다.

실행이 모두 끝나면, 보이는것처럼 register에 내가 원했던 계산값이 들어가 있는것을 알 수 있다.

이와같은 방식으로 코드를 실행 할 수 있다.

8. syscall

QtSpim에는 syscall 이라는 별도의 기능이 있다.

li $v0 constant num 

이러한 일련의 코드를 통해서 미리 내장된 명령들을 수행 할 수 있는것이다. 이와 관련해서는 별도의 글에서 다양한 예제들과 함께 찾아뵙도록 하겠다.

  • syscall은 QtSpim의 독자적인 기능으로 실제 ALU와는 크게 관계가 없다.

  • QtSpim은 실제 CPU의 계산보대 100배 이상 느리다고 한다.

0개의 댓글