Простой код SPARC для печати printf (вывод переменных в стеке) - PullRequest
1 голос
/ 23 октября 2011
fmt0:   
    .asciz "%d\n"
    .align 4

    .global main, printf

main:
    save %sp, -76 & -8, %sp
    mov 5, %l0
    st %l0, [%fp-4]

    mov 7, %l1
    st %l1, [%fp-8]

    add %l0, %l1, %l2
    st %l2, [%fp-12]

    clr %l3
    clr %l4
    clr %l5
    mov 1, %l3
    mov 3, %l4
mov 0, %l5

test:
    cmp %l3, %l4
    bg exit
    sub %l5, 4, %l5
    set fmt0, %o0
    ld [%fp + %l5], %o1
    call printf
    inc %l3
    ba test
    nop

exit:
    mov 1, %g1
    ta 0

ожидаемое значение
5
7
12

Но значение результата было
5
5
12

Что не так с моим кодом?
Заранее спасибо

1 Ответ

2 голосов
/ 23 октября 2011

Ваш кадр стека слишком мал.С тремя автоматическими переменными размером в одно слово вам нужен кадр стека из 26 слов.Фрейм стека в вашей программе составляет всего 20 слов.

...