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: TOY86


<< 回到主頁