为了详细说明标题的问题,假设我在 C++ 中声明了以下数组,
int myarr[10];
这在 x86 中反汇编为以下内容
myarr:
.zero 40
现在,AFAIK 这个
.zero
指令用于约定,不是指令。那么,这个指令究竟是如何翻译成 x86(或任何其他架构,这里不是重点)指令的呢?因为,据我们所知,CPU 只能执行指令。所以我猜这些指令以某种方式被翻译成指令,对吗?我也可以通过询问
.word
来概括这个问题。 .long
等被翻译成指令,但我认为它是清楚的。
最佳答案
汇编器的输出是一个目标模块。在目标模块中是程序各个部分的表示。每个部分都有一个大小、一些属性,可能还有一些要放入该部分的数据。
例如,一个部分可能有几千字节,具有指示它包含执行指令的属性,并且具有由这些指令组成的数据。另一段可能有几百字节但没有数据——它只是程序启动时要分配的空间。另一部分可能非常大,并且在程序启动时包含包含其初始值的非零数据。
组装 .zero 40
指令,编译器仅在其当前构建的部分中包含 40 个字节的零。当它写入最终输出时,它将在该部分中包含这些零。像这样的数据指令和 .word
这样简单地告诉汇编器将哪些数据放入其输出中。
关于c++ - 汇编指令是如何指示的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59913912/