问题标签 [intel-syntax]

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 投票
3 回答
95275 浏览

assembly - 如何使用 gcc 生成 Intel 语法的汇编代码?

gcc -S选项将以 AT&T 语法生成汇编代码,有没有办法以 Intel 语法生成文件?或者有没有办法在两者之间转换?

0 投票
7 回答
40930 浏览

linux - 与 AT&T 相比,英特尔汇编语法的局限性

对我来说,英特尔语法更容易阅读。如果我只专注于英特尔语法的汇编森林,我会错过任何东西吗?我有什么理由想切换到 AT&T(除了能够阅读其他人的 AT&T 程序集之外)?我的第一个线索是 gdb 默认使用 AT&T。

如果这很重要,那么我的重点只在于 Linux/BSD 和 C 语言可能具有的任何关系汇编和语法。

0 投票
1 回答
6766 浏览

assembly - GAS 中断

我正在尝试将我的简单程序从 Intel 语法转换为 AT&T(用 GAS 编译它)。我已经成功地转换了我的应用程序的很大一部分,但我仍然遇到int(中断)错误。我的功能是这样的:

但是当我编译它时,我得到了这个:

hello.S:汇编程序消息: hello.S:13:错误: msg db“Hello,World!”的
操作数大小不匹配,0Ah'int'
hello.S:19: Error: no such instruction:

我需要做什么?

0 投票
4 回答
847 浏览

c++ - C++ 中的汇编

我有以下代码。

我很了解汇编,但为什么程序不将 2 输出到屏幕上?

0 投票
4 回答
2737 浏览

assembly - 关于 AT&T x86 语法设计的问题

  1. 谁能向我解释为什么 AT&T 语法中的每个常量前面都有一个“$”?
  2. 为什么所有寄存器都有一个'%'?
  3. 这只是让我做很多蹩脚打字的另一种尝试吗?
  4. 另外,我是唯一一个发现:16(%esp)与 相比真的违反直觉[esp+16]吗?
  5. 我知道它编译成同样的东西,但为什么有人想要输入很多'$'和'%'而不需要呢?- 为什么 GNU 选择这种语法作为默认语法?
  6. 另一件事,为什么 at&t 语法中的每条指令前面都有一个:l?- 我确实知道它的操作数大小,但是为什么不让汇编器弄清楚呢?(我会想对不是那么大的操作数做一个 movl 吗?)
  7. 最后一件事:为什么 mov 参数倒置了?

是不是合乎逻辑:

at&t 是:

注意:我不是要拖钓。我只是不明白他们所做的设计选择,我试图了解他们为什么要这样做。

0 投票
2 回答
1195 浏览

c - 从 icc 获取 Intel 语法 asm 输出,而不是默认的 AT&T 语法?

我遇到了一个问题。我一直在使用 gcc 编译/汇编我的 C 代码一段时间,并习惯于阅读 Intel 汇编语法。我-masm=intel在生成程序集文件时使用了该标志。

然而最近,由于公司迁移,他们获得了英特尔的icc,声称它更好。所以现在我需要使用 icc,但奇怪的是它具有 AT&T 的默认汇编语法。我试图改变它,但它没有用,所以我联系了英特尔支持,他们也不知道,每个人都给了我一个矛盾的答案。

有没有办法整合 gcc 和 icc 以便我使用 icc 的编译“优势”,同时使用 gcc 编译为 intel 的语法?

我正在使用 ubuntu 并获得了 icc 版本 12.x

0 投票
3 回答
27795 浏览

gcc - 如何使用英特尔语法内联汇编在 GCC 中设置变量?

为什么此代码不设置temp为 1?我该怎么做?

0 投票
1 回答
1202 浏览

assembly - 如何为条件跳转修改 x86 程序集标志?

在我的过程 _Str_compare 中,虽然它正确返回 -1、0 或 1,但我只是不明白为什么,当我从另一个汇编过程调用此 _Str_compare 方法时,条件语句不能正常工作,例如,jbe 在下面的例子:

0 投票
2 回答
4405 浏览

assembly - 使用 GNU Assember 英特尔语法进行内存寻址

我阅读了这个页面,其中列出了 GAS 的 Intel 和 AT&T 语法之间的差异,但它没有涵盖仅指定具有位移的地址的情况。

在这里,我用 AT&T 语法组装了四行:

正如预期的那样,前两行是不同的。第一个将立即数 8 移入 rax,第二个将地址 8 的内容移入 rax。但是使用英特尔语法,我得到以下奇怪的行为:

这里第一行和第二行组装成相同的机器代码!首先我认为方括号是错误的,所以我在测试中添加了第三和第四行,至少在涉及寄存器时,方括号确实可以用于内存寻址。

我读过的所有文档都显示了内存寻址示例,其中至少有一个基址或索引寄存器,有时还有比例和位移,但绝不是只有位移。

我确实有使用 NASM 汇编器的英特尔语法的经验,它确实区分mov rax, 8mov rax, [8].

这是 GAS 中的错误吗?或者如果不是,我如何指定 NASM 的等价物mov rax, [8]

我意识到指定仅位移地址可能并不常见,但我想使用这种语法全面了解所有内存寻址形式。

0 投票
3 回答
57275 浏览

assembly - 在 x86 汇编中计算“$ - label”之类的字符串长度时,美元符号 ($) 是什么意思?

例如,如果我们正在编写一个简单的 hello world 类型程序,.data 部分可能包含如下内容:

这个例子中的 $ 代表什么,为什么$ - msg等于字符串的长度?