반응형
Qtspim에서 동작하는 Assembly 프로그램 작성하기
1. 정수 타입의 변수 a, c, e를 선언하고, a를 4, c를 3, e를 2로 초기화한 뒤, a-c+e를 구하여 출력하는 프로그램을 작성하시오.
.data
a: .word 4
c: .word 3
e: .word 2
.text
main:
lw $t0, a
lw $t1, c
sub $s0, $t0, $t1
lw $t2, e
add $s1, $s0, $t2
move $a0, $s1
li $v0, 1
syscall
li $v0, 10
syscall
2. 사용자로부터 변수 a, c에 입력을 받아 저장하고, 입력받은 두 수의 몫과 나머지를 출력하는 프로그램을 작성하시오. (입력받는 정수는 반드시 변수형)
.data
a: .word 0
c: .word 0
newline: .asciiz "\n"
.text
main:
# a 입력받기
li $v0, 5
syscall
sw $v0, a # store word
# c 입력받기
li $v0, 5
syscall
sw $v0, c
lw $t0, a # load word
lw $t1, c
div $t0, $t1 # $t0/$t1
mflo $s0 # 몫
mfhi $s1 # 나머지
# print 몫
move $a0, $s0
li $v0, 1
syscall
# print newline
li $v0, 4
la $a0, newline
syscall
# print 나머지
move $a0, $s1
li $v0, 1
syscall
# 프로그램 종료
li $v0, 10
syscall
3. 사용자로부터 임의의 양의 정수 두 개를 입력받고, 입력받은 두 개의 정수 중 큰 값을 출력하는 프로그램을 작성하시오.
예시) 입력 : 5 7 / 출력 : 7
입력 : 6 4 / 출력 : 6
.data
a: .word 0
c: .word 0
in_msg: .asciiz "입력 : "
out_msg: .asciiz "출력 : "
.text
.globl main
main:
li $v0, 4
la $a0, in_msg
syscall
# 입력 받은 값을 변수에 저장
li $v0, 5
syscall
sw $v0, a
li $v0, 5
syscall
sw $v0, c
# 변수값 다시 불러오기
lw $t0, a
lw $t1, c
li $v0, 4
la $a0, out_msg
syscall
slt $s0, $t0, $t1 # 숫자 크기 비교 ($t0<$t1이면 1을, $t0>$t1이면 0을 $s0레지스터에 저장)
beq $s0, 1, function # $s0==1인지 판단, 1이면 function으로 이동
move $a0, $t0
li $v0, 1
syscall
li $v0, 10
syscall
function:
# $t0 < $t1
move $a0, $t1
li $v0, 1
syscall
li $v0, 10
syscall
4. 사용자로부터 양의 정수 하나를 입력받고, 이 정수보다 작은 정수 중 가장 큰 값 4개를 내림차순으로 출력하는 반복문을 작성하시오. (입력값은 5 이상)
예시) 입력 : 10 / 출력 : 9 8 7 6
.data
a: .word 0
i: .word 1
space : .asciiz " "
in_msg: .asciiz "입력 : "
out_msg: .asciiz "출력 : "
.text
main:
li $v0, 4
la $a0, in_msg
syscall
li $v0, 5
syscall
sw $v0, a
# 루프에 들어가기 전 데이터 영역에서 정의해준 변수들을 레지스터에 로드
lw $t0, i
lw $t1, a
la $s1, space
li $v0, 4
la $a0, out_msg
syscall
loop:
sub $s0, $t1, $t0 # 입력받은 값 - 1
move $a0, $s0
li $v0, 1
syscall
add $t0, $t0, 1 # i=i+1
beq $t0, 5, end # i==5 이면 반복문 종료
move $a0, $s1
li $v0, 4
syscall
j loop # loop 시작점으로 돌아감
end:
li $v0, 10
syscall
반응형
'Schoolwork > 컴퓨터구조론' 카테고리의 다른 글
MIPS programming assignment #3 (0) | 2022.01.01 |
---|---|
MIPS programming assignment #2 (0) | 2022.01.01 |
MIPS registers (0) | 2021.12.26 |
PC 부품 기능과 PC 조립 단계 (0) | 2021.12.20 |