3

ねえ、私はアセンブリを学び始めたばかりで、ここに私が理解していないものがあります...

スタック セグメント宣言では、次のようなものを使用します

     TOS LABEL WORD

TOS がスタックの一番上を参照していることは知っていますが、それに続くものとその用途がわかりません。助けていただければ幸いです。

4

1 に答える 1

3

ここで行っているのは、スタックのトップのアドレスを含むラベル (スタック ポインター (SP)) を定義することです。ラベルには常に、最後の値がプッシュされた場所のアドレスが含まれます。

  • PUSH 操作を呼び出すと、レジスタまたはメモリ位置の内容がスタックにコピーされ、SP が減分されます。

  • POP を呼び出すと、SP が指している場所 (TOS) の内容が、指定したレジスタまたはメモリの場所にコピーされ、SP がインクリメントされます。

定数または変数のアドレスにラベルを付けると、メモリ内のその場所を 16 進数で書き込むよりも簡単になります。

編集

PUSH で減少する理由は、新しい値がプッシュされるたびにスタックがメモリ内で下方に成長するためです。したがって、本を箱に入れることを考えた場合、箱の底の位置は 100 であり、本を 100 番目のメモリ ロケーションに追加します。次に別の本を追加すると、それはメモリ ロケーション 99 になります。メモリ ロケーション 99 は TOS になります。

EDIT 2 一部のアセンブラは LABEL をディレクティブとして使用しますが、使用しないものもあります。したがって、この場合、TOS は「ラベル」であり、WORD はデータ型です。

したがって、次のことができます。

label1 LABEL WORD
.
.;code
.

または他のアセンブラ(私が慣れているもの)では、単純に:

label1:
.
.
.

最初は、これをどのコンテキストで使用しているのかわかりませんでした。私が使用したリソースは次のとおりです

于 2011-05-07T13:28:06.523 に答える