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
'학교 과제' 카테고리의 다른 글
SPARC 어셈블리 언어- 화씨온도를 섭씨온도로 바꾸기 (3) | 2022.12.02 |
---|---|
SPARC 어셈블리 언어- 최대공약수 (2) | 2022.12.02 |
알고리즘 분석 - 트리 (0) | 2021.11.24 |
SPARC 어셈블리 언어- 문자열 출력 (2) | 2021.10.09 |