SPARC 어셈블리 언어- 화씨온도를 섭씨온도로 바꾸기
728x90
SMALL
        .section    ".data"
a:      .double     0r5.0
b:      .double     0r9.0
c:      .double     0r32.0

        .section    ".text"
fmtp1:  .asciz  "화씨온도를 입력하시오: "
fmts:   .asciz  "%lf"
fmtp2:  .asciz  "섭씨온도는 %f입니다.\n"

        .align 4
        .global main, printf, scanf
main:   save    %sp,    -(92+8)&-8,    %sp
        set     fmtp1,  %o0
        call    printf
        nop
        set     fmts,   %o0
        add     %fp,    -8,     %o1
        call    scanf
        nop

        ld     [%fp-8],   %o0
        ld     [%fp-4],   %o1
        call    ftoc
        nop

        st     %f0,    [%fp-16]
        st     %f1,    [%fp-12]
        set     fmtp2,  %o0
        ld      [%fp-16],   %o1
        ld      [%fp-12],   %o2
        call    printf
        nop

        mov     1,      %g1
        ta      0

ftoc:   save    %sp,    -(92+8)&-8, %sp
        st     %i0,    [%fp-8]
        st     %i1,    [%fp-4]
        ld     [%fp-8],    %f0
        ld     [%fp-4],    %f1
        set     a,      %l0       ! 5.0
        set     b,      %l1       ! 9.0
        set     c,      %l2       ! 32.0
        ld      [%l0],  %f2
        ld      [%l0+4],%f3
        ld      [%l1],  %f4
        ld      [%l1+4],%f5
        ld      [%l2],  %f6
        ld      [%l2+4],%f7
        fdivd   %f2,    %f4,    %f2 ! 5.0/9.0
        fsubd   %f0,    %f6,    %f0 ! f - 32.0
        fmuld   %f0,    %f2,    %f0 ! 결과 값을 %f0 global register에 저장
        ret
        restore
728x90
LIST