我遇到过以下代码:
我知道系统在Hexa中工作,我认为它是一个32位处理器(如果我没记错的话,这意味着每个内存地址的长度应为32位,每个命令都应如此)。 如果是这种情况,为什么8048384处的命令长度是56位长(7 * 2 * 4)? 一般来说,这里大多数命令的长度似乎都很奇怪。 我错过了什么吗?如果这是一个64位处理器会有意义吗?
我希望我对ASM的理解是正确的,我不只是错过了一个基本概念。
提前谢谢大家:)
答案 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