石原 博の覚書

電子工作に関する日々の覚書を記載します

FlashForthの注意点

2021-10-17 09:17:54 | 日記

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は逆なのだろうか。

 



最新の画像もっと見る

コメントを投稿