Mar*_*cos 3 assembly operating-system bios nasm low-level
所以,我决定今年夏天学习80x86的汇编语言.我收集了四本关于装配的书.到目前为止,我已经阅读了前两个,虽然我已经读了第三个,但我认为我理解了所有已呈现的内容.我已经写了一些Hello World程序以及书中的其他一些小练习,我觉得这种语言非常舒服.然而,到目前为止,还有一件事没有涉及到这本书,而且这是我最感兴趣的事情.也就是说,你如何直接从汇编语言处理硬件?到目前为止,作者已经使用了系统调用,跳转到内存中的特定函数和中断,但这些方法依赖于系统中已存在的软件.
我正在使用NASM编写我的程序并将它们加载到旧的Pentium I计算机中.我现在不使用任何操作系统,只是BIOS.我想我正在尝试做的是编写我的小型操作系统,它是自主的,不依赖于BIOS(初始启动除外).谁能帮我?
您是如何仅使用BIOS启动和运行代码的?
假设你真的只使用BIOS,或者即使你使用DOS也没关系.您只需寻址硬件,在指令中指定某些硬件寄存器的地址,或将该地址放入寄存器并进行间接读取或写入寄存器.
当操作系统阻碍时,访问硬件是很困难的,当然,使用操作系统,硬件做一些有用的事情就更容易了.
幸运的是,BIOS已经枚举了pci(e)硬件,即PC的处理方式,所以你可以使用一些我认为可以找出枚举硬件的DOS实用程序.另一种"PC服务方式"硬件的PCI(e)地址也是x86地址,两个地址空间重叠,所以一旦获得某些外设的PCI(e)地址,那么你可以在你的地址中使用该地址码.自然因为pcie窗口对于像视频这样的东西来说相对较小,你仍然需要通过外围存储器进行寻呼,但这是外围特定的而不是PC或x86的东西.
如果你的主板有一个串口/ uart,那将是直接访问硬件的最佳起点.
更好的方法是使用模拟器pcemu或其他,而不是在硬件上启动,这取决于您选择的模拟器,您可以更好地了解正在发生的事情,像uart这样的外围设备甚至可能更加简单.不必初始化它只是开始抛出字节(直到你了解更多).