Post List

[Assembly Language] 소수 판별 프로그램(SPARC)

소수 판별 프로그램(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


2. 프로그램 결과






댓글