1

間接アドレス指定の問題に取り組んでいますが、バイトを正しくカウントする方法がわかりません。次のコードが与えられます。

.data
v1  db  9,7,5,3,1
v2  dw  0
v3  dw  -1
v4  db  '$'

mov  dx,offset v2
mov  ah,9
int  21h

この質問は、これらの命令が実行された後に標準出力デバイスに書き込まれるバイト数を尋ね、答えは 4 です。

この問題については、次のように設定しました。

offset  0  1  2  3  4  5  6  7  8  9
data    09 07 05 03 01 00 00 FF FF 24

5 を dx に移動し、2 バイト 00 05 を書き込みます。次に、DOS コードを設定してそれを書き出すので、出力は 2 バイトを書き出して 4 になりますか? 私の論理が間違っている場合は修正してください。

4

1 に答える 1

6

DOS 機能 9 は、DX のオフセットから開始し、a に達するまで書き込みます$。V2 のオフセットを DX にロードしました。V2 と V3 をそれぞれ 2 バイトとして定義し (どちらにも "$" は含まれません)、その後に V4 (. を含む$) が続きます。したがって、V2 と V3 の 4 バイトを書き込み、停止します。

編集:タイトルの質問に反して、あなたが示したコードのどれも実際に間接アドレス指定を行わないことを追加する必要があります(ただし、DOS機能9は間違いなく間接アドレス指定を使用し、ロードされたアドレスから読み取りますdx)。

于 2011-11-01T05:08:21.240 に答える