Assembly 使用ASM将文件加载到内存中?

Assembly 使用ASM将文件加载到内存中?,assembly,nasm,Assembly,Nasm,我正在开发一个小的ASM程序,需要从中加载另一个平面二进制文件 磁盘/软盘/硬盘驱动器w/e,然后开始执行它。我似乎不知道如何扫描 本地文件夹或系统中的一个文件称为main.bin,然后跳转到main:部分代码 so for example we have a small file called main.bin, which is a compiled flat binary of nasm code. there is a label called main: what i need to

我正在开发一个小的ASM程序,需要从中加载另一个平面二进制文件 磁盘/软盘/硬盘驱动器w/e,然后开始执行它。我似乎不知道如何扫描 本地文件夹或系统中的一个文件称为main.bin,然后跳转到main:部分代码

so for example we have a small file called main.bin, which is a 
compiled flat binary of nasm code. there is a label called main:
what i need to do is find the file main.bin and load into memory 
at address 0x0500, then jmp/give control to the loaded program and
have it start working at the main: label in the code.

如果有人能帮我,我将不胜感激。感谢阅读:)

如果不进行系统调用,您就无法从user land执行此操作。您也不知道“main”在平面二进制文件上的位置(对象文件将是另一种情况)。

如果不进行系统调用,您无法从用户区域执行此操作。您也不知道“main”在平面二进制文件上的位置(对象文件则不同)。

详细信息将取决于您的硬件体系结构和文件系统。你能告诉我们更多的细节吗


听起来你在开发自己的操作系统。特别是因为你已经用“引导加载程序”标记了你的问题。或者您希望在其他操作系统中执行此操作?

详细信息将取决于您的硬件体系结构和文件系统。你能告诉我们更多的细节吗


听起来你在开发自己的操作系统。特别是因为你已经用“引导加载程序”标记了你的问题。或者您希望在其他操作系统中执行此操作?

哦,好的,谢谢您的回复。只是想知道其他人是否有不同的解决方案好吧,谢谢回复。只是想知道是否有其他人可能有不同的解决方案不是操作系统,只是一个工作的引导加载程序。另外,我的硬件是一个Intel core duo处理器,2.66 ghz,4 gb RAM,windows Vista,也是32位。好吧,这是另一回事。您可能需要调用INT 13函数,让BIOS为您从磁盘读取数据。您需要将引导扇区存储在磁盘上的特定位置,并使用特定格式,以便知道在平面二进制文件中跳转到何处(标签仅适用于人类,因此它们不会显示在机器代码中)。如果您还没有看到,osdever.net有一些关于这方面的好教程。您可能还希望获得vmware或其他软件的副本,以便进行测试和调试。谢谢,我使用qemu作为测试环境。很好的建议。但是,你能给我举个小例子吗?我在实际实现中遇到了问题,如果你这样做了,谢谢。不过还是要感谢您的建议。对于英特尔IA-32,您可以在诸如nw建议的osdever.net等网站,以及alt.os.development、aodfaq.wikispaces.com和其他网站上找到大量帮助。您在引导加载程序方面取得了多大进展?如果一开始就正确,那么将引导扇区和main.bin写入软盘映像中的某些固定扇区是最简单的,然后使用John Fine的rawrite.exe(或类似工具)将其写入真正的软盘。然后使用biosint13h读取它,如nw所说。你知道引导加载程序的起始地址是0x0000:07e0(请查看此详细信息)以及最后两个字节中的签名等吗?英特尔曾经免费提供他们的开发人员手册,但我不知道他们是否仍然这样做-请查看他们的网站并查找“IA-32英特尔体系结构软件开发人员手册”。不是操作系统,只是一个正常工作的引导加载程序。另外,我的硬件是一个Intel core duo处理器,2.66 ghz,4 gb RAM,windows Vista,也是32位。好吧,这是另一回事。您可能需要调用INT 13函数,让BIOS为您从磁盘读取数据。您需要将引导扇区存储在磁盘上的特定位置,并使用特定格式,以便知道在平面二进制文件中跳转到何处(标签仅适用于人类,因此它们不会显示在机器代码中)。如果您还没有看到,osdever.net有一些关于这方面的好教程。您可能还希望获得vmware或其他软件的副本,以便进行测试和调试。谢谢,我使用qemu作为测试环境。很好的建议。但是,你能给我举个小例子吗?我在实际实现中遇到了问题,如果你这样做了,谢谢。不过还是要感谢您的建议。对于英特尔IA-32,您可以在诸如nw建议的osdever.net等网站,以及alt.os.development、aodfaq.wikispaces.com和其他网站上找到大量帮助。您在引导加载程序方面取得了多大进展?如果一开始就正确,那么将引导扇区和main.bin写入软盘映像中的某些固定扇区是最简单的,然后使用John Fine的rawrite.exe(或类似工具)将其写入真正的软盘。然后使用biosint13h读取它,如nw所说。你知道引导加载程序的起始地址是0x0000:07e0(请查看此详细信息)以及最后两个字节中的签名等吗?英特尔曾经免费提供他们的开发人员手册,但我不知道他们是否仍然这样做-查看他们的网站并查找“IA-32英特尔体系结构软件开发人员手册”。