2007/09/24

GCD in TOY86

為了測試 TOY86 assembler 而寫的 gcd procedure。這個程式會在 TOY86 的 stdout 上顯示運算過程,為此它吃的引數是兩個 WORDs。檔案已經放在 TOY86_Rev/examples 目錄下。

        ldw     R1, stdio
        stw     R1, stdio
        ldw     R2, stdio
        stw     R2, stdio
        pushw   R2
        pushw   R1
        call    gcd
        popw    R0
        popw    R0
        stw     RA, stdio

gcd PROC
        enter

        ldw     RA, BP + 8
        ldw     RB, BP + 10
        shl     RD, RA, 16
        orw     RD, RD, RB
        st      RD, stdio

        addw    R0, RB, R0
        jz      end

        subw    RC, RA, RB
        js      swap
        pushw   RB
        pushw   RC
        jmp     rec
swap    pushw   RA
        pushw   RB
rec     call    gcd
        popw    R0
        popw    R0

end     leave
        ret
ENDP

看這個程式跑過大一點的數字,就會了解 tail recursion elimination 的重要 XD。

中間 toy86asm 一度漏看一行,但沒改任何 code 就突然正常了。令人有點不安 XD。

--
希望只是人為操作疏失 XD。

Labels: