0

我遇到了以下代码: 在此处输入图像描述

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

我希望我对 ASM 的理解是正确的,而且我不只是缺少一个基本概念。

谢谢大家 :)

4

2 回答 2

1

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

如果您习惯使用只有一种指令长度的处理器(例如 MIPS),那么反汇编 Intel 程序肯定看起来很奇怪。不过,这正是这些处理器的设计方式。

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

您可以通过阅读英特尔软件开发人员手册第 2 卷了解有关英特尔指令集的更多信息。

于 2013-05-18T21:57:21.387 回答
0

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

其中一些是数据

C7 O4 24 84 84 04 08

C7 04 24 是指令吗?

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

像 dw65534 是 FF FE 但向后打印为 FE FF

于 2013-05-19T01:02:58.210 回答