问题标签 [gnu-assembler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
34091 浏览

linux - 气体装配时推入指令后缀无效

使用 GNU 汇编器汇编文件时,出现以下错误:

hello.s:6:错误:“push”的指令后缀无效

这是我要组装的文件:

这里有什么问题,我该如何解决?

尽管问题中的错误和说明有所不同,但该问题与此问题有些相关。

0 投票
1 回答
145 浏览

linux - FreeBSD 系统上简单汇编程序的虚假结果

我在让我在 Linux 上编写的最简单的汇编程序在我的 FreeBSD 机器上运行时遇到了问题。这是有问题的代码(我试图让它尽可能简单):

Linux 机器返回预期结果,即 60,而 FreeBSD 机器始终返回 164 作为返回码。有人知道这是为什么吗?如果是这样,你能向我解释发生了什么吗?另外,我应该提到它们确实都在运行 x86 CPU。提前致谢 :)

0 投票
1 回答
17286 浏览

assembly - 在汇编中,你如何处理 C 结构?

例如,如何为此准备参数syscall sys_wait4

struct rusage装配时如何处理?

在汇编中处理一个 hello world 示例struct对我来说就足够了:)

0 投票
4 回答
61812 浏览

assembly - cltq 在汇编中做了什么?

事实上,我的程序很简单:

但是汇编输出很长:

我不明白的是这个块:

0 投票
4 回答
5083 浏览

c - GCC:禁止使用某些寄存器

这是一个奇怪的要求,但我觉得这是可能的。我想要的是在我的代码区域(用 C 语言编写)中插入一些编译指示或指令,以便 GCC 的寄存器分配器不会使用它们。

我知道我可以做这样的事情,这可能会为这个变量留出这个寄存器

问题是我直接插入新指令(用于硬件模拟器),而 GCC 和 GAS 还不能识别这些指令。我的新指令可以使用现有的通用寄存器,我想确保保留其中的一些(即 r12->r15)。

现在,我在一个模型环境中工作,我想快速做我的实验。将来我将附加 GAS 并将内在函数添加到 GCC 中,但现在我正在寻找一个快速修复。

谢谢!

0 投票
4 回答
33601 浏览

assembly - `movl (%eax), %eax` 中的括号是什么意思?

我已经用谷歌搜索了足够多的东西,但无法弄清楚括号是什么()意思。另外,我看到一些语法为movl 8(%ebp), %eax

有人可以建议我一些好的参考吗?我无法在 Google 的前 20 个结果中找到任何结果。

0 投票
2 回答
14989 浏览

assembly - 如何使用 GNU GAS 汇编器生成像 nasm -f bin 这样的普通二进制文件?

我有一些通常具有以下结构的 NASM 文件:

我像这样组装它们:

我想用 GAS 来写其中的一些。两个问题:

  • 我应该在 GAS 中使用哪些指令?我找到了“.org”指令,但 GAS 似乎没有“.bits”指令。

  • 我应该传递什么gccas生成一个普通的二进制文件?即该-f bin选项对 NASM 的作用。

0 投票
2 回答
608 浏览

assembly - NASM 到 GAS:调用 equ'd 符号

我有一些 NASM 文件有一行:

bmdev.asm文件具有 equ 指令,例如:

然后包含的文件bmdev.asm可以调用这些项目。IE

有没有办法将其转换为 GAS?当我尝试进行直接翻译时,即

它似乎没有分解为正确的东西:

NASM 调用反汇编为:

这里的目标是通过 GAS 而不是 NASM为BareMetal OS生成二进制文件。

有效的二进制文件的完整反汇编:

完全反汇编不起作用的二进制文件:

我已经发布了这个问题的(希望)更清晰的版本。关闭这个。

0 投票
2 回答
1854 浏览

gcc - 需要将旧的 32 位 GAS 代码转换为当前的 GAS 汇编器(pushfl/popl)

我正在尝试在我的现代机器上编译一个旧项目。我知道这个旧项目使用了旧 (2.x) 版本的 GCC/GAS,所以我需要清理它,以便可以使用当前版本编译它。

有问题的代码:

gas抱怨这pushfl不是一个指令。从我读到的内容来看,这是一个已弃用的旧 GNU 助记符,但肯定有某种 x86_64 等价物吗?

除了回答如何将此代码转换为 x86_64 气体之外,如果有人能解释助记符喜欢和定义和记录的位置,那就太好pushflpushfq。我很确定那是 GAS 的创造物……

注意:我想在 gcc 4.6.1 和 gas 2.21 上编译它

0 投票
1 回答
296 浏览

assembly - 在 GAS 中调用 equ'd 符号

这是一个小的 NASM 程序:

组装它:

拆开它:

这是一个 GAS 版本:

组装和链接它:

拆开它:

如您所见,反汇编代码略有不同。callNASM 中的代码:

与气体:

有关如何正确实施 GAS 版本的任何建议?

这是FASM中的程序:

它做正确的事: