关闭

《30天自制操作系统》U盘启动,真机运行(16天)

标签: osu盘指令启动信息
1364人阅读 评论(3) 收藏 举报
分类:

首先说一下到目前为止U盘启动遇到的问题,首先的一个问题是“system volume information“,目前尚未解决,这个问题可能导致U盘启动失败,我猜测可能是由于每一次重新将OS写到U盘的时候原来的信息没有被清除,导致了在执行的时候把那些没有被覆盖掉的信息当成指令执行了。这个问题我会继续的追踪下去,力求能找到引起这个问题的真正原因是什么,如果有遇到同样问题的朋友,能留言相告。

下面是真机的运行截图(当然纯属装逼,哈哈)
第十六天的代码真机运行

下面还是展示ipl10.nas代码

; haribote-ipl
; TAB=4
CYLS    EQU     10              ; 十个柱面
        ORG     0x7c00          ; MBR在内存中的位置为(DS=0,0x07c00=DS+0x7c00)

; 系统相关设置信息
        JMP     entry
        DB      0x90
        DB      "HELLOIPL"      ; name of boot sector
        DW      512             ; size of sector
        DB      1               ; f
        DW      1               ; FAT first sector
        DB      2               ; FAT number
        DW      224             ; root dir size
        DW      2880            ; disk size in sector
        DB      0xf0            ; disk type
        DW      9               ; FAT length
        DW      18              ; 18 sector each road
        DW      2               ; disk up down 
        DD      0               ; no partition
        DD      2880            ; reclaim the disk size
        DB      0,0,0x29        ; reserve
        DD      0xffffffff      ; might be column 
        DB      "HELLO-OS   "   ; disk name
        DB      "FAT12   "      ; disk fs type
        RESB    18              ; reserve 18 byte

; init程序入口

entry:
        MOV     AX,0            ; 
        MOV     SS,AX
        MOV     SP,0x7c00       ; heap stack init
        MOV     DS,AX           ; 初始化代码段的基地址在0x00000

; 读取磁盘到内存0x08200的位置

        MOV     AX,0x0820
        MOV     ES,AX
        MOV     CH,0            ; cylinder number
        MOV     DH,0            ; disk head number
        MOV     CL,2            ; sector number
readloop:
        MOV     SI,0            ; failed times
; retry to read disk if failed, read one sector
retry:
        MOV     AH,0x02         ; AH=0x02 : 读磁盘
        MOV     AL,1            ; 1扇区
        MOV     BX,0
        ;MOV        DL,0x00         ; A驱动器
        MOV     DL,0x80         ; 驱动器号很关键
        INT     0x13            ; 调用BIOS的函数例程
        JNC     next
        ADD     SI,1
        CMP     SI,5
        JAE     error
        MOV     AH,0x00
        ;MOV    DL,0x00
        MOV     DL,0x80        ; 驱动器号很关键
        INT     0x13
        JMP     retry
next:
        MOV     AX,ES
        ADD     AX,0x0020 ;每读取一个扇区内存向后偏移(ES+=0x0020)<<4
        MOV     ES,AX
        ADD     CL,1
        CMP     CL,62       ;62个扇区
        JBE     readloop
        MOV     CL,1
        ADD     DH,1
        CMP     DH,4       ;4磁头
        JB      readloop
        MOV     DH,0
        ADD     CH,1
        CMP     CH,4       ;4柱面
        JB      readloop
        MOV     [0x0ff0],CH 
        JMP     0xc200      
error:
        MOV     SI,msg
        JMP     putloop
ok:
        MOV     SI,msg1
putloop:
        MOV     AL,[SI]
        ADD     SI,1            ; SI设置为1
        CMP     AL,0
        JE      fin
        MOV     AH,0x0e         ; 在teletype模式下显示字符
        MOV     BX,15           ; 页码BH=0x00,前景色BL=0x0f
        INT     0x10            ; BIOS显示服务
        JMP     putloop
fin:
        HLT                     ; 暂停处理器
        JMP     fin     
msg1:
        DB      0x0a, 0x0a      ; 换行符
        DB      "READ OKKKK"
        DB      0x0a            ; 换行符
        DB      0
msg:
        DB      0x0a, 0x0a      ; 换行符
        DB      "load error"
        DB      0x0a            ; 换行符
        DB      0

        RESB    0x7dfe-$       ; (0x7dfe-当前位置)都填充0x00

        DB      0x55, 0xaa

学习这本书到目前为止,还是学到了不少东西,其中包括计算机启动流程、BIOS中断向量表,实模式,保护模式,IDT,GDT,LDT,TSS,内存管理,定时器管理(这个主要是依赖时钟中断,时钟中断可是和任务调度密切相关,需要特别的注意),系统调用API,各种异常中断处理,可执行应用程序的编写(这当中可是和保护模式有很大的联系),还有就是深刻的体验到了模块化编程的各种好处。

在学习此书的过程中,遇到了很多问题,所以在此书的学习过程中,同时也学习了很多相关的数据,包括《linux内核的设计与实现》(PS:学习这本书的原因是因为我选择的课程就是讲授linux的内核,当然还是对此书的学习提供了很多的帮助,主要是概念上的理解和操作系统体系架构的理解);《深入理解linux内核》这本书很厚,但是讲解的比较细,但是如果你对计算机系统结构不是很了解的话,前面和硬件相关的部分理解起来比较困难,这本书对于有一定基础的人应该静下心来细看,肯定是有很大的收获,同时我认为这本书也可以作为内核编程的人的一本参考书籍;还有就是《386intel》手册,对于要学习《30天自制操作系统》的人来说intel386的手册应该静下心来仔细阅读。相信如果你能把这几本书吃透,说明你的基础就真的特别的扎实了,不论你是准备编写应用程序,还是内核编程,还是嵌入式系统设计都不是问题。

平心静气,脚踏实地

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:70470次
    • 积分:1505
    • 等级:
    • 排名:千里之外
    • 原创:82篇
    • 转载:0篇
    • 译文:1篇
    • 评论:9条
    最新评论