我正在读这本书《汇编语言》。我遇到了这两行。

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.

任何人都可以向我展示如何转换为OC6H,OOH,10H和MOV AX,[2000]转换为0C6H,00H,20H。有人可以告诉我计算吗?提前致谢。

编辑:我是组装编程的首发,请用描述解释。

有帮助吗?

解决方案

我假设您的困惑在于1000被编码为10H。

AX是32位EAX寄存器的底部16位的别名。因此,Mov Ax,1000知道这是16位操作。 1000在内存中编码为00 10,因为它是使用小端度编码的,这基本上意味着最重要的字节在物理顺序上是最后的。

其他提示

只是猜测,但在我看来就像:

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

00h是内存地址的lobyte

20H是内存地址的hibyte

OC6H是OPCODE指令 mov, ax

所有X86说明的操作编码都可以在 http://download.intel.com/design/intarch/manuals/24319101.pdf (MOV在第442页)。第2章介绍了如何用寄存器参数编码Opcodes。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top