SPARC 어셈블리 언어- 최대공약수
728x90
SMALL
fmt1:   .asciz    "두 정수를 입력하세요: "
fmts:   .asciz    "%d"
fmtp:   .asciz    "최대공약수는 %d입니다.\n"
        .align    4
        
        .global main
main:   save    %sp,     -96,   %sp
        set     fmt1,     %o0
        call    printf
        nop
        set     fmts,   %o0
        call    scanf
        add     %fp,    -4,     %o1
        nop
        ld      [%fp-4],%l0         ! %l0가 입력받은 첫 수 = a
        nop

        set     fmts,   %o0
        call    scanf
        add     %fp,    -8,     %o1
        nop
        ld      [%fp-8],%l1         ! %l0가 입력받은 두번째 수 = b
        nop
        mov     1,      %l2         ! int flag = 1

loop:   subcc   %l0,    %l1,    %g0 ! l0 - l1 = l3 = a - b
        be      flag
        nop

        subcc   %l0,    %l1,    %g0
        bg      subab               ! a > b
        nop
                                    ! 밑줄부터 else
        sub     %l1,    %l0,    %l3 ! l1 - l0 = r = b - a
        mov     %l0,    %l1         ! b = a
        mov     %l3,    %l0         ! a = r
        ba      loop
        nop

subab:  sub     %l0,    %l1,    %l3 ! l0 - l1 = r = a - b
        mov     %l1,    %l0         ! a = b
        mov     %l3,    %l1         ! b = r
        mov     0,      %l2         ! flag = 0
        ba      loop
        nop

flag:   cmp     %l2,    1
        be      print_a
        nop
        set     fmtp,   %o0         ! print_b
        mov     %l1,    %o1
        call    printf
        nop
        ret
        restore

print_a:set     fmtp,   %o0         ! print_a
        mov     %l0,    %o1
        call    printf
        nop
        ret
        restore
728x90
LIST