0

私は現在、「SPARC Architecture, Assembly Language Programming, and C. Second Edition」という本を読んでいます。本の中で、特定のコマンドを理解できない、または理解できない場所にたどり着きました。

 define(loc, 0)
 define(sto, 'loc:  44 $1 define('loc', eval(loc+2))')

問題は、私は最初の行を理解しています。しかし、2行目の2番目の引数が本当にわかりません。本の説明も役に立ちません。

本から:

ここでは、値 0 を持つシンボル loc を最初に定義しました。このシンボルは、アセンブルされる命令のメモリ アドレスであるロケーション カウンタを表します。各マクロ定義は、最初に loc の現在の値を出力するように変更され、次に loc を再定義して loc に命令を格納するために必要なメモリ位置を加えたものになっています。

マクロへの引数は、数値ではなく、文字および文字列です。loc の値を再定義する際に、別の組み込みマクロ eval を使用します。eval は、算術式を表す文字列引数を取ります。eval はこの式を評価し、数値文字列の形式でその値を返します。

上記の説明は、あなたには完全に明確に聞こえるかもしれませんが、私にはそうではありません. 私が正確に理解していないのは、「loc: 44 $1 define('loc', eval(loc+2))」の部分です。

理解できない:

なぜこれは文字列なのですか?

なぜ loc がそこになければならないのですか?

44 $1 を定義した後に、別の定義「define('loc', eval(loc+2))」があるのはなぜですか?

4

1 に答える 1