问题标签 [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 回答
564 浏览

assembly - [BITS 16] 和 [ORG 0x0000] 指令的顺序

我正在开始一些编写内核的实验并从中获得乐趣。我已经完成了基本的引导加载程序和以下指令:

然而,在内核教程中,它从以下内容开始:

我想知道给出这些指令的顺序是否有所不同?我正在使用 NASM 版本 2.06rc2,OpenSUSE 11.2

0 投票
1 回答
1592 浏览

assembly - 引导加载程序和内核错误

我们正在做一个项目来学习如何编写内核并了解细节。我们编写了一个引导加载程序,它似乎可以工作。但是,我们在内核加载方面遇到了问题。我将从第一部分开始:

引导加载程序.asm:

bootloader.asm 对于编辑器来说太长了,不会导致它卡住。此外,引导加载程序和内核确实在bochs中工作,因为我们确实收到了“欢迎使用我们的操作系统”的消息。无论如何,以下是我们目前所拥有的内核。

内核.asm:

使用 nasm 2.06rc2 我编译如下:
nasm bootloader.asm -o bootloader.bin -f bin
nasm kernel.asm -o kernel.sys -f bin

我们将 bootloader.bin 写入软盘,如下所示:
dd if=bootloader.bin bs=512 count=1 of/dev/fd0

我们将 kernel.sys 写入软盘,如下所示:
cp kernel.sys /dev/fd0

正如我所说,这适用于bochs。但是从软盘启动我们得到如下输出:

Loading Kernel Shell
......
ERROR : Press key to reboot

其他细节:OpenSUSE 11.2、GNOME 桌面、AMD x64 我可能遗漏的任何其他信息,请随时询问。我试图把所有需要的东西都放在这里。如果需要,我可以找到一种方法将整个 bootloader.asm 发布到某个地方。由于几个原因,我们对使用 GRUB 也不是很感兴趣。这可能会改变,但在我们真正考虑 GRUB 之前,我们希望看到这次引导成功。

编辑:引导加载程序假定为 512 字节,写入磁盘的引导扇区(第一个扇区)。相信我的话,引导加载程序512 字节编译的。内核应该在下一个扇区。

0 投票
2 回答
10077 浏览

macos - 在 OSX 上加载/执行 ELF 文件的可能性

我只是好奇在 OSX 上加载和执行 elf 文件的可能性。我知道标准的可执行格式是 MACHO,但是 NASM 无法为 MACHO 对象生成调试信息(并且我需要使用 NASM)。我想这是一个很长的镜头,但我不认为我可以使用 ELF 文件。我可以用 NASM 构建它们,但我什至无法将它们与 LD 链接起来。

0 投票
3 回答
3061 浏览

assembly - 将 NASM 汇编中的数字平方而不进行乘法运算

是否可以在不进行任何乘法(通过使用移位等)的情况下对存储在寄存器中的数字(比如 eax)进行平方?我将在 32 位汇编中对 16 位数字进行平方,因此溢出应该不是问题。我正在使用 NASM x86 程序集来创建程序。在此先感谢您的帮助。

0 投票
4 回答
2603 浏览

assembly - 如何在不使用库的情况下创建汇编程序?

从字面上看,我才刚刚开始寻求学习汇编语言。我在 Windows Vista 上使用 NASM 汇编程序。

通常,当我开始学习一门新语言时,我会复制别人的 Hello World 代码并尝试逐行理解它。但是,我发现很难找到一个不引用其他库的 Hello World 程序!你看,如果每一行代码都与整个附加代码库密切相关,那么试图理解每一行代码是没有意义的!

我想学习汇编的原因之一是我可以几乎完全控制我编写的程序。我不想依赖任何图书馆。

所以我的问题是:任何人都可以将 NASM 兼容的汇编代码提供给可以输出到 Windows Vista 控制台的完全独立的 Hello World 程序吗?

或者,我很欣赏可能需要一个库来告诉 pogram WHERE 打印输出(即 Windows 控制台)。除此之外,我看不出为什么需要任何库。我忽略了什么吗?

0 投票
2 回答
795 浏览

linux - linux内核从我的引导程序引导

我希望使用我自己的引导加载程序加载 linux .. 初步研究和谷歌告诉我,我将不得不使用 start_kerne() 函数.. 我想问我如何从程序集中调用 start_kernel() .. 我已经格式化了我的 USB进入 ext3 并将编译后的内核粘贴到那里.. 现在我该如何启动 linux 内核?欢迎任何帮助//提前谢谢你

摩辛。

0 投票
1 回答
1475 浏览

x86 - 为什么为 NASM 编写的这个“hello world”x86 引导加载程序代码在没有 [BITS 16] 和 [ORG 0x7C00] 指令的情况下工作?

0 投票
1 回答
1429 浏览

assembly - NASM 和关于 ADC 的问题 - ASM 8086

我在高中学习装配,我想尝试在家里制作装配程序。
我下载了 NASM,但我不明白如何用它运行 .s 文件——如果你能在这里写一个简单的方法来运行它,我会很高兴 :-)

另外我还有一个问题:当我使用 ADC 为例时:AL = 01 和 BL = 02,以及 CF = 1,当我这样做时:ADC AL,BL AL 是 3 还是 4?(添加或不添加CF?)

谢谢!!

0 投票
3 回答
1624 浏览

x86 - 选择正确的和学习编译器编写的汇编器

我正在编写一个编译器,并且我已经完成了它们在所有编译器书籍中向您展示的所有步骤(标记化、解析、语法树结构等)。(请不要评论“编写编译器的资源”问题的链接!)。

我选择使用 NASM 和 alink 作为我的后端。

现在我的问题是:我只是找不到任何学习 NASM 和一般汇编的好资源。

x86 程序集上的 wikibook(德语)太可怕了。他们甚至没有解释他们在那里编写的代码,我目前什至无法得到简单的东西,比如将 1 加到 2 并输出结果。

  • 我在哪里可以学习 NASM x86 汇编?
0 投票
3 回答
2352 浏览

assembly - 80x86 16 位 asm: lea cx, [cx*8+cx] 导致 NASM 出错(编译 .com 文件)

NASM 给出的错误(尽管我的操作系统正常)是“无效的有效地址”。

现在我已经看到了许多关于如何使用 LEA 的示例,我认为我做对了,但我的 NASM 不喜欢它。我试过lea cx, [cx+9]了,它奏效了;lea cx, [bx+cx]没有。

现在,如果我将寄存器扩展到 32 位(即lea ecx, [ecx*8+ecx]),一切都会好起来的,但我只能使用 16 位和 8 位寄存器。

这里有没有知识渊博的人可以向我解释为什么我的汇编程序不允许我按照我认为应该使用的方式使用 lea ?