Post List

[Assembly Language] 정수 연산 프로그램(SPARC) 곱셉/나눗셈 서브루틴 활용


[Assembly Language] 정수 연산 프로그램(SPARC)


다음 정수 연산을 수행하는 SPARC 어셈블리 프로그램을 작성하시오.
◼ result = 𝐴 + 𝐵 × 𝐶 − 𝐷 × 16 ÷ 𝐸 𝑚𝑜𝑑 𝐹 ◼
‘mod’ 는 나머지 연산 (C 언어의 경우 % 연산자)

1. 소스코드 : 

        .global main
main:   save %sp, -96, %sp
        add %i0, %i1, %l0       ! 덧셈 연산 실시 후 l0에 저장(A+B)
        sub %i2, %i3, %l1       ! 뺄셈 연산 실시 후 l1에 저장(C-D)
        mov %l1, %o0            ! 곱셈 연산을 위한 이동
        mov 16, %o1             ! 곱셈 연산을 위해 o1에 16 이동
        call .mul                   ! 곱셈 서브루틴 호출(C-D)*16
        nop
        mov 16, %o1             ! no operation

        mov %l0, %o1           ! 곱셈 연산을 위해 l0값을 o1로 이동
        call .mul                   ! 곱셈 연산(A+B)*(C-D)*16
        nop
        mov %i4, %o1            ! 나눗셈 연산을 위한 이동
        call .div                    ! 나눗셈 서브루틴 호출((A+B)*(C-D)*16))/E
        nop
        mov %i5, %o1
        call .rem                   ! mod 서브루틴 호출(((A+B)*(C-D)*16))/E)%F
        nop
        mov %o0, %i0            ! 연산결과가 저장되어있는 o0에서 i0로 이동
        ret
        restore

댓글