目次
前
データ操作
Forthは、データ操作に関しては、ノウハウがあり
これを知っているかどうかで、ワードの処理を簡単
になるか、複雑になるのか分かれます。
配列を中心にノウハウを見ていきます。
配列宣言
配列は、バイト、ワード、ロングワードにより
扱い方が異なりますが、基本はワードのallotを
使います。
variable LTBL 8 allot
AmForthは、ワードを16ビットで扱うので、allotによる
アサインでは、バイトごとになります。
配列アクセス
LTBLをバイト配列で確保した場合、データセットと
参照は、次のように操作。
配列名の後に添字をつけて加算し、バイトアクセスの
ワードc@、c!を使います。
値をセットするには、次のようにタイプ。
10 LTBL 0 + c!
11 LTBL 1 + c!
12 LTBL 2 + c!
13 LTBL 3 + c!
14 LTBL 4 + c!
15 LTBL 5 + c!
16 LTBL 6 + c!
17 LTBL 7 + c!
参照では、次のようにタイプしていけばOK。
LTBL 0 + c@ .
LTBL 1 + c@ .
LTBL 2 + c@ .
LTBL 3 + c@ .
LTBL 4 + c@ .
LTBL 5 + c@ .
LTBL 6 + c@ .
LTBL 7 + c@ .
配列は、ベースアドレスはLTBLにして
先頭から離れているのかを指定。
(この距離をディスプレースメントと呼びます)
配列の内容表示
配列の内容を確認したければ、次のワードで
対応すればよいはず。
: showltbl ." LTBL " 8 0 do i LTBL + c@ . loop ;
実際に操作してみると、以下。
LTBLが定義したなら、RTBLを用意し
内容を表示するワードを定義して
使ってみます。
variable RTBL 8 allot
: showrtbl ." RTBL " 8 0 do i LTBL + c@ . loop ;
配列を利用すると、テーブル参照で
センサーデータで値を取り出して
利用できます。
variableでワードを定義すると、FORTHが用意して
いる領域に、ブロックを確保。
文字と文字列の扱い
FORTHでは、ワードとスタックは、ワード単位(16ビットか32ビット)
で扱うため、ASCIIで処理する文字と文字列には、変換のカラクリを
用意して対応。
文字の扱いを、次のワードで見ていきます。
$41 emit
$41は、スタックにワードで保存されます。
ワードは、16ビットあるいは32ビットなので
スタックには、$0041として保存されます。
ワードの emit は、スタックにある$0041を
$41だけ取得して、数値を文字に変換して
出力。同時にスタック(リターンスタック)
にあるワードを消去。
実際にはVirtual Machineを利用して、2つの
スタック(パラメータ、リターン)の中にある
データを処理。
この処理に、データ消去も含まれます。
文字列を扱うワードは、 ." 。
スペースを入れた後に、文字を連ねていき
デリミタを " として並べます。
この仕組みは、ダイレクトモードでは利用できず
ワードを定義して、コンパイルが成功したときに
FORTHの辞書の中に文字列として格納されます。
(under construction)
目次
前