c++ - 汇编指令是如何指示的?

标签 c++ c assembly x86 directive

为了详细说明标题的问题,假设我在 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/

相关文章:

c - 在 C 中创建自定义 .txt 文件名时出现问题

c - 如何使 SqLite 在 Windows 10 中工作

c++ - 如何将指针作为函数参数返回

c++ - boost spirit 解析 objective-C 之类的语言

c - 执行时显示不需要的字符

debugging - 在 Virtual Box 中调试 guest 操作系统的工具

assembly - sin 和 cos 是如何在硬件上实现的?

linux - 调用 0x16 时出现段错误

c++ - 通过传递的指针访问静态方法内部的非静态成员

c++ - 帧率独立加速/减速?