目次

データ操作

 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)

目次

inserted by FC2 system