5

私はアセンブリプログラミングの初心者です...私はグーグルでたくさんサーフィンをしました。たくさんの情報がありますが、私はまだ次のコードを理解していません。誰かが説明してくれたらありがたいです

MOV AX、DATA

また、データセグメントに存在するコードがこのプログラムでいつ実行されるのかもわかりません。

ASSUME CS:CODE,DS:DATA

CODE SEGMENT
 MOV AX,@DATA
 mov DS,AX
 ...
 ...
CODE ENDS


DATA SEGMENT
   ...
   ...
   ... //SOMECODE
DATA ENDS 

また、誰かが私に次の指示が何をするのか説明できますか?..

MOV AH , ??H ( ?? can be filled with 09,4c etc).

MOV DS,AX

MOV ES,AX

4

2 に答える 2

6

警告:私は人生で8086アセンブリを書いたことがありませんが、これは私が作ったものです。

MOV AX,@DATA実行されるコードの最初の行です。@DATAは、データセグメントが存在するメモリ内の場所の値を保持する変数であると思います。@DATAのメモリ位置をAXレジスタ(16ビットレジスタ)に移動します。ここで注意すべきことの1つは、DATAという単語の前にある@です。これは、@ DATAがリンクプロセス中に評価され、実際の値に置き換えられるためだと思います。他の例では、最初に実際のメモリ位置を参照しているため、@が前に付いていないことに注意してください。

MOV DS,AX次に、そのメモリ位置DSを8086アセンブリの標準変数(この場合はレジスタ)である変数として設定します。値を保持するストレージの場所(C ++の用語に精通している場合はヒープ)を常に指す必要があります。

AXレジスタは、値をロードして実行コマンドを実行できる一時的なプレースホルダーです。

MOVE AH, ??Hまず、AHはAXレジスタの「ハイ」側を指します。この兄弟は、AXレジスタの「ロー」側を指すALになります。これは、16ビットではなく8ビットに対してコマンドを実行する場合に使用されます。この2番目の部分である??Hは、AHレジスタに格納する値です。最後のHは「16進数」を意味します。したがって、00Hがある場合、それはゼロ(16進数)を意味します。FFHを入力すると、10進数システムの255と同じになります。

最初の質問「DATASEGMENTの下のコードはこのコードでいつ実行されますか?」に戻ります。--DATASEGMENTがいつ実行されるかを尋ねていると思います。これは、コードセグメントで使用するデータ(変数)を格納することになっているため、通常は実行しないでください。一部のオペレーティングシステムでは、これを回避でき、コードのそのセクションにジャンプまたはブランチして、通常のコードセグメントとして扱うことができます。これは、スタックオーバーフロー、ヒープオーバーフロー、(ハッキング)などがすべて機能する方法である場合があります。

于 2011-03-16T19:21:09.430 に答える
3

Mov ax,@dataaxにデータセグメントの開始アドレスをロードする方法です。次に、mov ds,axデータセグメントを使用して初期化されます。この命令は、tasmアセンブラで使用されます。

于 2012-05-02T03:06:49.830 に答える