关于汇编语言的问题

时间:2010-10-18 16:49:40

标签: assembly x86 x86-16

我正在读“汇编语言的艺术”一书。我遇到了这两行。

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

我假设你的困惑在于1000被编码为10h。

ax是32位eax寄存器的低16位的别名。所以mov ax,1000知道这是一个16位操作。 1000在内存中编码为00 10,因为它是使用little-endianness编码的,这基本上意味着最重要的字节在物理顺序上是最后一个。

答案 2 :(得分:3)

00h是内存地址的LoByte

20h是内存地址的HiByte

OC6h是mov, ax

的OpCode指令

答案 3 :(得分:1)

可以在http://download.intel.com/design/intarch/manuals/24319101.pdf找到所有x86指令的操作码(mov在第442页)。第2章描述了如何使用寄存器参数对操作码进行编码。

其他答案已经解释了编码: - )