我正在读“汇编语言的艺术”一书。我遇到了这两行。
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。有人能告诉我计算结果吗?提前谢谢。
编辑:我是汇编编程的先驱,请通过描述进行解释。
答案 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
答案 3 :(得分:1)
可以在http://download.intel.com/design/intarch/manuals/24319101.pdf找到所有x86指令的操作码(mov在第442页)。第2章描述了如何使用寄存器参数对操作码进行编码。
其他答案已经解释了编码: - )