학교 과제
SPARC 어셈블리 언어- 윤년과 평년
akinakamori
2022. 12. 2. 23:13
728x90
SMALL
fmt1: .asciz "년도를 입력하세요(종료:음수) "
fmts: .asciz "%d"
fmt2: .asciz "%d 윤년입니다.\n"
fmt3: .asciz "%d 평년입니다.\n"
.align 4
.global main
main: save %sp, -96, %sp
loop: set fmt1, %o0
call printf
nop
set fmts, %o0
call scanf
add %fp, -4, %o1
nop
ld [%fp-4], %l0 ! %l0가 입력받은 해
ba test
nop
test: cmp %l0, 0
bl Exit ! 음수일 경우 종료
mov %l0, %o0 ! 400으로 나누어지는 경우 윤년
mov 400, %o1
call .rem
nop
mov %o0, %l1
cmp %l1, 0
bne test_py ! 나머지 0이아니면 평년인지 검사
nop
set fmt2, %o0
call printf
mov %l0, %o1
ba loop
nop
yoon: set fmt2, %o0
call printf
mov %l0, %o1
ba loop
nop
test_py:mov %l0, %o0 ! 4로 나누어지는 경우
mov 4, %o1
call .rem
nop
mov %o0, %l2
cmp %l2, 0 ! 여기서 나머지 있으면 평년, 없어도 100으로 나눠지면 평년
be divide ! 나머지 없으면 100으로 나눠 평년인지 검사
nop
set fmt3, %o0 ! 4로 안나눠지면 평년, 실행과 년도 프린트
call printf
mov %l0, %o1
ba loop
nop
divide: mov %l0, %o0 ! 4로 나누어지는 경우에서 그거 100으로 나눠지면 평년, 아니면 윤년
mov 100, %o1
call .rem
nop
cmp %o0, 0
bne yoon ! 100으로 나눠지지지 않으면 윤년
nop
set fmt3, %o0 ! 100으로 나눠지면 밑의 평년입니다, 실행과 년도 프린트
call printf
mov %l0, %o1
ba loop
nop
Exit: ret
restore
728x90
LIST