소수 판별 프로그램(SPARC)
◼ 주어진 양의 정수가 소수(prime number) 인지 검사하는 프로그램을 작성하시오.
◼ 프로그램이 실행되면 바로 사용자의 입력을 기다리는 상태가 되어야 함
(즉, scanf 함수 호출)
◼ 사용자가 양의 정수를 입력하게 되면 소수(prime number) 여부를
판별하여 소수인 경우 Yes, 아닌경우 No 를 출력함
◼ 한번 판단이 끝난 이후에는 프로그램을 종료하지 말고 사용자로부터
반복해서 입력을 받고 계속 소수 여부를 판별할 것
◼ 사용자가 숫자 0 을 입력하는 경우 프로그램을 종료
1. 소스코드 :
.text
.global main
main: save %sp, -96, %sp
loop1: set str1, %o0
sethi %hi(val), %o1
call scanf
or %o1, %lo(val), %o1
set val, %l0
ld[%l0], %l0
cmp %l0, 0
be finish
cmp %l0, 1 ! 만약 1이 입력된다면
be nfound
mov 2, %l1 ! loop2는 i = 2부터 시작.
loop2: cmp %l1, %l0
be found
or %g0, %l0, %o0
call .urem
or %g0, %l1, %o1
cmp %o0, 0 ! 나머지 연산 했을때 나누어 떨어졌다면
be nfound ! 이 숫자는 소수가 아니다.
inc %l1
ba loop2
nop ! 루프 다시.
found: sethi %hi(stry), %o0
call printf
or %o0, %lo(stry),%o0
ba loop1
nop ! 찾았을때 출력
nfound: sethi %hi(strn), %o0
call printf
or %o0, %lo(strn), %o0
ba loop1
nop
finish: ret
restore
.data
str1: .asciz "%d"
stry: .asciz "Yes\n"
strn: .asciz "No\n"
.align 4
val: .word 0
댓글
댓글 쓰기