我遇到了以下代码:
我知道系统在 Hexa 中工作,我认为它是一个 32 位处理器(如果我没记错的话,这意味着每个内存地址的长度应该是 32 位,每个命令也应该是 32 位)。如果是这样的话,为什么 8048384 的命令长度是 56 位长(7*2*4)?一般来说,这里大多数命令的长度似乎很奇怪。我错过了什么吗?如果这是一个 64 位处理器,这有意义吗?
我希望我对 ASM 的理解是正确的,而且我不只是缺少一个基本概念。
谢谢大家 :)
正如你所说,你所拥有的看起来像是 32 位英特尔处理器的代码。如您在此处看到的,英特尔 IA32 指令集具有可变长度的指令。64 位 Intel 处理器 (x86_64) 在这方面类似。
如果您习惯使用只有一种指令长度的处理器(例如 MIPS),那么反汇编 Intel 程序肯定看起来很奇怪。不过,这正是这些处理器的设计方式。
还有其他架构适合该栅栏的任一侧,甚至两者都适合。例如,ARM 的 ARM 指令集只有 32 位指令,但 ARM Thumb 和 Thumb2 指令集都有 16 位和 32 位指令。英特尔在整个地图上的指令长度更多。
您可以通过阅读英特尔软件开发人员手册第 2 卷了解有关英特尔指令集的更多信息。
如果有超过 32 位(56 位)的指令,为什么它看起来像 32 位处理器?
其中一些是数据
C7 O4 24 84 84 04 08
C7 04 24 是指令吗?
84 84 04 08 向后是 $0x8048484,数值数据
像 dw65534 是 FF FE 但向后打印为 FE FF