gpt4 book ai didi

assembly - 将两个 ORG 放在一起

转载 作者:行者123 更新时间:2023-12-03 23:15:46 27 4
gpt4 key购买 nike

我正在构建一个引导加载程序,用于引导位于软盘 1000h 部分的内容。我是用 Fasm 做的(因为我的 friend 只使用 Fasm,他正在帮助我),但我更喜欢使用 Nasm ,现在我遇到了语法问题,那么我想知道我怎么能在 Nasm 中做到这一点:

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 希望将您的引导扇区作为单个 block 加载到 7c00:0,并且当内核位于该 block 的开头时几乎肯定会感到困惑。我认为您需要做的是创建两个完全独立的平面二进制文件,一个用于引导扇区,另一个用于内核。 BIOS 将加载您的引导扇区,然后您的引导扇区将加载您的内核。

然后你可以把相关的org声明放在两个源文件中,你的问题应该可以解决。

关于assembly - 将两个 ORG 放在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3129555/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com