问题标签 [nasm]

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 回答
3086 浏览

debugging - 如何调试汇编程序?

我有一个用程序集编写的程序,该程序因分段错误而崩溃。(代码无关紧要,但在这里。)

我的问题是如何用 GDB 调试汇编语言程序?

当我尝试在 GDB 中运行它并执行回溯时,我没有得到任何有意义的信息。(只是十六进制偏移量。)

如何调试程序?

(顺便说一句,如果这有帮助的话,我在 Ubuntu 上使用 NASM。)

0 投票
4 回答
5760 浏览

linux - 如何在 x86 程序集中调用 fgets?

根据文档fgets(),该函数采用三个参数:

  • char * - 将保存输入的字符串
  • int - 一个整数,表示要读取的最大字符数
  • FILE * -FILE *要读取的流

我可以毫无问题地调用该函数。我只是push将三个参数入栈,调用函数,并加ESP12。

我的问题是参数#3。什么应该作为FILE *标准输入传入?在 C 中,我可以使用stdin,但我不知道 x86 程序集中的等价物是什么。


更新:我在 Linux 上使用 NASM。

0 投票
1 回答
1626 浏览

assembly - 为什么 scanf 在提供双精度时返回 0.000000?

我有以下汇编代码(为 Linux 上的 NASM 编写):

当我组装并运行程序时,我得到了预期的提示。但是,无论我输入什么数字,输出始终是0.000000.

我究竟做错了什么?

0 投票
4 回答
15292 浏览

assembly - 使用汇编打印十六进制数字

我正在尝试学习 NASM 汇编,但我似乎在为高级语言中看似简单的东西而苦苦挣扎。

我使用的所有教科书都讨论了使用字符串——事实上,这似乎是他们最喜欢的东西之一。打印hello world,从大写变为小写等。

但是,我试图了解如何在 NASM 程序集中增加和打印十六进制数字,但不知道如何继续。例如,如果我想以十六进制打印 #1 - n,我将如何在不使用 C 库的情况下执行此操作(我已经能够找到使用的所有引用)?

我的主要想法是在 .data 部分中有一个变量,我将继续增加它。但是如何从这个位置提取十六进制值?我似乎需要先将其转换为字符串...?

任何建议或示例代码将不胜感激。

0 投票
1 回答
1024 浏览

assembly - 汇编中的内存损坏?

我目前有一个汇编程序,它模仿 Linux 中的 hexdump 系统功能。本质上,它打印当前行号,将二进制值转换为十六进制字符串,并显示与十六进制字符串关联的当前 ASCII。

我的打印行号系统出现问题。该函数仅在代码的其他部分被注释掉时才起作用——否则会产生不正确的结果。但是,我不明白为什么代码的两部分应该相互影响,因为使用的寄存器已被清除。

当 PrintLineNum 函数工作时,它将当前行号打印到行的左侧

但是,当重新启用打印十六进制字符串的功能时,它开始“跳过”。

我不确定为什么打印十六进制字符串会影响行数——据我所知,这两个操作是独立的。任何建议、建议或改进都会有所帮助。请注意,其中一些代码来自 Duntemann 的“Assembly Language - Step by Step”。我刚刚添加了行号和 ASCII 打印输出。我在下面标记了有问题的代码部分。

感谢您的帮助!

0 投票
1 回答
11588 浏览

linux - 在 ubuntu 上运行汇编代码

我试图运行的代码如下。我使用 nasm util 将其转换为目标文件。当我尝试执行时,它说“无法执行二进制文件”。

我运行命令:nasm -f elf -o helloworld.o helloworld.asm


这是我在汇编中的第一个程序,除了编译一些基本的 c 程序外,我没有使用 ubuntu 。我需要一些帮助谢谢大家。

0 投票
1 回答
1548 浏览

assembly - Nasm,引导加载程序切换前景色和背景色

嘿,我正在使用 nasm 和虚拟机等编写引导加载程序。无论如何,我使用 vram 来显示由键 s、d、f、g 触发的背景和字体颜色变化。S 用背景颜色切换字体颜色。我知道如何做到这一点,但我不知道正确的方法。vram 设置为 2 个字节,第一个是字符,第二个是它的属性。这些是背景然后是字符颜色。所以我需要拿这些并切换它们。这将切换字体颜色和背景颜色。我如何用代码实际做到这一点?

第二个问题:我使用这个循环来检测键的我如何将这些键更改为 Ctrl + 键。

谢谢你。

0 投票
5 回答
3732 浏览

assembly - nasm 随机数生成器函数

我需要一个用 nasm 编写的随机数生成器函数。我很抱歉问,但我找不到任何!

0 投票
1 回答
492 浏览

assembly - asm中传入参数时的字符串长度是多少?

我将 ac 文件中的两个字符串作为参数传递给 asm 文件。然后我将这些从堆栈移动到 ecx 和 edx。我怎么能确切地知道它们的长度是多少?像 c 中的 strlen(string) 一样吗?

0 投票
3 回答
7538 浏览

operators - NASM 中的 MUL 运算符与 IMUL 运算符

MUL 运算符仅采用单操作数形式有什么原因吗?
IMUL 运算符可以采用三种不同的形式(一个、两个或三个操作数),这样更方便。从技术角度来看,我看不出 MUL 运算符不能采用二/三操作数形式的任何原因。