3

我在使用以下 Forth 代码时遇到了一些问题:

    HEX
    FFFF3E27 CONSTANT SHUTTER 
    DECIMAL

    : OPEN 1 SWAP ! ;
    : CLOSE 0 SWAP ! ;

现在我想将“1”写入快门地址:

快门打开

这是我的错误:

:15: Invalid memory address
SHUTTER >>>OPEN<<<
Backtrace:
$10D436398 ! 

我错过了什么吗?

4

1 回答 1

3

代码基本上是正确的。我相信问题可能出在地址本身以及存储在其中的内容上。

具体来说,!存储一个单元格,它是堆栈上单词的正常大小。鉴于地址大小,我猜它是 32 位。

现在,问题是地址是奇数。许多硬件架构不允许将 32 位字存储在奇数地址或除可被 4 整除的地址之外的任何地址。

如果要存储单个字节,请使用C!(或 Forth 实现中的某些等效项)。

于 2016-07-26T02:12:25.273 回答