《30day自制操作系统》学习笔记03

本文介绍了将IPL和Haribote操作系统分开的过程,并引入C语言编写部分操作系统代码。在Haribote中调用显卡BIOS以显示窗口。内容涉及汇编知识,如磁盘BIOS的调用、内存缓冲区的使用以及显卡模式设置。启动流程包括从磁盘读取内容到内存并执行。文章还提到了文件在内存中的位置和磁盘映像的存储布局。
摘要由CSDN通过智能技术生成

(今天主要是将ipl和操作系统haribote分开,并加入了C语言写一部分操作系统,并且在haribot中调用了显卡BIOS显示了窗口)

一、汇编知识

ipl.nas文件是最初的磁盘映像文件;haribote.nas中存放的是操作系统(haribote.nas先用nask编译成.sys文件,后再将这个文件保存到磁盘映像.img里面,.sys文件的文件名在0x2600处,内容在0x4200处)。

再这一章节中,作者先向ipl.nas中加入了调用磁盘BIOS、读盘、读盘试错的指令;后向操作系统中加入了fin、调用显卡BIOS显示黑;并在最后导入了c语言。

ipl.nas完成初始化寄存器,并调用BIOS输出文字“hello,world",之后读取磁盘中的内容到内存中。磁盘内容包括程序,haribote.nas文件内容前后两部分拆分成asmhead.nas、bootpack.c。asmhead.nas实现大部分的设置,bootpack.c暂时只用来hlt,但是c语言没有hlt,需要naskfunc.nas文件来补充_io_hlt:的功能。

启动过程推理:开机,BIOS读取磁盘启动区的启动程序到内存中,启动程序读取磁盘剩余程序到内存,内存中执行该程序调用执行其他功。

1.调用磁盘BIOS读取磁盘内容

;读磁盘
MOV        AX,0x0820
MOV        ES,AX
MOV        CH,0            ; 柱面0
MOV        DH,0            ; 磁头0
MOV        CL,2            ; 扇区2

MOV        AH,0x02         ; AH=0x02——读盘;0x04——校验;0x0c——寻道
MOV        AL,1            ; 1个扇区    AL=处理对象的扇区数
MOV        BX,0            ; ES:BX=缓冲地址
MOV        DL,0x00         ; A驱动器
INT        0x13            ; 调用磁盘BIOS
                             返回值:FLACS.CF=0 表示没有错误,AH=0
                                    FLACS.CF=1  表示错误,错误号码存入AH
JC         error           ; 进位标志是1就跳转

磁盘与光盘不同,两面都能记录。磁盘有80柱面,2磁头,18扇区,每个扇区512字节,共计1440KB。

缓冲区地址:要把磁盘上读取的数据装载到内存中的哪个位置。

内存分布:0号地址放BIOS的常用函数;0x7c00~0x7dff启动区内容的装载地址;0xf0000放BIOS本身;0x8000~0x81ff留给启动区;作者将启动程序装在地址在0x7c00(启动区程序,即ipl.nas文件中的程序);缓冲区地址分配到0x8200(从软盘C0-H0-C1读取的数据)。那么.img文件装载在磁盘哪里?0x7c00和0x8000处有何不同?0x8000可能并没有装载启动区程序,从0x8200才开始装载磁盘第二个扇区的内容。

补充:JNC-进位标志为0跳转;JAE-大 于等于跳转;JBE-小于等于跳转;

  1. 设置显卡模式

; haribote-os
; TAB=4

        ORG        0xc200            ; 程序装载到内存中的地址

        MOV        AL,0x13           ; VGA显卡,320x200x8bit彩色
        MOV        AH,0x00
        INT        0x10
fin:
        HLT
        JMP        fin

文中总结:文件编译后的二级制文件中,文件名在0x2600处,文件内容在0x4200处。因为磁盘缓存区内容加载到内存的0x8000处,所以文件内容被加载到内存中0x4200+0x8000=0xc200处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值