1

私はThe Art of Assembly Languageという本を読んでいます。この2行に出会いました。

the three byte encoding for mov ax, [1000] would be 0C6h, 00h,
10h and the three byte encoding for mov ax, [2000] would be 0C6h, 00h, 20h.

mov ax, [1000] が oc6h, ooh, 10h に変換され、mov ax, [2000] が 0C6h, 00h, 20h に変換される方法を教えてください。だれか計算を見せてくれませんか? 前もって感謝します。

編集:私はアセンブリプログラミングの初心者です。説明を付けて親切に説明してください。

4

4 に答える 4

5

推測ですが、私には次のように見えます:

0C6h - This is the opcode for "mov ax,"
00h 10h - This is the address 1000h, Little Endian
00h 20h - This is the address 2000h, Little Endian
于 2010-10-18T16:54:06.997 に答える
4

あなたの混乱は、1000 が 10h としてエンコードされたという事実にあると思います。

ax は、32 ビット eax レジスタの下位 16 ビットのエイリアスです。mov ax, 1000 は、これが 16 ビット演算であることを認識しています。1000 はメモリ内で 00 10 としてエンコードされます。これは、基本的に最上位バイトが物理順序の最後であることを意味するリトル エンディアンを使用してエンコードされているためです。

于 2010-10-18T16:57:56.407 に答える
3

00h はメモリ アドレスの LoByte です。

20h はメモリ アドレスの HiByte です。

OC6h は OpCode 命令です。mov, ax

于 2010-10-18T16:55:09.290 に答える
1

すべての x86 命令のオペコードは、http ://download.intel.com/design/intarch/manuals/24319101.pdf にあります (動画は 442 ページにあります)。第 2 章では、オペコードがレジスタ引数でエンコードされる方法について説明します。

他の回答はすでにエンコーディングを説明しています:-)

于 2010-10-18T17:07:07.243 に答える