ASM命令长度的十六进制表示很奇怪

时间:2013-05-18 21:54:51

标签: assembly hex

我遇到过以下代码: enter image description here

我知道系统在Hexa中工作,我认为它是一个32位处理器(如果我没记错的话,这意味着每个内存地址的长度应为32位,每个命令都应如此)。 如果是这种情况,为什么8048384处的命令长度是56位长(7 * 2 * 4)? 一般来说,这里大多数命令的长度似乎都很奇怪。 我错过了什么吗?如果这是一个64位处理器会有意义吗?

我希望我对ASM的理解是正确的,我不只是错过了一个基本概念。

提前谢谢大家:)

2 个答案:

答案 0 :(得分:1)

正如你所说,你所拥有的东西看起来像32位英特尔处理器的代码。如您所见,Intel IA32指令集具有可变长度的指令。在这方面,64位英特尔处理器(x86_64)类似。

如果您习惯于只使用一个指令长度的处理器(例如MIPS),那么英特尔程序的反汇编肯定会很奇怪。不过,这就是这些处理器的设计方式。

还有其他架构适合该栅栏的两侧,甚至两者都适用。例如,ARM的ARM指令集只有32位指令,但ARM Thumb和Thumb2指令集都有16位和32位指令。英特尔在整个地图上都有指令长度。

通过阅读Intel Software Developer’s Manuals的第2卷,您可以了解有关英特尔指令集的更多信息。

答案 1 :(得分:0)

如果存在超过32位(56位)的指令,为什么它看起来像32位处理器?

其中一些是数据

C7 O4 24 84 84 04 08

C7 04 24是说明吗?

<84> 84 84 04 08向后是$ 0x8048484,数值数据

如dw65534是FF FE,但向后打印为FE FF