반응형

SPIM 은 어셈블리 코드를 실행해보고 테스트해볼 수 있는 프로그램이다. 그 중 PCspim 은 윈도우용이다. 이를 이용하면 MIPS 명령어 테스트 및 디버깅을 할 수 있다. 처음 설치하는 방법부터 예제 실행, 디버깅 방법을 살펴볼 것이다.

 

 

설치하기

PCspim 은 공식 홈페이지에 따르면 SPIM 의 소스포지에서 받을 수 있다. 링크를 아래에 두었다.

 

공식 홈페이지

http://spimsimulator.sourceforge.net/

 

SPIM MIPS Simulator

Spim is a self-contained simulator that runs MIPS32 programs. It reads and executes assembly language programs written for this processor. Spim also provides a simple debugger and minimal set of operating system services. Spim does not execute binary (comp

spimsimulator.sourceforge.net

 

공식 다운로드 사이트(소스포지)

https://sourceforge.net/projects/spimsimulator/files/

 

spim mips simulator - Browse Files at SourceForge.net

This directory contains compiled, installable copies of Spim for various operating systems: QtSpim: QtSpim_*_Windows.zip -- Windows (32 or 64 bit) QtSpim_*_mac.dmg -- Mac OS X qtspim_*_linux64.deb -- 64 bit Linux debian package qtspim_*_linux32.deb -- 32 b

sourceforge.net

 

해당 소스포지 사이트에 들어가면 아래와 같은 화면을 볼 수 있다. 최신(아마 마지막 업데이트일듯) 버전인 9.1.9 버전을 다운받자. 링크를 누르면 5초 뒤 자동으로 다운로드가 시작된다.

 

21.05.20 기준(바로가기 링크: https://sourceforge.net/projects/spimsimulator/files/PCSpim_9.1.9.zip/download)

 

 

다운 받은 파일의 압축을 풀면 아래 파일이 나온다.

 

setup.exe 를 실행시키자. 아래와 같이 설치 화면이 나오고 Next 를 잘 눌러주면 된다. (x86을 잘 기억하자)

 

 

 

설치가 끝나면 윈도우 키를 눌러보자. PCSpim이 설치된 것을 확인할 수 있다.

 

 

처음 실행하면 아래와 같은 에러가 뜬다.

 

 

이는 32비트(x86)를 기준으로 만들어진 오래된 프로그램이라 그렇다. 경로를 다시 잡아주어야 한다. 둘 중 하나를 하면 된다.

 

1. Load exception file 체크 취소 후 실행

Load exception file 을 해제하는 것이다. 기본 경로를 보면 'Program Files'(x86 아님)로 설정되어 있다.

 

2. 파일 경로 재설정

exception file 의 경로를 다시 잡아주는 것이다. Browse를 누르면 친절하게 자동으로 경로를 잡아준다.

 

 

exceptions.s를 선택하고 열기를 누르면 아래와 같이 경로가 재설정된 것을 확인할 수 있다.

 

 

OK 를 누르고 실행하면 끝이다. 아래와 같이 PCSpim 이 실행된 것을 확인할 수 있다.

 

 

예제

예제를 실행해보자. 아래와 같이 코드를 짰다. s1에는 583, s2에는 678을 할당하고 둘을 더하고 빼는 예제이다.

 

 

코드를 작성하고 원하는 곳에 코드를 저장한다.

 

 

Notepad++는 이렇게 코드를 식별하기 쉽게 해준다.

 

 

PCSpim 에서 소스코드를 불러오자.

 

 

 

코드를 불러오면 아래와 같이 해당 코드를 확인할 수 있다.

 

 

main: 아래 실제 작성한 코드는 조금 내리면 나온다.(파란 음영 오른쪽 부분 확인)

 

 

그런데 이렇게 일일이 내리면 코드가 길어지면 확인하기 어려울 것이다. 이때 원하는 코드를 찾는 방법이 있다.

 

 

코드 찾는 법

오른쪽 위의 손모양 아이콘(Breakpoints)을 누른다.

 

 

Address 칸에 본인이 찾고자 하는 코드를 입력하고 'Add' 를 클릭한다.

 

 

코드는 아래와 같이 메모리 주소 형식으로 변경되며 Breakpoint 가 추가된다. 이 주소가 해당 코드의 메모리 주소이다. 'Close' 를 클릭하자.

 

 

문서 모양 아이콘(Go)을 클릭하자.

 

 

'Starting Address' 에 위에서 나온 코드를 적고 'OK' 를 클릭하자.

 

 

해당 코드로 이동했다. 해당 위치는 main 이 시작되는 자리다.

 

 

코드 실행하기

좀전의 breakpoint 안내 창에서 '예'를 누르자.

 

 

레지스터의 값이 변경된 것을 확인할 수 있다. 현재는 16진수이다.

 

 

16진수에서 10진수로 바꿔보자.

 

'Simulator' 에서 'Settings...' 을 클릭하자.

 

아래와 같이 셋팅 창이 나오는데 'General registers in hexadecimal' 의 체크박스를 해제하자.

 

아래처럼 10진수로 바뀐 것을 확인할 수 있다.

 

 

아래는 16진수 확인

 

 

 

 

 

다음 예제로 곱셈을 진행해보자.

위의 생성한 코드에 'mult' 명령어를 추가했다.

 

 

결과는 L0에 나온다. 곱셈 연산은 오버플로우가 생길 수 있는데 이를 막기 위해 MIPS는 결과를 L0 레지스터에 저장한다.

 

 

249f 는 9375 이다.

 

 

(참고) 아래는 곱 연산 시 시뮬레이터에서 실제로 어떻게 연산이 이뤄지는지를 나타낸 표이다. 

반응형

'CS > Languages' 카테고리의 다른 글

[Prolog] 프롤로그 설치 및 예제(프로그래밍 언어)  (0) 2021.10.11

+ Recent posts