将两个ORG放在一起
我正在构建一个引导加载程序,用于引导位于软盘的1000h
部分的内容。我正在使用Fasm(因为我的朋友只使用Fasm,他帮助我),但我更喜欢使用Nasm,现在我遇到了语法问题,然后我想知道我该怎么办这在NASM:将两个ORG放在一起
org 7C00h
%include "boot.asm"
org 1000h
%include "kernel.asm"
PS:我已经把使用NASM语法风格%include
指令,对FASM应该只是include
。
你的问题的说明或什么,我想它是因为它是一个有点难以从问题告诉见here。在张贴问题时,这是一个好主意,“我遇到的语法问题”,以实际显示的语法问题是什么 :-)
见here的解决方案(但可能无法正常工作,见下文) 。
基本上,NASM中的org
语句旨在设置该段的基地址,并且不能用于将字节任意插入流中。它建议你使用类似的东西:
org 1000h
%include "kernel.asm"
times 7c00h-($-$$) db 0 ; pad it out with zero bytes
%include "boot.asm"
然而,你有没有想过你想要做什么。如果你正在创建一个平面二进制文件加载到内存中,我不认为你需要在一个文件中引导扇区和内核。
BIOS将在7c00:0时将引导扇区作为单个块加载,并且在该块的开始处有内核时几乎肯定会被混淆。我认为你需要做的是创建两个完全独立的平面二进制文件,一个用于引导扇区,另一个用于内核。 BIOS会加载你的启动扇区,然后你的启动扇区会加载你的内核。
然后你可以把相关的org
声明放在两个源文件中,你的问题应该有希望解决。
简单的答案是,这不能在NASM中完成。 org
声明在FASM中的作用与在NASM中的作用相同,但在MASM中有所不同。 在NASM中,示例代码必须单独组装,然后合并以创建最终图像。
快乐的回答是,它是此在需要组合(与NASM)或组装(与FASM)成一个单一的具有不同开始地址码的稀土(和可能只)的情况下图片。 引导扇区由BIOS转移到7C00h
。紧随其后的介质(软盘,硬盘驱动器,USB闪存驱动器)由有效负载通过引导扇区 - 引导装载程序传输到它的起始地址。