《30天自制操作系统》U盘启动,真机运行(16天)
首先说一下到目前为止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 entryDB 0x90DB "HELLOIPL" ; name of boot sectorDW 512 ; size of sectorDB 1 ; fDW 1 ; FAT first sectorDB 2 ; FAT numberDW 224 ; root dir sizeDW 2880 ; disk size in sectorDB 0xf0 ; disk typeDW 9 ; FAT lengthDW 18 ; 18 sector each roadDW 2 ; disk up down DD 0 ; no partitionDD 2880 ; reclaim the disk sizeDB 0,0,0x29 ; reserveDD 0xffffffff ; might be column DB "HELLO-OS " ; disk nameDB "FAT12 " ; disk fs typeRESB 18 ; reserve 18 byte; init程序入口entry:MOV AX,0 ; MOV SS,AXMOV SP,0x7c00 ; heap stack initMOV DS,AX ; 初始化代码段的基地址在0x00000; 读取磁盘到内存0x08200的位置MOV AX,0x0820MOV ES,AXMOV CH,0 ; cylinder numberMOV DH,0 ; disk head numberMOV 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 nextADD SI,1CMP SI,5JAE errorMOV AH,0x00;MOV DL,0x00MOV DL,0x80 ; 驱动器号很关键INT 0x13JMP retry
next:MOV AX,ESADD AX,0x0020 ;每读取一个扇区内存向后偏移(ES+=0x0020)<<4MOV ES,AXADD CL,1CMP CL,62 ;62个扇区JBE readloopMOV CL,1ADD DH,1CMP DH,4 ;4磁头JB readloopMOV DH,0ADD CH,1CMP CH,4 ;4柱面JB readloopMOV [0x0ff0],CH JMP 0xc200
error:MOV SI,msgJMP putloop
ok:MOV SI,msg1
putloop:MOV AL,[SI]ADD SI,1 ; SI设置为1CMP AL,0JE finMOV AH,0x0e ; 在teletype模式下显示字符MOV BX,15 ; 页码BH=0x00,前景色BL=0x0fINT 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 0RESB 0x7dfe-$ ; (0x7dfe-当前位置)都填充0x00DB 0x55, 0xaa
学习这本书到目前为止,还是学到了不少东西,其中包括计算机启动流程、BIOS中断向量表,实模式,保护模式,IDT,GDT,LDT,TSS,内存管理,定时器管理(这个主要是依赖时钟中断,时钟中断可是和任务调度密切相关,需要特别的注意),系统调用API,各种异常中断处理,可执行应用程序的编写(这当中可是和保护模式有很大的联系),还有就是深刻的体验到了模块化编程的各种好处。
在学习此书的过程中,遇到了很多问题,所以在此书的学习过程中,同时也学习了很多相关的数据,包括《linux内核的设计与实现》(PS:学习这本书的原因是因为我选择的课程就是讲授linux的内核,当然还是对此书的学习提供了很多的帮助,主要是概念上的理解和操作系统体系架构的理解);《深入理解linux内核》这本书很厚,但是讲解的比较细,但是如果你对计算机系统结构不是很了解的话,前面和硬件相关的部分理解起来比较困难,这本书对于有一定基础的人应该静下心来细看,肯定是有很大的收获,同时我认为这本书也可以作为内核编程的人的一本参考书籍;还有就是《386intel》手册,对于要学习《30天自制操作系统》的人来说intel386的手册应该静下心来仔细阅读。相信如果你能把这几本书吃透,说明你的基础就真的特别的扎实了,不论你是准备编写应用程序,还是内核编程,还是嵌入式系统设计都不是问题。
平心静气,脚踏实地
《30天自制操作系统》U盘启动,真机运行(16天)相关推荐
- 30天自制操作系统U盘启动
最近从某宝上看了一本书,叫<30天自制操作系统>,上网翻了一下pdf,感觉还可以,唯一的美中不足就是软盘启动,这2018年了,谁家还有软盘软驱啊?!于是翻了一下网上的资料,发现没什么可以用 ...
- 30天自制操作系统——用U盘启动自制系统
文章转载 https://blog.csdn.net/nonekey/article/details/8758715 最近试读了<30天自制操作系统>的前两章,感觉很有意思. 但是发现里面 ...
- 关于U盘启动操作系统《30天自制操作系统》
原本的启动是从img启动的,而且这个img是用FAT12文件系统进行格式化的(具体去搜索FAT12文件格式,这里给大家推荐一篇http://www.doc88.com/p-646605198560.h ...
- 30天自制操作系统 - 取代软盘,用U盘写入引导扇区
背景 作者是在2006年发布此书的(翻译版是在2012年在中国发售),当时可能还能找到带有软驱的计算机.但是时过境迁,现在已经不存在这种老古董东西了. 简单总结一下学习到第三天的一些更变. 更变 书籍 ...
- 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!
<30天自制操作系统>笔记(01)--hello bitzhuwei's OS! 最初的OS代码 1 ; hello-os 2 ; TAB=4 3 4 ORG 0x7c00 ; 指明程序的 ...
- 30天自制操作系统——第五天
第五天 参考<30天自制操作系统>GDT&IDT - 谷月轩 - 博客 梳理一下文件 现在我们拥有这么9个文件: ipl10.nas InitialProgramLoader, 占 ...
- 30天自制操作系统第三天
操作系统实验日志3 学号 201708010402 姓名 徐冰娜 专业年级班级 实验日期 2019.9.28 实验项目 第3天:进入32位模式并导入C语言 智能1701 30天自制操作系统第三天 操作 ...
- 30天自制操作系统——第一天制作一个Hello word操作系统
入手一本<30天自制操作系统>,内容诙谐有趣,很适合对操作系统一窍不通的新手. 据作者所言,这本书的最终目标是从零开始编写一个五脏俱全的图形操作系统,不用什么基础,而且只需30天!! 没有 ...
- 计算机基础知识不牢但会编程,30天自制操作系统(一)从计算机结构到汇编程序入门(示例代码)...
学习这本书不代表我要亲自动手把这本书中的代码敲一遍哦,只是借机来学习一下操作系统.之前有段时间也在看操作系统的知识,怎么说呢之前的看的书都是偏讲理论多一些,对于我这个非科班出身的来说,由于之前的计算机 ...
最新文章
- 你有没有想过你的上级为什么让你干这件事情,他想干什么
- WINCE6.0+S3C2443自动重启的实现
- [转贴]Ultimate List of Free Windows Software from Microsoft
- java天气预报webservice_webservice之实现天气预报
- [ActionScript 3.0] 安全沙箱的类型sandboxType,判断当前程序是AIR还是web程序
- 关于用C#编写ActiveX控件3(转)
- 使用ggplot2绘制心形
- JPA-update方法使用踩坑记
- 单片机 队列 C语言 OLED 示波器 心率波形 显示 MSP430F5529 pulsesensor ADS1292R
- java软件工程师培训学_Java软件工程师学习路线
- python爬取千图网_scrapy之千图网全站爬虫
- Python实现王者农药自动刷金币
- 智能合约自动化工具:示例指南
- Nand Flash 通过调整阈值的Retry方法简单描述
- 家电售后服务外包维修模式,该如何管理
- vue 首屏优化的解决方案
- 【Python CUDA版】河北工业大学计算机图像处理实验二:图像直方图及灰度变换
- 队友揭秘小贝更衣室落泪 有望效仿卡纳瓦罗参加世界杯
- 【IoT】产品设计:用实际案例,手把手教你写BRD(商业需求文档)
- 最新微信密友使用方法配合微x模块更完美无需root适合任何安卓手机
热门文章
- 详解android framework中StateMachine(HSM层次状态机)的实现
- jsp的MVC模式设计用户登陆注册
- linux 查端口 查进程 (全网最详细)
- 英语流利说显示服务器错误,英语口语流利说系列失望(附音频)
- 刘翔中科院计算机研究所,2017年中科院微生物研究所拟录取直博生核对通讯地址及寄送调档函通知...
- 工匠精神是吹牛,互联网时代需打磨“剑锋
- 关于ComponentName的使用
- bottleneck resnet网络_为何resnet的bottleneck block为何能增强特征学习能力?
- ERP BI和报表的区别
- 12款经典的白富美型 jQuery 图片轮播插件