说明: 为了满足我自制OS的小小愿望,慕名买来了《三十天自制操作系统》书籍进行学习,虽然我预料到了估计是一路抄代码。但是学一学也无坏处,如果能点亮几个技能点是再好不过。 本书毕竟是十几年前的老书,操作系统仍然停留在32位,所以与现在主流操作系统差别很大,是极为简单的操作系统。纯属学习以及娱乐打发时间 本人大一,处于学习阶段,有误欢迎私信指正 启动区核心汇编代码 AX:累加寄存器 CX:计数寄存器 DX:数据寄存器 BX:基址寄存器 SP:栈指针寄存器 BP:基址指针寄存器 SI:源变址寄存器 DI:目的变址寄存器 以上为均为16位寄存器; AL:累加寄存器低位 CL:计数寄存器低位 DL:数据寄存器低位 BL:基址寄存器低位 AH:累加寄存器高位 CH,DH,BH…同上 段寄存器: ES:附加段寄存器 CS:代码段寄存器 SS:栈段寄存器 DS:数据段寄存器 FS、GS DB:写入一个字节 RESB(reserve byte):空出多少字节 DW以及DD:写入字节 JMP:跳转(类似C语言goto) MOV:赋值语句 ADD:加法 CMP:比较 JE:条件跳转,相等跳转 HLT:CPU停止 存在于电脑主板ROM单元,提供操作系统开发一系列工具 其中INT指令则为调用BIOS里面的函数 批处理,可在控制台输入字符执行其中的语句
自制OS记录
《三十天自制操作系统》学习记录
前三天知识汇总
CYLS EQU 10 ; 常量 ORG 0x7c00 ; 指明程序装载地址 ; 一下为标准FAT12格式软盘专用代码 JMP entry DB 0x90 DB "HARIBOTE" ; 启动区名称(8字节) DW 512 ; 扇区大小(必须为512字节) DB 1 ; 簇大小(必须为1个扇区) DW 1 ; FAT起始位置(一般从第一个扇区开始) DB 2 ; FAT个数(必须2) DW 224 ; 根目录大小(一般为224项) DW 2880 ; 该磁盘大小(必须2880扇区) DB 0xf0 ; 磁盘种类(必须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 " ; 磁盘名称(11字节) DB "FAT12 " ; 磁盘格式名称(8字节) 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 readloop: MOV SI,0 ; 记录失败次数的寄存器 retry: MOV AH,0x02 ; AH=0x02 : 读盘 MOV AL,1 ; 1个扇区 MOV BX,0 MOV DL,0x00 ; A驱动器 INT 0x13 ; 调用磁盘BIOS JNC next ; 没出错跳转fin ADD SI,1 ; SI+1 CMP SI,5 ; SI与5比较 JAE error ; SI >= 5 跳转error MOV AH,0x00 MOV DL,0x00 ; A驱动器 INT 0x13 ; 重置驱动器 JMP retry next: MOV AX,ES ; 内存地址后移0x200 ADD AX,0x0020 MOV ES,AX ; 没有ADD ES,0x020指令,绕个弯 ADD CL,1 ; CL+1 CMP CL,18 ; CL与18比较 JBE readloop ; CL <= 18 跳转readloop MOV CL,1 ADD DH,1 CMP DH,2 JB readloop ; DH < 2 跳转readloop MOV DH,0 ADD CH,1 CMP CH,CYLS JB readloop ; CH < CYLS 跳转readloop ; MOV [0x0ff0],CH ; JMP 0xc200 ; 跳转至操作系统程序 error: MOV SI,msg putloop: MOV AL,[SI] ADD SI,1 ; SI+1 CMP AL,0 JE fin MOV AH,0x0e ; 显示文字 MOV BX,15 ; 指定字符颜色 INT 0x10 ; 调用显卡BIOS JMP putloop fin: HLT ; 停止CPU,等待指令 JMP fin ; 死循环 msg: DB 0x0a, 0x0a ; 2个换行 DB "load error" DB 0x0a ; 换行 DB 0 RESB 0x7dfe-$ ; 填写0x00到0x7dfe $符号为当前和行现在字节数 DB 0x55, 0xaa
寄存器
相关指令:
BIOS:
MakeFile:
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算