본문 바로가기

Programming/Assembly Language

[MIPS] QtSpim 예제 4 - 값을 입력받아 곱셈 수행하기

  • 사용 opcode : li, move, mul
  • 사용 system call : 1, 5, 10

 


1. 문제


두 수를 입력받고 두 수의 곱을 출력해라.

 

 

 

2. 정답


.text

main:

    li $v0, 5
    syscall
    move $t0, $v0
    
    li $v0, 5
    syscall
    move $t1, $v0
    
    mul $s0, $t0, $t1
    move $a0, $s0
    li $v0, 1
    syscall
    
       
    li $v0, 10
    syscall

 

 

 

 

 

 

3. 풀이


숫자를 입력받기 위해서는 system call code 5번을 사용하면 됩니다. system call 5를 호출해 값을 입력받은 후 move를 사용해 값을 t0레지스터에 복사해주세요. 숫자를 하나 더 입력받아야 하므로 다시 system call 5를 호출한 후 t1레지스터에 값을 복사해주세요. 

 

 

li $v0, 5
syscall
move $t0, $v0

li $v0, 5
syscall
move $t1, $v0

 

 

곱셈에 사용되는 opcode는 mul입니다. 'mul $s0, $t0, $t1'은 $t0 × $t1의 값을 $s0에 저장해준다는 의미입니다.

 

 

mul $s0, $t0, $t1  # $s0=$t0*$t1

 

 

곱셈을 수행한 후 a0 레지스터에 값을 복사해주신 후 system call 1을 호출해 값을 출력해주세요.

 

 

move $a0, $s0
li $v0, 1
syscall

 

 

출력을 마치셨다면 마지막으로 코드가 끝났다는 것을 알려주어야 합니다. 이는 system call code 10번을 호출하면 됩니다.

 

 

li $v0, 10
syscall

 

4. c++ 코드로 표현


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

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(){
	
    int A=0;
    int B=0;
    
    scanf("%d", &A);
    scanf("%d", &B);
    printf("%d", A*B);
}