问题标签 [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.
macos - 对于带有 intel_syntax 的符号,无法从 GNU 汇编器获得正确的立即模式
我正在尝试在 MAC OS 中使用 GNU 汇编器(as)编写一个简单的汇编程序。部分程序如下所示:
汇编链接后,在调试器中查看的可执行代码为:
movq $0x14, %rdx
但我真正想要的是movq 0x14, %rdx
我试图将部分放在.data
部分之前,.text
但仍然得到相同的结果。
如何使用 intel 语法获得正确的立即模式?
assembly - 我可以用 OR 操作代替 MOV 操作吗?
首先,我想说我是 ASM 新手,如果这是一个愚蠢的问题,请原谅。
我在Agner Fog 的微架构手册中阅读了有关部分寄存器停顿的信息(这似乎有点高级,但我很好奇为什么 64 位模式下的 32 位指令将寄存器的上半部分归零)。例 6.13 给出了如何避免寄存器停顿的解决方案。我对此仍然有些困惑,为什么不使用 OR 操作而不是 MOV,如下所示:
我觉得效果是一样的。它们每秒都使用相同数量的周期吗?一个比另一个更有效吗?有没有什么“幕后”让我更喜欢其中一个?
assembly - 有没有办法为 x 命令输出指定语法?
我想知道是否可以更改以下命令输出的语法:
现在它给出了这样的输出。我想这是 AT&T 语法,如果我错了,请纠正我(新手):
我想要的是-F
以下命令中的标志之类的东西disassemble -n main -F intel
。有什么办法可以做到这一点。我既没有使用help x
也没有通过谷歌搜索找到任何东西。提前致谢!
注意:我lldb
用作调试器。
x86 - clang 不使用英特尔汇编语法
我正在尝试在 clang (Windows) 中编译内联汇编代码。所以,我有以下代码:
我尝试使用它编译它,clang++ -masm=intel main.cpp
但它抱怨助记符操作数大小main.cpp:4:7: error: unknown use of instruction mnemonic without a size suffix
,因为它仍在使用 AT&T 语法。
我试过使用
但它抱怨使用 .intel_syntaxmain.cpp:3:7: error: unknown token in expression asm(".intel_syntax;")
assembly - GCC 内联汇编无法将局部变量的地址加载到 x64 Intel 格式的寄存器中?
我很习惯 Intel 格式的内联汇编。有谁知道如何在下面的代码中将两条 AT&T 行转换为 Intel 格式?它基本上是将局部变量的地址加载到寄存器中。
mov eax, [var_a]
具体来说,在 32 位模式下编译时允许使用加载堆栈上的局部变量。例如,
它编译得很好:
但是,在 64 位模式下编译时不允许使用相同的语法:
它不编译:
那么有什么方法可以在不使用的情况下完成这项工作,因为可以通过或不破坏其他寄存器input:output:clobber
直接访问简单的局部变量或函数参数?mov rax, [rsp+##]
mov rax, [rbp+##]
assembly - 告诉 GAS 在 Intel 语法模式下使用分号作为注释
我可以在 GAS 中使用分号作为注释字符吗?
我正在使用带有 Intel 语法的 GAS 2.30,如下所示。
这很好用,只是我必须使用“#”作为注释字符而不是“;”。
重要的主要原因是我拥有的编辑器(SublimeText 3.2.2,build 3211)只有 ARM 或 NASM 汇编语法的语法高亮显示,它们都不理解“#”的注释,因为我正在关注主要的材料使用英特尔语法,这是我想与我正在阅读的内容保持一致的内容。
我查看了英特尔手册,5000 多页的 PDF 文档,除非我以某种方式错过它,否则它没有说明任何评论,尽管英特尔的介绍性页面使用分号进行评论。
我的问题是,在这种情况下,是否有可能让 GAS 使用分号而不是井号,或者这可能是简单习惯的小差异之一?
我知道 GAS 也将接受 /、// 和 /* */ 但 SublimeText 不理解这些。
有趣的是,告诉 SublimeText 使用 Bash 语法突出显示是一个很好的解决方案,如下面的屏幕截图所示,但也许还有一种方法可以将 GAS 配置为也使用分号?谢谢。
assembly - 汇编语言之间的差异
我对汇编语言很陌生,我知道有很多很多类型的汇编语言。比如ARM
,MIPS
等等x86
。所以我有问题。
以下是更多信息
ARM 中的 Hello World
NASM 中的 Hello World
GAS 语法中的 Hello World
MIPS 汇编中的 Hello World
我在互联网上搜索了很多关于这些的信息。
所以我找到了这个信息。
- Gas 和 Intel Assembly 是一样的。但是语法不同
- 语法仅出于版权原因而有所不同
- ARM 有自己的语法类型
我有问题要问你?
- 汇编语言虽然变了,但代码编写顺序是不是不一样了?
- 汇编语言之间的唯一区别是它们使用的语法?
更多信息
assembly - 英特尔语法汇编中的 EXTRN 是什么?
x86 CPU:MSVC(2010)
在下面的代码中是什么EXTRN _printf:PROC
意思,为什么在“ :
”之后我们使用一些“ PROC
”指令而不是“ near
”或“ far
”?
c - 如何使用程序集插入运行 C 代码
我有带有汇编插入的 C 程序。这是代码:main.c:
我已经找到了如何编译这段代码(gcc -std=c11 -S main.c -o main),但是当我运行它时(./main) - 这是终端中的一个问题: bash: ./main: Permission否认。
当我尝试在没有 -S 标志的情况下编译它时,会出现许多不合理的错误:
错误是什么?如何修复它以正确运行我的代码?谢谢!:)
assembly - 使用 CPUID 指令了解 C 的编译器 mov [mem]、reg 指令
我一直在学校学习汇编,我正在尝试将其应用于实际情况。我有一个不再受支持的产品,我想看看使用 CPUID 执行多项检查的部分代码是如何工作的。我只研究过 MIPS 架构,所以我使用 x86 指令和寄存器的参考来理解。拆解如下:
这是它编译成的 C 代码
我不明白的是_DAT_00af1128
,当程序集将地址移入寄存器时,值是如何存储的,而不是相反。我本以为应该是MOV EBX, dword ptr [DAT_00af1124]