
오늘은 MIPS를 사용하여 array에 parameter를 대입하는 코드를 설명드리겠습니다.
해당 포스트를 진행하기에 앞서 기본적인 opcode 학습이 필요합니다.
[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
#종료
이상입니다.
'소프트웨어 > 컴퓨터 구조(MIPS)' 카테고리의 다른 글
[MIPS] MIPS programming 과제 - N개의 별 출력하기 (0) | 2021.12.17 |
---|---|
[MIPS] MIPS programming 과제 - factorial 연산 (0) | 2021.11.16 |
[MIPS] MIPS programming 과제 - ((i + j) * 2) 연산 수행 (0) | 2021.11.11 |
[MIPS] MIPS programming 과제 - 절대 값 계산하기 (0) | 2021.11.09 |
[MIPS] MIPS programming 과제 - 연속된 정수 출력하기 (0) | 2021.11.03 |
댓글