问题标签 [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.
gcc - 内联 intel 语法到内联 gcc
我正在尝试将我的一个片段转换为使用类似于 gcc 的内联 asm 语法的编译器。我阅读了文档,一切都很好,直到遇到这一行:
我将其转换为:
编译的翻转,告诉我 fs 不是 32 位寄存器,这个操作是无效的。我应该如何在 at&t 语法中访问 fs?
assembly - 以 16 位寄存器为偏移量的有效地址计算
使用以下代码,我尝试将 ebx 的低两个字节“存储”在两个高字节中,然后使用低阶 bx 作为访问“池”偏移量的临时变量。最后,我通过右移数据来恢复原始值(它最初只使用低两个字节)。
这与 nasm 组装得很好,但是我得到了错误
重定位被截断以适应:R_386_16 针对“.data”
链接时。有关如何绕过此错误的任何建议?简单地使用另一个寄存器不是一种选择,因为实际上每个寄存器都保存 esp 并且正在使用段寄存器。
编辑:我想有人会问,所以我使用的是 32 位程序集
optimization - NASM 预取
我在 NASM 文档中遇到了以下说明,但我无法完全理解它们。可悲的是,关于这些指令的英特尔文档也有些缺乏。
谁能提供一个简洁的指令示例,比如在给定地址缓存 256 个字节?提前致谢!
assembly - x86 AT&T 语法程序集的注释语法
Intel 语法有使用分号的注释。当我切换到 AT&T 时,它实际上试图解释这些评论。
AT&T 程序集的注释语法是什么?
assembly - 什么相当于 intel x86 中的 REP stosl
我正在尝试运行从 GAS 样式中获取的指令,但是当我将此指令移植到 intel 样式时,出现如下错误:
我尝试了各种组合,如 REP movsl、REP loadingl 但都给出了同样的问题,谁能告诉这个正确的命令相当于 x86 中的 REP stosl
assembly - 汇编编程 - 使用(看起来像)标签或变量名称定义的“变量”?
我已经在使用两种语法“定义”的程序集中看到“变量”,第一个看起来像标签,第二个看起来像变量名。两者可以互换使用,还是每个使用都有特定的原因?
例如:
看起来有点像 C / C++ 中的变量名,而
看起来有点像 asm 或 C/C++ 中的标签。
是否有理由使用一种或另一种语法?
它们之间有什么区别?
如果我
msg: db "Text",0x0a
,我可以然后mov rax, [msg]
还是我需要mov rax, [msg:]
?
assembly - rel8 立即操作数的 x86-64 英特尔语法?
x86-64 中 JMP 的第一种形式是:
所以例如JMP rel8=-2
是eb fe
。 fe
是一个单字节有符号的 2s-compliment -2。
如何用 Intel 语法表达这个 rel8 立即数?
我尝试了以下方法:
测试.s:
编译:
但我得到:
不如eb fe
所愿。
(更一般地说,英特尔语法记录在哪里?我在英特尔手册中找不到任何关于它的内容。英特尔手册解释了如何编码操作数,但它没有给出汇编语言的语法。)
更新:
解决方案是:
.
必须代表当前指令的地址。组装和拆卸给出:
eb fe
如预期的。RIP 相对寻址是根据下一条指令进行的,因此汇编器必须为您调整当前指令的大小。
assembly - 使用 Intel 语法的 GNU 汇编器中的位置无关寻址
在 x86-64 上,当使用带有intel 语法的 GNU 汇编器时,如何以与位置无关的方式(PIC 和 PIE 兼容)从 .data 部分加载地址。
例如,使用 AT&T 语法,您可以这样做:
英特尔语法是否有等价物?我似乎无法使用搜索引擎找到答案...
我实际上正在使用noprefix
英特尔语法的版本,以防万一。
谢谢
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 中的第一个问题)