.data
a : .word 4
str : .asciiz "Hello world!"
.text
main:
lw $t0, a
la $t1, str
move $a0, $t0
li $v0, 1
syscall
move $a0, $t1
li $v0, 4
syscall
MIPS 명령어 실습을 위해 spim simulator를 아래 링크에서 설치한다.
spim mips simulator - Browse Files at SourceForge.net
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
spim simulator를 실행하면 위와 같은 화면이 뜨는데 좌측 상단에 load file을 눌러서 어셈블리 코드를 실행해볼 수 있다.
참고로 한 번 실행하고 다른 코드를 실행할 때는 load file 옆의 Reinitialize and Load file로 초기화를 하고 불러와야한다.
작성한 코드의 확장자는 .asm이어야한다.
간단하게 정수와 문자열을 출력하는 방법에 대한 코드를 실습해보려한다.
먼저 데이터를 저장하는 부분과 main 함수에 대한 부분으로 나뉘어진다.
c언어와 어셈블리 코드의 차이점을 비교해가며 공부할 예정이다.
int a = 4;
char str[] = "Hello world!";
이 코드를 spim simulator의 어셈블리 코드로 바꾸면 다음과 같다.
.data
a : .word 4
str : .asciiz "Hello world!"
.text
.data와 .text에 둘러 쌓인 부분에 변수를 저장하고 c언어와 비슷하게 변수형도 정해주어야 한다.
이제 이 변수들을 사용하기 위해서 main 함수를 만들어야한다.
함수의 경우 함수 이름 : 이렇게 만들 수 있다.
.data
a : .word 4
str : .asciiz "Hello world!"
.text
main:
변수들을 사용하기 위해서 메모리에 존재하는 값을 레지스터로 가져와야한다.
여기서 정수와 문자를 가져오는 방식이 다른데 변수의 자료형을 보면 정수는 "word" 문자는 "asciiz"인 것을 확인할 수 있다.
정수를 불러오기 위해서는 lw (load word), 문자를 불러오기 위해서는 la (load asciiz)를 사용한다.
레지스터는 레지스터 이름앞에 $(달러)를 붙이면 된다.
.data
a : .word 4
str : .asciiz "Hello world!"
.text
main:
lw $t0, a
la $t1, str
t0 레지스터에는 a의 값이, t1 레지스터에는 str의 값이 들어있다.
정수나 문자열을 출력할 때는 그 값이 a0 레지스터에 담겨있어야 한다.
그리고 v0 레지스터에는 출력에 해당하는 system call code가 담겨있어야 한다.
정수 출력 system call code는 1이고 문자 출력 system call code는 4이다.
그리고 종료에 관련된 system call code는 10인데 이를 사용하여 프로그램을 종료한다.
.data
a : .word 4
str : .asciiz "Hello world!"
.text
main:
lw $t0, a
la $t1, str
move $a0, $t0
li $v0, 1
syscall
move $a0, $t1
li $v0, 4
syscall
li $v0, 10
syscall
순서를 정리해보자면
- a0 레지스터에 출력할 값을 넣는다.
- v0 레지스터에 출력에 해당하는 systeym call code를 넣는다.
- syscall을 사용하여 system call을 한다.
- v0 레지스터에 종료에 해당하는 system call code인 10을 넣고 종료한다.
어셈블리 코드를 완성했으면 Reinitialize and Load file을 눌러서 해당 파일을 넣고 run을 눌러서 실행시킬 수 있다.
console 창이 띄워져있지 않다면 Window -> console을 눌러서 띄울 수 있다.
실행 결과
'공부 > 컴퓨터 구조론' 카테고리의 다른 글
[컴퓨터구조론] 파이프라이닝과 해저드 (0) | 2022.12.15 |
---|---|
[컴퓨터구조론] 데이터 경로 (단일 사이클 방식, 다중 사이클 방식) (0) | 2022.12.14 |
[MIPS] MIPS 스택을 활용한 반복문 (0) | 2022.12.12 |
[MIPS] MIPS 함수 및 반복문 사용법 (0) | 2022.12.11 |
[MIPS] MIPS 입력 및 연산 명령어 (정수, 문자열 입출력) (0) | 2022.12.10 |
댓글