0

次のコードを検討してください。

data segment
    v1 dw 1, 2, 3, 4, 5, 6
    v2 dw 10, 5, 4, 3, 2, 1
    E equ v2
ends

E は v2 配列の最初の値を表す v2 であるため、E は 9 です。

このように書くと:

data segment
    v1 dw 1, 2, 3, 4, 5, 6
    v2 dw 10, 5, 4, 3, 2, 1
    E equ v2/2
ends

E は 5 (10 割る 2) であると予想していましたが、実際には 6 です。v2 は配列のオフセットを意味するため、6 だと思います。これは 12 (= 6 ワード) です。

emu8086を使用しています。

誰かが私に論理を説明してもらえますか?

4

1 に答える 1

2

E最初の例でそれが 9 に等しいことを知って、私はかなり驚かれることでしょう。それは狂気でしょう。これは、データ セグメントの先頭からのEオフセットです。v2戻って結果を確認する必要があります。

いずれにせよ、equこのように使用する場合は、オフセットを使用しています。

equコンパイル時(まあ、アセンブリ時など)の構成です。そのため、メモリにアクセスすることはできません。あなたの例を考えると:

v2 dw 10, 5, 4, 3, 2, 1

equに格納されている内容を参照する式を記述する方法は (私が知っている限り) ありませんv2。つまり、次のものは使用できません。

E equ (some expression that results in getting the value 10 from v2)

決して起きない。

equオフセット演算のみを行います。

于 2013-06-20T21:28:56.847 に答える