FlashForthのソースコードをつらつら眺めていると、思わぬ間違いを発見。
FlashForthでは、tosはhigher addressに保存されている。コメントなので動作上は問題ないけれど間違っている。
---ff-xc8.asm---
1529c1529
< ; the lower address will appear on top of stack
---
> ; the higher address will appear on top of stack
1543,1544c1543,1544
< ; SWAP OVER ! CELL+ ! ;
< ; the top of stack is stored at the lower adrs
---
> ; SWAP OVER CELL+ ! ! ;
> ; the top of stack is stored at the higher adrs
---ff-pic18.asm---
3458c3458
< ; the lower address will appear on top of stack
---
> ; the higher address will appear on top of stack
3470,3471c3470,3471
< ; SWAP OVER ! CELL+ ! ;
< ; the top of stack is stored at the lower adrs
---
> ; SWAP OVER CE+++ ! ! ;
> ; the top of stack is stored at the higher adrs
F83やGForthを含め多くのForthではstack topは lower addressに保存される。
Forth Standard(https://forth-standard.org/standard/core/TwoStore)も以下のように記載されている。
------
2!
( x1 x2 a-addr -- )
Store the cell pair x1 x2 at a-addr, with x2 at a-addr and x1 at the next consecutive cell. It is equivalent to the sequence SWAP OVER ! CELL+ !.
--------------------
なぜFlashForthは逆なのだろうか。
※コメント投稿者のブログIDはブログ作成者のみに通知されます