《30天自制操作系统》——从引导区到磁盘

本文详细介绍了如何从引导区跳转到磁盘上的其他位置执行程序,通过《30天自制操作系统》中的示例,演示了如何将程序加载到内存并执行,涉及磁盘镜像、内存布局和BIOS调用等概念。
摘要由CSDN通过智能技术生成
上一篇讲了如何使用虚拟机运行我们写好的操作系统,但上一篇的操作系统其实仅仅存在于引导扇区中,接下来我们将看到程序如何从引导扇区跳到其他位置。

引导区内容的装载位置为 0x00007c00-0x00007dff,规定该位置的人是当年开发IBM-PC的工程师们。0x7e00-0x9fbff是操作系统可以随便使用的内存位置。按照《30天自制操作系统》中所讲,我们把前10个磁道的数据都读入内存,内存位置从0x8000开始。因此磁盘镜像文件中,位于地址x的字符加载到内存的位置就为0x8000+x。现在设我们需要执行磁盘镜像上位于0x004200号地址的程序,那么其内存地址就为0x8000+0x4200=0xc200。

程序一、ipl.nas
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; hello-os
; TAB=8

    ORG    0x7C00

; 以下的记述用于标准FAT12格式的软盘
start:
    JMP    entry
    DB    "HELLOIPL"    ; 启动区名称(8字节)
    DW    512        ; 扇区大小(512字节)
    DB    1        ; 簇大小(1扇区)
    DW    1        ; FAT起始位置
    DB    2        ; FAT个数
    DW    224        ; 根目录大小(224项)
    DW    2880        ; 磁盘大小(2880扇区)
    DB    0xf0        ; 磁盘种类
    DW    9        ; FAT长度
    DW    18        ; 每个磁道扇区数
    DW    2        ; 磁头数
    DD    0        ; 不使用分区
    DD    2880        ; 重写一次磁盘大小
    DB    0,0,0x29    ; 意义不明
    DD    0xffffffff    ; 可能是卷标号码
    DB    "HELLO-OS   "    ; 磁盘名称(11字节)
    DB    "FAT12   "    ; 格式名称(8字节)
    RESB    18        ; 空出18字节

entry:
    MOV    AX,0        ; 初始化寄存器
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值