Provided by: manpages-ja_0.5.0.0.20110915-1_all bug

GASP の文法
       (スペースかタブで、改行ではない) 空白で、 1 行が 3 つの部分に分かれてい
       る時は特に重要である。 空白はいくつあってもよい。

       · 最初の部分には、 必須ではない "ラベル" が必ず左寄せ (行頭には空白がな
       い) で書かれる。 ラベルの後ろには、必須ではないコロンが付いている。

       · いくつかの空白の後に 2 番目の部分があって、 そこには gaspas  指示
       子を含む。

       · 行中のそれ以降の部分は指示子の引数であり、 コンマか空白で区切られてい
       る。

   特別な文法の印
       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

          ADDSYMSUBSYM
       は、不明な値のアセンブラシンボルであり CONST は定数である。

       gasp の数値式は、C のルールにとても良く似ている。  優先順位を変える時に
       括弧を使える;  そうでなければ、数値的な基本としては、次に記すような優先
       順位になる:

       · 1. 一つの引数 `+' (同一の場合),  `-'  (算術的に反対の場合),  あるいは
       `~' (ビット否定)

       · 2. `*' (乗算) と `/' (除算)。 引数は、絶対式でなくてはならない。

       · 3.  `+' (加算) と `-' (減算)。 少なくとも一つの項は絶対式でなくてはな
       らない。

       · 4. `&' (ビットの AND)。両方の項は、絶対式でなくてはならない。

       · 5. `|' (ビットの OR) と、`~' (ビットの XOR。C における `^')。  両方の
       引数は、絶対式でなくてはならない。

   文字列の基本
       これらの関数を使って、  文字列 (gasp ステートメントの項にある) を計算で
       きる:

       .LEN("STR")
              文字列  "STR"   の長さを絶対式として計算する。   例えば、`.RES.B
              .LEN("sample")' は、 メモリの 6 byte を予約する。

       .INSTR("STR", SEG , IX)
              STR  の中で、位置  IX  より後ろの最初に出現する  SEG を探す。 も
              し、SEGSTR 中で、位置 IX より後ろになければ、 結果は -1 にな
              る。

       .SUBSTR("STR", START, LEN)
              STRSTART から始まって LEN byte まで伸びている部分文字列。

別のマクロ文法
       --alternate オプションが指定されている時、 別のマクロ文法が gasp によっ
       て使われる。 この文法は、Phar Lap マクロアセンブラを想い出させるが、 こ
       れは、Phar  Lap マクロのエミュレーションや、 それと似ているアセンブラで
       あるという事を意味してはいない。 特に、gasp は DB や IRP のような指示子
       をサポートしていない。

       · プリプロセッサ指示子を    `.'    ドットを前に置かずに使える。    例え
       ば、`SDATA' と .SDATA' を同じ効果のものとして書ける。

       · LOCAL が有効になっている。

       · 文字列の境界を、 "STRING", 'STRING', <STRING> のように書ける。

       · 文字列の中のどんな文字も文字通りに取り込むために、  (たとえその文字が
       他に特別な意味を持っていたとしても)   `!'  を文字の前につけられる。例え
       ば、`"hello !"world!""

       · %EXPREXPR 式の数値を求めるために書くことが出来、 その結果は文字列
       として使用できる。

例
       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> によっ
       て書かれた。