본문 바로가기

Programming/Assembly Language

[MIPS] QtSpim 예제 1 - 문자 출력하기

  • 사용 opcode : la, li
  • 사용 system call : 4, 10

1. 문제


 

Hello World!를 출력해라.

 

 

 

 

2. 정답


.data
	msg : .asciiz "Hello World!"
.text

main:
	la $a0, msg
	li $v0, 4
	syscall
    
	li $v0, 10
	syscall

 

 

 

 

3. 풀이


Hello World!를 출력하기 위해서는 Hello World!를 저장할 공간이 필요합니다. 따라서 새로운 변수를 선언해주어야 합니다. 이 변수의 이름을 msg라고 가정하겠습니다. 이를 어셈블리어 코드로 나타내면 아래와 같습니다.

 

     msg : .asciiz "Hello World!"

 

해당 코드는 msg라는 변수를 새로 선언하고 Hello World!라는 문자열을 할당해준다는 의미입니다. 변수와 문자열 사이에 .asciiz가 있는데 이는 Hello World!가 문자열이라는 것을 알려줘 컴퓨터가 문자열을 표현할 수 있도록 도와줍니다.

 

 

 

 

msg의 내용을 출력하기 위해서는 msg의 내용을 레지스터로 불러와야합니다. 이를 코드로 표현하면 아래와 같습니다.

 

     la $a0, msg


la는 a0라는 레지스터에 msg의 값을 로드하도록 해줍니다.



로드가 끝났다면 이제 출력을 해보겠습니다. 출력을 하기 위해서는 System Call Code를 알아야합니다. string을 출력하는 system call code는 4번입니다. 이를 코드로 표현하면 아래와 같습니다.

 

     li $v0, 4
     syscall



출력을 마치셨다면 마지막으로 코드가 끝났다는 것을 알려주어야 합니다. 이는 system call code 10을 사용하면 됩니다. 코드로 표현하면 다음과 같습니다.

 

     li $v0, 10
     syscall



4. c++ 코드로 표현


풀이한 어셈블리어 코드를 c++로 표현하면 다음과 같습니다.

 

#include <stdio.h>

 char msg[15] = "Hello World!";
 
 int main() { 
 	
    	printf("%s", msg);
    
 }