day01

您所在的位置:网站首页 day01 day01

day01

2022-12-25 18:14| 来源: 网络整理| 查看: 265

; haribote-ipl ; TAB=4 ORG 0x7c00 JMP entry DB 0x90 DB "HARIBOTE" ; 启动区的名称 可以使任意字符 DW 512 ; 设置每个扇区的大小 DB 1 ; 簇的大小 也就是OS 每次对磁盘读写的 最小单元 DW 1 ; FAT的 起始位置 第一个扇区 0 盘 0 道 1 扇区 ;BIOS 读取该扇区的内容 并将其放置在0x7C00位置 DB 2 ; FAT的个数 DW 224 ; 根目录的大小 一般设置为224 DW 2880 ; 该磁盘的大小 为2880扇区 2*80*18 ;两个磁头 每个磁头80个磁道 每个磁道 18个扇区 DB 0xf0 ; 磁盘的种类 DW 9 ; FAT的长度 必须为9个扇区 DW 18 ; 1个 磁道上 有多少个扇区 必须为18 DW 2 ; 磁头数 必须是2 DD 0 ; 不使用分区 必须是 0 DD 2880 ;重写 一次磁盘大小 DB 0,0,0x29 ; 固定写法 DD 0xffffffff ; 卷标号 DB "HARIBOTEOS " ; 磁盘名称 DB "FAT12 " ; 磁盘格式名称 RESB 18 ; 空出 18个 字节 ; 程序主体 entry: MOV AX,0 ; 初始化寄存器 MOV SS,AX MOV SP,0x7c00 MOV DS,AX ; 启动区 装载下一个块的内容 MOV AX,0x0820 MOV ES,AX MOV CH,0 ; 柱面0 MOV DH,0 ; 磁头0 MOV CL,2 ; 扇区2 MOV AH,0x02 ; AH=0x02 : 读盘 BIOS 的 0x13中断 MOV AL,1 ; 读取 一个扇区 MOV BX,0 MOV DL,0x00 ; A驱动器 INT 0x13 ; 调用磁盘的BIOS JC error ;如果调用BIOS 出现错误 则CF为1 有错误 错误码写入AH内 ; 一些处理函数 fin: HLT ; 让CPU停止 等待指令 JMP fin ; 无限循环 error: MOV SI,msg putloop: MOV AL,[SI] ;间接寻址 ADD SI,1 ; SI 偏移到 下个地址 CMP AL,0 ;因为 [SI]的结束 是0 JE fin MOV AH,0x0e ; 显示一个文字 MOV BX,15 ; 指定字符颜色 INT 0x10 ; 调用显卡的BIOS JMP putloop ;循环 msg: DB 0x0a, 0x0a ; 输出两个换行 DB "load error" DB 0x0a ; 换行 DB 0 RESB 0x7dfe-$ ; 填写0x00 直到7dfe DB 0x55, 0xaa ;启动区 最后两个字节 必须是这种格式0x55AA

ES 寄存器的内容为 0x0820 BX = 0 所以 这个扇区会被装载到 ES*16+BX 即 0x8200 所以 0x8200-0x83ff 都是这个扇区的内容



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3