4

MOVはレジスタとの間でデータをコピーおよび上書きすることになっていることに気付きましたが、他のレジスタに現在のデータがない場合、MOVは特定のサイズのバイトをRAMからレジスタに移動して一時的に保持しますか、またはどのようにこれは正確に動作しますか?

私の質問を明確にするために、私が使用するとします:

MOV AL, 0x10;

この場合、8ビットレジスタに移された「10」桁のデータはどこにあるのでしょうか?

これは保持するために 8 ビットとして RAM から AL に移動されますか、それとも「10」バイトはメモリにない単なるスクラッチパッド番号ですか?

私はこれを理解していません.誰かがこれを正すことができれば素晴らしいでしょう.

私の問題は、どこでどれだけのメモリが使用されているか、そしてどのように正確に何がアドレス指定されているかを知る必要があることです(チュートリアルではこれが明確にされていません)。

4

4 に答える 4

6

メンタル ブロックの推測: RAM にはコードデータの両方が含まれていることを理解することが重要です。値 0x10 はコードから取得されます。アセンブラによってマシンコード命令にエンコードされました。そのコードは、コードの実行を開始したときに、オペレーティング システムによって RAM に読み込まれました。

注目すべきは、これが変数ではないことです。命令は、プログラムの状態に関係なく、常に0x10 をロードします。RAM の他の部分には、アセンブリ プログラムで宣言したデータが格納されます。.data および .stack セクションと同様です。ただし、この特定の命令ではそれ以外は使用されません。

混乱の可能性に加えて、RAM にある必要はありませんオペレーティング システムやブート ドライブのない組み込みシステムでは、多くの場合、代わりにコードが ROM に書き込まれます。プロセッサは、EIP レジスタ (命令ポインタ) を使用してメモリ バスからバイトを読み取り、必要なバイト数をメモリ サブシステムに伝えるだけです。

于 2013-01-07T22:35:51.213 に答える
4

コードはRAMに存在します。つまり、を表すバイトMOV AL, 0x10;、0x10は命令の一部であり、個別に格納されません。通常、実行時点ではRAMからではなく、CPU上の命令パイプラインから取得されます。CPUは、適切と思われる場合、RAMからパイプラインに命令をフェッチします。

組み立てに関するすばらしい無料のオンラインブックについては、http://cs.smith.edu/~thiebaut/ArtOfAssembly/artofasm.htmlをお試しください。

第4章では、メモリアドレス指定について説明します http://cs.smith.edu/~thiebaut/ArtOfAssembly/CH04/CH04-1.html

頭を悩ませる概念はたくさんあります。あらゆる形式のメモリアドレス指定とCPUアーキテクチャの操作方法は、最初は気が遠くなるように思えるかもしれませんが、試してみると徐々に意味がわかり始めます。

于 2013-01-07T22:21:10.140 に答える
2

デバイス/マシンのプライマリ メモリは RAM だと思います。したがって、基本的にアプリケーションは実行時にそこに存在します (たとえば、そのアプリケーションをハードディスクから実行した後、デバイスのメモリにロードされます)。ところで、プロセッサで実行可能なすべてのバイナリ命令は、現在 RAM にあります。

それを簡単にするために、プロセッサが0などの最初のセルからメモリの読み取りを開始し、それをどうするかを理解しようとし、終了後、この場合は1である次のセルに移動するとします。 .

ここで、架空のプロセッサでmov al, 0x10が等しいとしましょう。0xAABB物理メモリで0xAAは、セル番号200xBBに格納され21ます。私たちのプロセッサは、ストリームを読み取るためにまだビジー状態です。のメモリに到達すると、この場合20のバイナリ値がロードされます。0xAAちなみに、プロセッサのドキュメントでは、これは AL に次のデータを入力するという意味です。この場合の次のデータは0xBBであるため、プロセッサがそれを行います。

ご覧のように:

  • この例では、実行可能な命令、データなどを含むすべてが (実行時に) RAM に存在します。
  • CPUはRAMからそれを読み取り、それによって想定/必要な処理を実行しようとします
  • お気づきかもしれませんが、これは実行時mov al, 0x10に割り当てられたわけではありませんが、コンパイラによってすべてハードコードされ、実行可能ファイルに格納されていました (たとえば)。
  • したがって、その虚数0xBBは RAM 上に存在しますが、実行時に変更することはできません。これも実行時に作成されたのではなく、実行時に RAM にロードされただけであることに注意してください。

それをよりよく理解するのに役立つことを願っています。

于 2013-01-10T13:27:01.260 に答える
1

組み立て説明書

mov al, 0x10 

0xb010バイナリで等しい

mov al, 0xff

0xb0ffに等しい

Windows を使用している場合は、[開始] - [実行] - [デバッグ] をクリックし、デバッグ ウィンドウで次のように記述します。

a      
[Enter]
mov al, ff
[Enter]
[Enter]

mov al, ff をバイナリに変更します

そして、あなたは0xb0ffを見ることができます..

u 100
[Enter]

a 
mov al, ff

移動、ffを「組み立て」、現在の場所に保存することを意味します(0x100の場合があります)

u 100「アンアセンブル」ロケーションを意味します 0x100

于 2013-01-08T10:12:47.453 に答える