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

[MIPS] MIPS programming 과제 - array 사용하기

by Ruas 2021. 11. 12.
728x90

 

오늘은 MIPS를 사용하여 array에 parameter를 대입하는 코드를 설명드리겠습니다.

 

해당 포스트를 진행하기에 앞서 기본적인 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

 

Q. 아래 코드를 참조하여 변수 d의 값을 1씩 감소시키면서 배열 arr에 반복 대입하는 프로그램을 작성하시오.
int c = 0;
int d = 10;
int arr[3];

for(c = 0; c < 3; c++){
	arr[c] = d--;
}

 

이번 문제는 배열을 선언하고, 배열에 반복하여 parameter를 저장하는 프로그램입니다.

 

사용자의 입력을 받는 조건은 없으므로, 코드에서 주어진 값으로 변수를 초기화 합니다.

 

    .data
c: .word 0
d: .word 10
arr: .word 0, 0, 0 
    .text

 

loop에서 초기 횟수를 담당할 변수 c를 0으로, d의 시작 숫자를 10으로 셋팅합니다.

위의 코드에서 반복 횟수를 3으로 지정해놨기 때문에, array를 3개의 결과 값을 저장할 수 있도록 선언합니다.

 

main:
    lw $t0, c
    lw $t1, d

    la $s0, arr 

    j loop

 

별도의 입력이 없는 문제이므로

바로 레지스터에 변수 값을 전달합니다.

 

이 때, array 역시 레지스터로 전달하며, loop 함수로 jump 하여 나머지 연산을 수행합니다.

 

loop:
    sw $t1, ($s0)
    
    addi $t1, $t1, -1
    addi $t0, $t0, 1
    addi $s0, $s0, 4 

    bne $t0, 3, loop

    li $v0, 10
    syscall

 

loop 함수에서는 array 에 저장할 3개의 결과 값을 연산하고, arr에 저장하는 역할을 합니다.

 

addi $t1, $t1, -1 를 사용하여 변수 d의 값을 1씩 감소시킵니다. (d--)

다음으로 addi $t0, $t0, 1를 사용하여 c의 값을 1씩 증가시킵니다. (c++)

 

반복문에 대한 변수 처리가 완료되면, addi $s0, $s0, 4를 사용하여 array에 d 값을 저장합니다.

이 때, addi $s0, $t1, 4 는 arr에 감소된 결과 값 $t1을 4 byte 간격으로 저장하라는 의미입니다.

 

이런 반복문을 3번 반복하며(bne $t0, 3, loop)

c의 값이 3에 도달하면 프로그램을 종료합니다.

 

 

 

 

아래는 전체 코드 입니다.

 

    .data
c: .word 0
d: .word 10
arr: .word 0, 0, 0 
    .text

main:
    lw $t0, c
    lw $t1, d
    #변수 c,d 를 레지스터로 전송

    la $s0, arr 

    j loop #jump to the loop

loop:
    sw $t1, ($s0) #arr(c)에 삽입
    
    addi $t1, $t1, -1 #d-1
    addi $t0, $t0, 1 #c++
    #addi $s0, $s0, 4 #array에서 4btye 뒤에 저장하도록 위치 이동

    bne $t0, 3, loop #3번 반복할 때 까지 loop 함수 반복

    li $v0, 10
    syscall
    #종료

이상입니다.

728x90

댓글