Provided by:
manpages-ja_0.5.0.0.20060115-1_all 
GASP法
(スペースかタブで、改行ではない) 空白で、 1 行が 3
つの部分に分かれている時は特に重要である。 空白はいくつあってもよい。
+o 最初の部分には、 必須ではない "ラベル" が必ず左寄せ
(行頭には空白がない) で書かれる。
ラベルの後ろには、必須ではないコロンが付いている。
+o いくつかの空白の後に 2 番目の部分があって、 そこには gasp か as
指示子を含む。
+o 行中のそれ以降の部分は指示子の引数であり、
コンマか空白で区切られている。
印
gasp はいくつかの特別な印を認識する: コメントの恭Δ鯆蠅瓩襪發痢
次の行にステートメントを続けるもの、宜罎鬚修梁召離-
ャラクタと区別するもの、 テゥ好箸鮟侘呂膨樟椒灰圈爾垢襪發
(一つの特別な印としては、`@f' はマクロの定義の中のみで使われる)。
どんなソースの行でも、その後ろに付いているものはコメントかもしれない。
コメントはクォートされないコメント文字 (デフォルトでは `!')
から始まるか、エスケープされたコメント文字や 2 文字のコメント文字
(デフォルトでは、`\!' か `!!') で始まり、行末まで続く。 この 2
種類のコメント印は、取り扱いがわずかに違う :
! 1 文字のエスケープされてないコメント文字は gasp
の出力の中にアセンブラコードのコメントを生成する。 gasp
はどの様なプリプロセッサの変数 (マクロ引数や、その前に
.ASSIGNA か .ASSIGNC で定義された変数) でも計算する。
例えば、次のように始まるマクロ
.MACRO SUM FROM=0, TO=9
! \FROM \TO
は、第 1 行で呼んだマクロの値の出力を-
録して、コメントとして吐そ个后
\!
!! エスケープされたコメント文字か、2 文字のコメント文字は、
gasp のソースコメントの印である。 gasp
はアセンブラコードの出力にこのようなコメントをコピーしない。
ファイルの次の行に欺劼鯊海韻襪砲蓮2 行目の先頭に `+' を付ける。
時々、ある特定の文字列を gasp に処理させたくないことがある。 gasp
のソースから、その出力に 襪砲蓮`\('
をコピーしたい文字列の前に置ぁ `)' を後ろに置く。
例えば、アセンブラコードの出力に `\!' 文字が欲しい時は、 `\(\!)'
と書く。
プリプロセッサ変数と、その直後に続く数値の文字を分離するには、
シングルクォート (''') を書く。 例えば、`.SDATA "P'1"' は変数 P
の値と数値の 1 とを連結した文字列になる。 (`P1'
自身がプリプロセッサ変数の邑な名前なので、 `\P1'
と書いただけではこの結果は得られないだろう)
数
文字列定数を書くには、2 通りの方法がある: 全くのテ-
ストと数で示されたバイトの値である。 二重引用符 ("STR")
の間で完全な文字列は指定される。 不等号宜 (<EXPR>)
の間で絶対式として、 個々の NumericByte 値が指定される。
文字列を出力する指示子は、どんな種類のどんな命令でも、
結果を連結するのを許可する。
特定の進数での、あるいは最後の .RADIX 指示子によって現在選ばれる
どんな進数の定数でも書ける。
特定の進数で数を書くためには、パターン `S'DDD' を使う: 進数指定文字 S
の次にシングルクォートがあり、数字 DDD が続く。
進数指定文字は、.RADIXで指定でい襪發里醗戝廚垢襦
ル
gasp は英字または、`_' 、`$' から始まり、
同様に文字または数字が続いているようなシンボルやラベル名を認識でい襦
邑なシンボルは、アルファベット・`_'・`$' から始まり、
これらの文字または数字が続く。
式
結果に依存した 2 つの式がある: 結果が定数 (つまり、それらは gasp
が知らない値を含まない) となる 絶対式と、以下の形
ADDSYM+CONST-SUBSYM
__ADDSYM と SUBSYM
は、不明な値のアセンブラシンボルであり CONST は定数である。
gasp の数値式は、C のルールにとても良く似ている。
優先順位を変える時に括弧を使える;
そうでなければ、数値的な基本としては、次に気垢茲Δ瞥ダ莉膂未砲覆:
+o 1. 一つの引数 `+' (同一の場合), `-' (算術的に反対の場合), あるいは
`~' (ビット否定)
+o 2. `*' (乗算) と `/' (除算)。 引数は、絶対式でなくてはならない。
+o 3. `+' (加算) と `-' (減算)。
少なくとも一つの項は絶対式でなくてはならない。
+o 4. `&' (ビットの AND)。両方の項は、絶対式でなくてはならない。
+o 5. `|' (ビットの OR) と、`~' (ビットの XOR。C における `^')。
両方の引数は、絶対式でなくてはならない。
本
これらの関数を使って、 文字列 (gasp ステートメントの項にある)
を計算でい:
.LEN("STR")
文字列 "STR" の長さを絶対式として計算する。 例えば、`.RES.B
.LEN("sample")' は、 メモリの 6 byte を予約する。
.INSTR("STR", SEG , IX)
STR の中で、位置 IX より後ろの最初に出現する SEG を探す。
もし、SEG が STR 中で、位置 IX より後ろになければ、 結果は -1
になる。
.SUBSTR("STR", START, LEN)
STR の START から始まって LEN byte まで燭咾討い詆分文字列。
法
--alternate オプションが指定されている時、 別のマクロ文法が gasp
によって使われる。 この文法は、Phar Lap
マクロアセンブラを想い出させるが、 これは、Phar Lap
マクロのエミュレーションや、
それと似ているアセンブラであるという事を意味してはいない。 特に、gasp
は DB や IRP のような指示子をサポートしていない。
+o プリプロセッサ指示子を `.' ドットを前に置かずに使える。
例えば、`SDATA' と .SDATA' を同じ効果のものとして書ける。
+o LOCAL が邑になっている。
+o 文字列の恭Δ髻 "STRING", 'STRING', <STRING> のように書ける。
+o 文字列の中のどんな文字も文字通りに取り込むために、
(たとえその文字が他に特別な意味を持っていたとしても) `!'
を文字の前につけられる。例えば、`"hello !"world!""
+o %EXPR を EXPR 式の数値を求めるために書くことが出来、
その結果は文字列として使用でい襦
例
gasp に
.MACRO saveregs from=8 to=14
count .ASSIGNA \from
! save r\from..r\to
.AWHILE \&count LE \to
mov r\&count,@-sp
count .ASSIGNA \&count + 1
.AENDW
.ENDM
saveregs from=12
bar: mov #H'dead+10,r0
foo .SDATAC "hello"<10>
.END
を与えると、下の GNU as のコードを生成する:
! save r12..r14
mov r12,@-sp
mov r13,@-sp
mov r14,@-sp
bar: mov #57005+10,r0
foo: .byte 6,104,101,108,108,111,10
目
as(1)
意
バグは <bug-gnu-utils@gnu.org> と <hjl@lucon.org>
にレポートして欲しい。
man ページは Ragnar Hojland Espinosa <ragnar@ragnar-hojland.com>
によって書かれた。