问题标签 [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 投票
1 回答
219 浏览

gcc - 内联 intel 语法到内联 gcc

我正在尝试将我的一个片段转换为使用类似于 gcc 的内联 asm 语法的编译器。我阅读了文档,一切都很好,直到遇到这一行:

我将其转换为:

编译的翻转,告诉我 fs 不是 32 位寄存器,这个操作是无效的。我应该如何在 at&t 语法中访问 fs?

0 投票
2 回答
874 浏览

assembly - 以 16 位寄存器为偏移量的有效地址计算

使用以下代码,我尝试将 ebx 的低两个字节“存储”在两个高字节中,然后使用低阶 bx 作为访问“池”偏移量的临时变量。最后,我通过右移数据来恢复原始值(它最初只使用低两个字节)。

这与 nasm 组装得很好,但是我得到了错误

重定位被截断以适应:R_386_16 针对“.data”

链接时。有关如何绕过此错误的任何建议?简单地使用另一个寄存器不是一种选择,因为实际上每个寄存器都保存 esp 并且正在使用段寄存器。

编辑:我想有人会问,所以我使用的是 32 位程序集

0 投票
2 回答
1053 浏览

optimization - NASM 预取

我在 NASM 文档中遇到了以下说明,但我无法完全理解它们。可悲的是,关于这些指令的英特尔文档也有些缺乏。

谁能提供一个简洁的指令示例,比如在给定地址缓存 256 个字节?提前致谢!

0 投票
2 回答
8686 浏览

c - Intel x86 到 ARM 程序集转换

我目前正在学习ARM汇编语言;

为此,我试图将一些转换x86 code (AT&T Syntax)为 ARM 汇编(Intel Syntax)代码。

从这个文档中,我了解到在 x86 中,堆结构的 Chunk 1 从 0x0804c000 开始。但是当我尝试在 中做同样的事情时arm,我收到以下错误:

我假设问题是 ARM 只能加载32 位指令。

从我之前的问题中,我知道内存间接寻址是如何工作的。

下面写的片段是否做同样的工作?

我在用ARMv7 Processor rev 4 (v7l)

0 投票
3 回答
15529 浏览

assembly - x86 AT&T 语法程序集的注释语法

Intel 语法有使用分号的注释。当我切换到 AT&T 时,它实际上试图解释这些评论。

AT&T 程序集的注释语法是什么?

0 投票
2 回答
1295 浏览

assembly - 什么相当于 intel x86 中的 REP stosl

我正在尝试运行从 GAS 样式中获取的指令,但是当我将此指令移植到 intel 样式时,出现如下错误:

我尝试了各种组合,如 REP movsl、REP loadingl 但都给出了同样的问题,谁能告诉这个正确的命令相当于 x86 中的 REP stosl

0 投票
1 回答
1634 浏览

assembly - 汇编编程 - 使用(看起来像)标签或变量名称定义的“变量”?

我已经在使用两种语法“定义”的程序集中看到“变量”,第一个看起来像标签,第二个看起来像变量名。两者可以互换使用,还是每个使用都有特定的原因?

例如:

看起来有点像 C / C++ 中的变量名,而

看起来有点像 asm 或 C/C++ 中的标签。

  1. 是否有理由使用一种或另一种语法?

  2. 它们之间有什么区别?

  3. 如果我msg: db "Text",0x0a,我可以然后mov rax, [msg]还是我需要mov rax, [msg:]

0 投票
1 回答
1518 浏览

assembly - rel8 立即操作数的 x86-64 英特尔语法?

x86-64 中 JMP 的第一种形式是:

所以例如JMP rel8=-2eb fefe是一个单字节有符号的 2s-compliment -2。

如何用 Intel 语法表达这个 rel8 立即数?

我尝试了以下方法:

测试.s:

编译:

但我得到:

不如eb fe所愿。

(更一般地说,英特尔语法记录在哪里?我在英特尔手册中找不到任何关于它的内容。英特尔手册解释了如何编码操作数,但它没有给出汇编语言的语法。)

更新:

解决方案是:

.必须代表当前指令的地址。组装和拆卸给出:

eb fe如预期的。RIP 相对寻址是根据下一条指令进行的,因此汇编器必须为您调整当前指令的大小。

0 投票
1 回答
2522 浏览

assembly - 使用 Intel 语法的 GNU 汇编器中的位置无关寻址

在 x86-64 上,当使用带有intel 语法的 GNU 汇编器时,如何以与位置无关的方式(PIC 和 PIE 兼容)从 .data 部分加载地址。

例如,使用 AT&T 语法,您可以这样做:

英特尔语法是否有等价物?我似乎无法使用搜索引擎找到答案...

我实际上正在使用noprefix英特尔语法的版本,以防万一。

谢谢

0 投票
2 回答
516 浏览

linux - linux x86 intel 语法中的条件跳转失败(NASM)

故事(我是新手):我开始阅读关于使用著名的 nasm 汇编器在汇编(x86 英特尔)中编程的 pdf 教程,但我在执行非常基本的汇编代码时遇到了问题(受教程中关于循环的代码的启发)。

问题(JE FAILS):这个汇编代码应该从标准输入读取一个数字(一个字符(这意味着'0'+数字)),然后写入屏幕数字乘以“Hello world\n”。非常简单的循环:减少数字如果数字等于零('0' 不是字符的整数)跳转(je)到出口(mov eax,1\nint 0x80)。

听起来很简单,但是当我尝试执行输出时很奇怪。(真的很奇怪而且很大)它在循环中运行了很多次,当数字等于“0”时停止(很奇怪,因为直到程序停止条件数字==“0”测试了很多次,应该是真的)

实际上我的问题是当数字=='0'时代码无法跳转

代码(很大)

输出

输入一个数字:4 4:Hello world 3:Hello world 2:Hello world 1:Hello world 0:Hello world ... ...(许多循环之后) ... 5:Hello world 4:Hello world 3:Hello世界2:你好世界1:你好世界$

那是我的问题:这段代码有什么问题?你能解释一下吗?而且我不需要会神奇地(无需解释)运行的替代代码,因为我尝试学习(我是新手)

这是我的问题(也是我在 Stackoverflow.com 中的第一个问题)