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

gnu-assembler - 汇编语言中从 0 递增到 100

这有点奇怪,但我今天正在研究 GNU 汇编器(我希望至少能够阅读语法),并试图让我这个人为的小例子工作。也就是说,我只想从 0 到 100,一直打印数字。所以几分钟后我想出了这个:

我从中得到的只是 3 一遍又一遍地打印。就像我说的,只是一个人为的例子,所以不要太担心,这不是生死攸关的问题。

(格式有点乱,但没什么大不了的)。

0 投票
2 回答
1810 浏览

c - 在 AT&T IA-32 Linux Assembler (gas) 上拆分字符串

假设我想打破 .asciz 字符串 1101011 并得到它的第一个。我该怎么做?上面的代码不起作用,它打印 49 或其他东西。

0 投票
1 回答
781 浏览

linux - 在 Linux IA-32 汇编器(gas)上创建子字符串

我想从我的原始(字符串)中创建一个包含 3 个 asciz 字符的子字符串(迷你字符串)。这东西在运行时没有打印,所以我不知道我到底在做什么。为什么不打印?我是否正确创建了迷你字符串?

0 投票
2 回答
17069 浏览

gcc - .com 是什么意思?

我刚刚翻译了这个程序,

使用 gcc 生产组装,

.com 是什么意思?大坝使用堆空间、堆栈空间还是数据空间?

0 投票
7 回答
31308 浏览

linux - 是否可以在 Linux x86 GAS 程序集中创建没有系统调用的线程?

在学习“汇编语言”(在 x86 架构的 linux 中,使用 GNU 作为汇编器)的同时,一个令人惊叹的时刻是使用系统调用的可能性。当您的程序在用户空间中运行时,这些系统调用非常方便,有时甚至是必要的。
然而,系统调用在性能方面相当昂贵,因为它们需要中断(当然还有系统调用),这意味着必须从用户空间中的当前活动程序到内核空间中运行的系统进行上下文切换。

我想说的是:我目前正在实现一个编译器(用于大学项目),我想添加的额外功能之一是对多线程代码的支持,以提高编译程序的性能. 因为一些多线程代码将由编译器自己自动生成,这几乎可以保证其中也会有非常少量的多线程代码。为了获得性能上的胜利,我必须确保使用线程会实现这一点。

然而,我担心的是,为了使用线程,我必须进行系统调用和必要的中断。因此,微小的(自动生成的)线程将受到进行这些系统调用所需时间的高度影响,甚至可能导致性能损失......

因此,我的问题是双重的(下面有一个额外的奖励问题):

  • 是否可以编写可以同时在多个内核上同时运行多个线程而无需系统调用的汇编代码
  • 如果我有非常小的线程(就像线程的总执行时间一样小),性能损失,或者根本不值得付出努力,我会获得性能提升吗?

我的猜测是,如果没有系统调用,多线程汇编代码是不可能的。即使是这种情况,您是否有建议(甚至更好:一些真实的代码)来尽可能高效地实现线程?

0 投票
2 回答
4797 浏览

assembly - 如何将 NASM“推送字节”转换为 GAS 语法?

我正在将 NASM 源“移植”到 GAS,我发现了以下代码行:

GAS 不允许“push byte”或“pushb”。

我应该如何将上面的代码翻译成 GAS 语法?

谢谢

0 投票
3 回答
2899 浏览

linux - 在哪里可以找到 i486-linux-gnu 指令集的中断列表?

我正在为我在学校的高级项目开发一个编译器,并且我正在使用 AS (GNU Assembler) 进行汇编。我所有的测试都相当成功,但我所见过的中断列表似乎没有工作或与我的测试代码匹配。

该版本AS的相关信息:

GNU assembler 2.17 Debian GNU/Linux 版权所有 2005 Free Software Foundation, Inc。您可以根据 GNU 通用公共许可证的条款重新分发它。该程序绝对没有任何保证。这个汇编器是为“i486-linux-gnu”的目标配置的。

0 投票
1 回答
4069 浏览

gcc - gnu 汇编器指令的文档

我现在正在尝试学习 mips 组装。为此,我写了一个非常简单的c程序......

...并在 mips 机器上使用 gcc 的 -S 选项编译它以生成汇编代码。下面是 main 函数的开头部分:

然后,我试图通过查看gas的文档来弄清楚这一切意味着什么,但我在那里找不到任何这些指令。那么它们是什么意思呢?我在哪里可以找到更多信息?

0 投票
6 回答
7891 浏览

nasm - gas vs. nasm:哪个汇编程序产生最好的代码?

这两种工具都直接将汇编指令翻译成机器代码,但是否有可能确定哪一种产生最快和最干净的代码?

0 投票
5 回答
6259 浏览

c - x86、win32 上空程序的 GCC 汇编输出

我编写空程序来惹恼stackoverflow编码器,不是。我只是在探索 gnu 工具链。

现在以下内容对我来说可能太深了,但为了继续空程序传奇,我已经开始检查 C 编译器的输出,即 GNU 所消耗的东西。

测试.c:

gcc -S 测试.c

你能解释一下这里发生了什么吗?这是我理解它的努力。我已经使用了as手册和我的 x86 ASM 知识:

  • .file "test.c"是逻辑文件名的指令。
  • .def:根据文档“开始为符号名称定义调试信息”。什么是符号(函数名/变量?)以及什么样的调试信息?
  • .scl:文档说“存储类可能会标记符号是静态的还是外部的”。这与我从 C 中知道的静态外部相同吗?那'2'是什么?
  • .type:存储参数“作为符号表条目的类型属性”,我不知道。
  • .endef: 没问题。
  • .text:现在这是有问题的,它似乎是一个叫做部分的东西,我已经读过它是代码的地方,但是文档并没有告诉我太多。
  • .globl “使符号对 ld 可见。” ,手册对此很清楚。
  • _main:这可能是我的主要功能的起始地址(?)
  • pushl_: 长(32 位)推送,将 EBP 放入堆栈
  • movl: 32 位移动。伪C:EBP = ESP;
  • andl: 逻辑与。Pseudo-C: ESP = -16 & ESP,我真的不明白这有什么意义。
  • call:将 IP 推入堆栈(因此被调用的过程可以找到返回的路径)并继续原处__main。(什么是__main?)
  • movl:这个零必须是我在代码末尾返回的常量。MOV 将此零放入 EAX。
  • leave: 在 ENTER 指令 (?) 后恢复堆栈。为什么?
  • ret: 回到栈中保存的指令地址

感谢您的帮助!