使用常量命名Forth中的硬件地址

时间:2016-06-05 11:55:20

标签: forth gforth

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

<Window x:Class="Db.MessageWithProgressBar"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:Db"
    mc:Ignorable="d"
    Title="DB Processing" Height="150" Width="300" Background="{DynamicResource {x:Static SystemColors.GradientInactiveCaptionBrushKey}}">
<Window.Resources>
    <local:currentStepToProgressValue x:Key="stepToProgress"/>
</Window.Resources>
<Grid DataContext="{Binding RelativeSource={RelativeSource AncestorType=Window}}">
    <Grid.RowDefinitions>
        <RowDefinition Height="60"/>
        <RowDefinition Height="60"/>
    </Grid.RowDefinitions>
    <Grid Grid.Row="0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Label Name="title" Content="Please wait while processing.." FontSize="17.333"/>
    </Grid>
    <Grid Grid.Row="1" Margin="0,0,0,20">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <ProgressBar Name="progress" IsIndeterminate="True" Value="{Binding CurrentStep, Converter={StaticResource stepToProgress}}" />
    </Grid>
</Grid>

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

  

SHUTTER OPEN

这是我的错误:

    HEX
    FFFF3E27 CONSTANT SHUTTER 
    DECIMAL

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

我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

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