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

c - 在 GCC 中使用另一个汇编程序(MASM、NASM、TASM 等)

我已经在这里和互联网上查看了一段时间的问题,但我似乎无法确定是否可以使用 GAS 以外的其他东西使用 GCC 进行内联汇编。我试图找出是否可以避免不仅使用 GAS 的 AT&T 语法(不过,我知道如何将 Intel 语法与 GAS 一起使用),而且可以避免使用扩展的 asm 格式。虽然这不是为了一个项目或我自己的好奇心以外的任何东西,但我真的很感激我能得到的任何帮助(这实际上是我在这里的第一个问题,因为我找不到关于它的答案)!另外,如果这有什么不同,我目前在 Windows 上使用 DevC++(用于 C 代码,而不是 C++)。

谢谢,汤姆

0 投票
1 回答
1125 浏览

sorting - 作业帮助 - GNU 汇编程序选择排序问题

我必须在汇编中创建一个程序,将用户的输入作为最大数组大小,然后让用户创建一个该大小的数组。我应该将该值缓冲到最多 1000 个数组项(所有整数)然后我必须对数组运行选择排序并输出。

我在 IBM 网站上找到了以下选择排序。

我已经经历了它,我可以理解 90% 的情况,所以我对此很满意。我什至不知道从哪里开始是如何获取用户输入并用它创建一个数组?以及如何使用缓冲区来设置数组大小的限制?很感谢任何形式的帮助!

0 投票
2 回答
1004 浏览

gcc - GCC 调用标签作为函数

一切尽在标题中。由于某些原因,我必须这样做。

但是当我编译我的代码时,GCC(或者 GAS 可能......)显示以下错误:

.../Temp/cc1C1fjs.s:19:错误:立即操作数非法,绝对跳转

代码:

我确信这应该可行,因为我尝试使用 CreateThread 函数(我在 Windows 下)创建一个线程,将标签地址指定为入口点,并且效果很好。那么如何确保编译器接受这种语法呢?或者还有其他方法可以做到这一点?

0 投票
1 回答
1133 浏览

optimization - Gnu 汇编程序 (GAS) 优化

我实际上是在学习组装,我选择了 Gas,但问题是:

1) 我只知道 Intel 语法,我在一个页面中看到带有 intel 语法的 Gas 在某些情况下优化得不是很好。这是正确的还是我错的?我在谈论这个网络:

http://wiki.osdev.org/FASM

2)然后我还看到(我不记得页面)气体可以在几种架构中组装的事实也会减慢组装程序的速度。这样对吗?

3) 你推荐我的哪个汇编程序产生高度优化的代码?我在其他问题中看到,在某些情况下,每个汇编程序都可以转换为不同的操作码。我介于 YASM、FASM、GAS 和 NASM 之间,但接受其他建议。众所周知,FASM 非常快......

非常感谢!保持这个伟大的社区!

0 投票
1 回答
434 浏览

c - 如何访问 asm 中的数组?

我如何greet[0]进入一个寄存器,例如%eax

我猜:

但是,我遇到了内存错误。

0 投票
1 回答
264 浏览

assembly - 关于ASM执行流程的问题

我不确定如何解释 ASM 执行流程。到目前为止,我查看过的所有文件都有明确的跳转(Intel x86 AT&T 语法,即 jmp 或 jl)到 ASM 文件中的标签。

我的问题:当您到达标签末尾而没有明确跳转到其他标签时会发生什么。执行是否继续到下一个标签?

例子:

执行 'foo' 标签下的操作码后,汇编器是否移动到 'nextLabel'?

提前致谢!

0 投票
1 回答
2031 浏览

gcc - 如何在条件汇编期间将标志传递给预处理器

我想将 Makefile 中定义的某些宏传递给预处理器,如以下代码中的“_DBGR_ON_”,以便相应地组装代码。此选项在 diab 编译器(用于 powerpc 的 c 交叉编译器)中工作,方法是在 makefile 中使用 -D_DBGR_ON_ 定义它并将其包含为汇编器标志。但是如何将它包含在 GCC 中。

当我做同样的事情时(ASFLAGS = -mregnames -D_DBGR_ON_.),我收到错误:无法识别的选项 `-_DBGR_ON_'

然后,我尝试了 ASFLAGS = -mregnames -D _DBGR_ON_,我得到“无法打开 _DBGR_ON_ 进行阅读:没有这样的文件或目录”

请帮助,因为 -D 选项在 GCC 中被忽略。

我使用 -D 选项进行条件汇编,在 Diab 中编译。如何在 GCC 中做到这一点。我被困在这里。

问候, 图拉西

startup.s 文件的内容...

.......等等..

0 投票
1 回答
538 浏览

assembly - mov 0, %eax 上带有 x86 程序集的 Segfault

我正在尝试组装一小段 x86 代码。我在一台 32 位机器上,我编写了以下代码。它应该只是将值添加到 eax 然后返回。我意识到不会有任何输出。当我使用

gcc main.S -o main

它编译没有错误。但是当我运行它时会出现段错误(gdb 声称它在第一条 movl 指令上出现段错误)。main.S 中包含以下代码。我究竟做错了什么?

0 投票
2 回答
5401 浏览

assembly - 宏在 GAS 中替换一个常数

X86 GNU 程序集上的那个宏有什么问题?它表示符号 S 在链接期间未定义。

我像这样使用它

0 投票
1 回答
178 浏览

unix - 我需要在 GAS 中初始化堆栈吗?

你好!目前我正在学习组装的基础知识。早些时候我使用的是 TASM 和 Intel 语法。在那里我不得不以某种方式初始化堆栈。但现在我使用的是 GNU 汇编器和 AT&T 语法。我查看了很多示例,没有看到任何堆栈的声明/初始化。我想知道我是否必须这样做?或者,可能是,它是在没有我帮助的情况下制作的?如果是这样,它究竟是如何自动初始化的?在数据段中获取重要信息是否存在风险?我也没有注意到任何关于堆栈的指令。

提前感谢您的回答!哦,还有一件事:有没有关于类 Unix 系统的 ASM (GAS) 编程的好书?