본문 바로가기
소프트웨어/컴퓨터 구조(MIPS)

[MIPS] MIPS programming 과제 - 정수의 덧셈 뺄셈

by Ruas 2021. 10. 23.
728x90

 

MIPS에서 사용하는 언어는 Assembly Language(어셈블리어)로, 기계어 보다 한 단계 위의 언어입니다.

기계어와 동일하게 Low level language로 분류되며, asm으로 줄여 표현합니다.

확장자는 .asm으로 동일하며, QtSpim 환경에서 프로그래밍을 진행합니다.

 

진행하기에 앞서, 기본적인 opcode 학습이 필요합니다.

 

[MIPS] MIPS programming 기본

 

[MIPS] MIPS programming 기본

opcode Artithmetic Instructions opcode 사용 방법 의미 add add $s1, $t0, $t1 $s1 = $t0 + $t1 sub sub $s1, $t0, $t1 $s1 = $t0 - $t1 mul mul $s1, $t0, $t1 $s1 = $t0 * $t1 mult mult $t0, $t1 Lo, Hi =..

ruas-coding.tistory.com

 

1. 정수 타입의 변수 a, c, e를 선언하고 a=4, c=3, e=2 일 때, a-c+e를 구하여 출력하는 프로그램을 작성하시오.

제일 먼저 변수를 지정해야 합니다.

문제에서 변수 a, c, e의 값을 각각 정하였기 때문에 별도로 사용자의 입력을 받는 부분은 구현하지 않겠습니다.

 

MIPS에서 변수를 선언하는 방법은 '.data' 를 사용하면 됩니다.

 

    .data
a: .word 4
c: .word 3
e: .word 2
    .text

 

a: .word 는 a라는 변수를 생성하겠다는 것이며,뒤의 4는 생성한 a라는 변수의 값을 4로 저장함을 의미합니다.

 

main:
    lw $t1, a
    lw $t2, c
    lw $t3, e
    sub $s1, $t1, $t2
    add $s2, $s1, $t3

다음에는 main 함수를 구성합니다.

어셈블리 언어에서는 변수를 선언했다고 해서 바로 사용할 수 있는 것이 아닙니다.

선언된 변수를 레지스터로 이동하는 과정이 필요합니다.

 

lw $t1, a 의 역할이 이것입니다.

"변수 a에 저장된 값을 레지스터 t1에 임시로 저장하겠다" 라는 의미입니다.

 

세 개의 변수를 모두 레지스터에 임시로 저장한 다음, 연산을 위한 opcode를 활용합니다.

 

'-' 연산을 위한 opcode 는 <sub $s1, $t1, $t2> 입니다.

s1 = t1 - t2 라고 보면 됩니다. 

해당 연산에서 a-c 연산을 완료하고 '+' 연산으로 넘어갑니다.

 

'+' 연산을 위한 opcode 는 <add $s1, $t1, $t2> 입니다.

여기서 우리는 위의 '-' 연산에서 이어서 진행하기 때문에

add $s2, $s1, $t3 를 사용하게 됩니다.

 

    move $a0, $s2
    li $v0, 1
    syscall
    
    li $v0, 10
    syscall

 

연산을 완료하면 레지스터 s2에 저장된 값을 a0로 이동시켜 저장하고,

int 출력을 위한 syscall 1를 사용하여 결과 값을 출력합니다.

 

결과 출력 이후에는 exit를 위한 syscall 10을 사용하여 프로그램을 종료합니다.

 

 

 

 

아래는 전체코드 입니다.

    .data
a: .word 4
c: .word 3
e: .word 2
    .text

main:
    lw $t1, a
    lw $t2, c
    lw $t3, e
    sub $s1, $t1, $t2
    add $s2, $s1, $t3

    move $a0, $s2
    li $v0, 1
    syscall
    
    li $v0, 10
    syscall

이상입니다.

728x90

댓글