1

MBR コード (リアル モードの 16 ビット アセンブリ コード) を理解しようとしていますが、次の行があります。

mov    si,0x7cd8
lods   al,BYTE PTR ds:[si]

リアルタイムで何が起こるかというと、物理アドレスが「D8」であるということです - どうすればそれを知ることができますか? これは、文字列をロードして文字列に出力するために使用されるためです。これは、このプログラムを実行して最初に目にするもので、コードの最初の行です。

私の質問は 2 行目についてです。私が取得した物理アドレスは、物理アドレス (セグメント * 16 + オフセット) を取得するために計算が行われたためか、または BYTE PTR が SI アドレスが BYTE のタイプになることを示しているためですか?読み取るデータのタイプはバイト型ですか?

4

1 に答える 1

3

二行目

lods   al,BYTE PTR ds:[si]

は、単に命令の逆アセンブラ出力です(アドレスからLODSB1 バイトをロードします)。DS:SIINC SI

アセンブラでは、簡単に書くことができますLODSB。つまり、

アドレス DS:SI からバイトレジスタ AL にバイトをロードし、その後 SI をインクリメントする

. DS_ (segment * 16 + offset)_ DS_ _ SI _

DS任意の値を持つことができます。

于 2016-11-28T20:54:23.083 に答える