본문 바로가기

MIPS

[MIPS] MIPS 빠르게 적응하기 with Mars V4.5

※ 해당 글은 Windows에서 Mars 4.5버전으로 하는 MIPS 코딩을 다룹니다.

 

서문

이번 학기에 컴퓨터구조를 배우며 MIPS로 코딩할 기회가 생겼다.

교수님이 제시해준 사이트를 따라 Mars4_5.jar를 다운받고, 자바 SE도 다운받아 코딩을 시작했다.

 

 

MIPS Assembly Programming Simplified

Whether you are preparing for a course on Assembly language or you are just interested in learning Assembly, this tutorial series will guide you step by step...

www.youtube.com

위 강의를 보며 공부 중인데, 매우 기본적인 부분들은 생략하고 진행하는 듯해 이 포스팅을 작성하게 되었다.

MIPS를 쉽게 시작하기 위한 부스팅 포스트, 지금 시작하겠다.


기본 화면

Mars를 처음 켜면 나타나는 화면이다.

 

(1): 코드를 입력하는 구역이다. 이곳에 직접 프로그래밍한다.

(2): 각 레지스터의 값을 확인할 수 있는 구역이다.

(3): 실행 결과가 나타나는 화면이다. 출력은 물론 어셈블 과정에서 발견한 에러도 알려준다.

코드 구역

코드를 작성할 땐 위처럼 .data 영역과 .text 영역을 나누게 된다. .data 아래로 데이터 영역, .text 아래로 텍스트 영역이다.

데이터 영역엔 C언어에서 사용하는 변수를 선언한다. 텍스트 영역엔 명령어를 작성한다.

예시

이를 테면 이런 식이다. 아래 사진은 정수 num을 선언하고, 출력하는 예제다.

변수 선언은 위처럼 [변수명: .자료형 값]의 형태를 따른다. 대신 우리에게 친숙한 int, char 대신 word, asciiz 등을 쓰게 된다. 앞으로 명령어를 나타낼 땐 [ ]로 감싸겠다.

 

다음은 명령어를 살펴보자. 위 코드꼴은 상당히 자주 나오는데 비해, 설명이 꽤나 빈약해(그덕에 영상 길이가 짧은 거지만) 이해에 어려움이 있었다.

 

[li $v0, 1]은 v0에 1을 대입하는 명령(load immediate $v0 = 1)이다. 허나 $v0에 직접 수를 저장하는 것은 좀 특수한 경운데, $v0엔 syscall 호출 시 실행될 명령이 들어간다. 이때 대입되는 숫자는 system call code로, 우린 1부터 10까지를 자주 쓰게 될 것이다. 간단한 번호별 의미는 다음과 같다.

 

Code in $v0 의미 입력/출력 위치 Code in $v0 의미 입력/출력 위치
1 integer 출력 $a0 6 float 입력 $f0
2 float 출력 $f12 7 double 입력 $f0
3 double 출력 $f12 8 string 입력 $a0, $a1
4 string 출력 $a0 9   $a0
5 integer 입력 $v0 10 종료 (exit)  

 

모든 번호를 보고 싶다면 아래 링크로 가보자.

 

 

MIPS syscall functions available in MARS

instrument ($a2) Accepts a positive byte value (0-127) that denotes the General MIDI "patch" used to play the tone. If the parameter is outside this range, it applies a default value 0 which is an Acoustic Grand Piano. General MIDI standardizes the number

courses.missouristate.edu

 

lw는 load word, 즉 내가 선언했던 num을 불러오는 부분이고, syscall은 현재 v0에 저장된 값에 따라 다른 명령을 실행한다. 나는 위에 1을 넣어뒀으니 $a0에 저장된 3을 출력했다.

 

심화된 코드는 강의를 따라가다보면 배우게 될 것이다.


기본 세팅

빠른 학습을 위해, 해두면 좋은 세팅을 몇 가지 소개한다.

1. 10진수 사용

Mars는 우측에서 레지스터 값을 확인할 수 있는데, 기본 세팅은 16진수(Hexadecial)로 되어 있다.

주소는 이쪽이 편하다쳐도, 값까지 16진수로 되어 있으니 바로바로 알아보기가 어렵다.

상단 툴바의 Settings - Values displayed in hexadecimal 옵션을 꺼주면 값이 10진수로 나타난다.

위에 링크해둔 강의에서도 해당 옵션을 꺼두었으니, 똑같이 맞춘다는 의의도 있다.

2. 단축키

우선 MIPS의 코드 작성 - 실행 워크플로우를 가볍게 살펴보면

코드 작성 - 저장 - 어셈블(Assemble) - 실행(Run)이 가장 기본적이다.

혹은 어셈블 후, 코드를 한 줄씩 추적하고 싶다면 Step/Backstep으로 조작하기도 한다.

이쯤되면 눈치챘을 것이다. 각 단계별 단축키를 알아보자.

작업 저장 어셈블(Assemble) 실행(Run) Step Backstep
단축키 Ctrl + S F3 F5 F7 F8

다음 명령 실행이 왼쪽, 이전 명령 실행이 오른쪽이라 조금 헷갈리긴 하지만 그래도 확실히 편해진다.


마치며

지금까지 내가 해당 강의로 학습하며 장벽이 되었던 부분을 적어두었다. 이 글을 보는 여러분의 MIPS 공부에 도움이 되길 바란다.


참고 문헌