问题标签 [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.
assembly - 汇编(英特尔语法 + NASM)错误:尝试在任何非本地标签之前定义本地标签
我对程序集很陌生,我正在尝试使用一个程序。因此,每当我尝试编译它时,都会收到该行的错误,如代码中的注释下所列。
我想知道是否有人知道为什么 NASM 在我为其余的汇编代码定义一些东西时会检测到这个错误?
也许它与 main 的定义方式有关?
PS我只列出了代码的第一部分,因为程序很长。
感谢您的帮助
assembly - 解析器:使用 NASM 编译 Intel 程序集时出现指令预期错误
谁能告诉我为什么会发生这些错误?我对程序集很陌生,我在编译文件时遇到了一些问题。
我尝试在 NASM 中编译它,在 Debian 中使用以下代码:
我收到以下错误:
对于汇编 Intel 语法中的以下代码(仅前几行):
我被告知这段代码工作正常。
assembly - 汇编:用 32 位定义一个字(Intel + NASM)
我有一个 16 位的旧汇编代码,我想将它“翻译”成新的 32 位 NASM 代码。
在旧的 16 位代码中,字定义为:
现在我想在新的 32 位代码中定义“i”和“j”。
这就是我定义 .data 部分的方式,我相信这是正确的方式,但我希望对“事物”一词有所帮助。
linux - 组装:定义空的 2D 数组 32 位(NASM + Intel 语法)
我们如何在汇编中为 32 位代码定义空的 2D 数组 251x256?
我有一个用于汇编的 16 位代码的旧示例:
现在我想声明同样的事情,但这将适用于 NASM 的 32 位架构。
recursion - 计算 IA86 程序集中的递归函数 - 意外值
我编写了应该计算以下递归函数的汇编程序:
对于 n = 0 和 n = 1,它返回 1,对于 n = 2,它应该返回 0。但是对于这个值程序总是返回 0,看起来下面的条件从未满足。
对于任何其他值(大于 2),我都会收到分段错误。下面是整个代码:
我不知道我做错了什么。编辑:所以,我已经对 ebp 进行了试验,并将 add ebp,8 更改为:add ebp, 16。而且,现在它适用于基本条件。在我看来,堆栈溢出存在问题,但我看不到它在哪里。
gcc - 使用内联汇编的寄存器输出被清零
我已经经历了几个线程,一切似乎都措辞正确......但我的 output_01 返回错误。似乎内联程序集正在向我的变量写入零……我只是不知道为什么。下面是调用程序集的主 c 文件中的代码,以及它调用的程序集(并在头文件中抛出,虽然我不认为它有任何影响......但魔鬼在细节中...... 。正确的?
主文件
汇编文件
实验室.h 文件:
assembly - 如何在汇编中从 DL(或类似)打印字符?(英特尔语法 32 位)
在开始时,我想指出我在组装方面完全是新手。我必须制作一个从命令行获取 2 个参数的程序 - int 和 string。接下来,它必须在控制台中从字符串中打印最后一个单词,次数与 int number 一样多。我在 32 位中使用 Intel 语法——我猜这很重要。
例如:./a.out 3 "ab cd" 在屏幕上显示 "cdcdcd"
首先,我只专注于找到最后一个单词并将其打印在屏幕上——不是在循环中,而是一次。添加循环对我来说应该不是什么大问题。我尽我所能编写工作代码,它编译时没有错误,但它没有在控制台中打印任何内容 - 我认为从最后一个单词打印“char by char”是错误的。我不知道如何正确打印它。我会非常感激帮助。我仅限于在大学获得的少量知识,所以请让您的所有提示尽可能简单,以便我能理解。:)
linux - 如何用 sys_write 正确替换 printf?
我正在发布关于同一程序的新帖子 - 很抱歉,但我认为我的问题与前一个问题大不相同。我的程序在开始时有 2 个参数 - 重复次数和一个字符串。重复次数决定了字符串中最后一个单词应该打印多少次。例如:
显示在输出中
我已经使用调用 printf 制作了(在 Stack 用户的帮助下 :-))一个工作程序。它仅适用于 0-9 次重复,但它并不像主要内容那么重要 - 我的问题是如何用 sys_write 调用替换这个“调用 printf”。
我得到了我必须使用它来编译它的信息
-nostdlib
选项,但如果我的代码不正确也没关系。我尽了最大努力,我还在这里找到了一些有关可能方法的信息,但我无法使其正常工作。
打印新行效果很好,但我不知道如何处理与 sys_write 连接的参数 #2 中的字符串。如果有经验的人能找到一些时间并指出我需要在代码中更改的内容,那就太好了。通过“调用 printf”版本花了一些时间,但后来我能够进行实验,现在我完全迷失了。这里是:
对我来说,我可以运行它也很奇怪:
并且效果很好-但前提是我不使用-nostdlib(当然我必须将_start更改为main)...
assembly - GNU ASM(英特尔语法)在没有 LDA 的情况下获取标签地址
我有一个奇怪的情况,我不确定这是 GNU 汇编程序的错误还是我做错了什么。我认为我最终会切换到 nasm,但我正在使用一些为 GNU 汇编程序编写的宏。
例如,我有一个带有一些变量的标签,如下所示:
现在我希望 mov eax, var1 到 mov 指向 var1 的指针到 eax,而 mov eax, [var1] 应该将该变量的内容移动到 eax,但两者都给了我相同的代码,给了我那个变量的内容。我知道我可以使用 LDA,但这不是必需的。如果我想将指针推送到某个字符串,我必须做类似的事情
另一个问题。我用 .set 定义了一个常量,如下所示:
mov eax, const1 在 0x1000 处为我提供内存内容,而不是立即值。我能做些什么来解决这个问题?
assembly - 如何确定寄存器是否从右到左加载,反之亦然
在查看 gdb 输出并查看程序集调用时,通常我可以找到一个使用硬编码值的命令来确定寄存器是从右到左加载还是反之亦然。
通常类似于以下内容:
或者
但其他时候,没有像上面这样的值是可见的。我所看到的只是如下调用:
如何确定值是从左到右处理还是反之亦然?