第一天

光盘地址用的这个:30天自制操作系统光盘 - 夕雨714 - 博客园 (cnblogs.com)

Bz162下载地址:Bz - c.mos (vcraft.jp)

启动方式:D:\文档\学习科目\计算机基础\操作系统\操作系统实验\30dayMakeOS\1_day\tolset\helloos0 目录下打开!cons_nt.bat cmd中输入run

2C 逗号,20 空格,0A 换行

OS made by BUPT LanYi

4F 53 20 6D 61 64 65 20 62 79 20 42 55 50 54 20 4C 61 6E 59 69 0A

共22组

经过简化,可以在helloos2中的helloos.nas文本中更改

再用一下命令生成img文件,再run

…\z_tools\nask.exe helloos.nas helloos.img

效果图跟上图一样

目前helloos2中为os


第二天

helloos.nas; hello-os
; TAB=4ORG     0x7c00          ; 装载地址,也就是程序的开头,引导扇区被读取的地址,IBM规定的JMP       entry           ; 跳转DB      0x90DB      "HELLOIPL"        ; 僽乕僩僙僋僞偺柤慜傪帺桼偵彂偄偰傛偄乮8僶僀僩乯DW        512             ; 1僙僋僞偺戝偒偝乮512偵偟側偗傟偽偄偗側偄乯DB     1               ; 僋儔僗僞偺戝偒偝乮1僙僋僞偵偟側偗傟偽偄偗側偄乯DW        1               ; FAT偑偳偙偐傜巒傑傞偐乮晛捠偼1僙僋僞栚偐傜偵偡傞乯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               ; 僷乕僥傿僔儑儞傪巊偭偰側偄偺偱偙偙偼昁偢0DD       2880            ; 偙偺僪儔僀僽戝偒偝傪傕偆堦搙彂偔DB        0,0,0x29        ; 傛偔傢偐傜側偄偗偳偙偺抣偵偟偰偍偔偲偄偄傜偟偄DD     0xffffffff      ; 偨傇傫儃儕儏乕儉僔儕傾儖斣崋DB      "HELLO-OS   " ; 僨傿僗僋偺柤慜乮11僶僀僩乯DB      "FAT12   "        ; 僼僅乕儅僢僩偺柤慜乮8僶僀僩乯RESB   18              ; 偲傝偁偊偢18僶僀僩偁偗偰偍偔; 僾儘僌儔儉杮懱entry:MOV     AX,0            ; 初始化寄存器MOV     SS,AXMOV        SP,0x7c00       ; 栈指针寄存器MOV     DS,AXMOV        ES,AXMOV        SI,msg          ; 源变址寄存器
putloop:MOV     AL,[SI]         ; ADD       SI,1            ; SI加一CMP       AL,0JE      finMOV      AH,0x0e         ; 显示一个文字MOV     BX,15           ; 指定字符颜色INT     0x10            ; 软件中断指令,调用显卡BIOS,使用16号函数JMP      putloop
fin:HLT                     ; 停止CPU,等待指令JMP      fin             ; 无限循环msg:                          ; 显示信息部分DB      0x0a, 0x0a      ; 换行两次DB        "hello, world"DB      0x0a            ; 换行DB      0RESB   0x7dfe-$        ; 0x7dfe傑偱傪0x00偱杽傔傞柦椷DB     0x55, 0xaa; 埲壓偼僽乕僩僙僋僞埲奜偺晹暘偺婰弎DB     0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB  4600DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB  1469432

bios网页:(AT) BIOS - os-wiki (osask.jp)

内存分布图(AT)memorymap - os-wiki (osask.jp)

nask:汇编编译器的一种

文件更改:ipl.nas用来作为启动区

asm
makeimg
run


makefile

# Makefile文件
# 定义文件生成规则,是高级的批处理命令文件default : # 默认命令../z_tools/make.exe img ipl.bin : ipl.nas Makefile # 检查有无这两个文件../z_tools/nask.exe ipl.nas ipl.bin ipl.lsthelloos.img : ipl.bin Makefile../z_tools/edimg.exe   imgin:../z_tools/fdimg0at.tek \wbinimg src:ipl.bin len:512 from:0 to:0   imgout:helloos.img# 命令asm :../z_tools/make.exe -r ipl.binimg :../z_tools/make.exe -r helloos.imgrun :../z_tools/make.exe imgcopy helloos.img ..\z_tools\qemu\fdimage0.bin../z_tools/make.exe -C ../z_tools/qemuinstall :../z_tools/make.exe img../z_tools/imgtol.com w a: helloos.imgclean : # 删除掉中间文件-del ipl.bin-del ipl.lstsrc_only : # 调用clean命令的同时删除img../z_tools/make.exe clean-del helloos.img

第三天

IPL: initial program loader 启动区,启动程序装载器

BIOS的0x13函数

  • AH = 0x02; (読み込み時)
  • AH = 0x03; (書き込み時)
  • AH = 0x04; (ベリファイ時)
  • AH = 0x0c; (シーク時)
  • AL = 処理するセクタ数; (連続したセクタを処理できる)
  • CH = シリンダ番号 & 0xff;
  • CL = セクタ番号(bit0-5) | (シリンダ番号 & 0x300) >> 2;
  • DH = ヘッド番号;
  • DL = ドライブ番号;
  • ES:BX = バッファアドレス; (ベリファイ時、シーク時にはこれは参照しない)
  • 返回值,即进位标志:
  • FLAGS.CF == 0 : エラーなし、AH == 0
  • FLAGS.CF == 1 : エラーあり、AHにエラーコード(リセットファンクションと同じ)
; harib00b/ipl.nas与昨天不同的部分MOV        AX,0x0820MOV        ES,AXMOV        CH,0            ; 柱面0MOV        DH,0            ; 磁头0MOV        CL,2            ; 扇区2MOV        AH,0x02         ; AH=0x02 : 读盘MOV      AL,1            ; 1个山区MOV       BX,0MOV     DL,0x00         ; 驱动器号INT       0x13            ; 调用BIOS19号函数JC     error           ; 进位标志如果是1的话,就跳转

与光盘不同,软盘磁盘两面都能记录数据

软式磁盘驱动器则称FDD,软盘片是覆盖磁性涂料的塑料片,用来储存数据文件,磁盘片的容量有5.25”的1.2MB,3.5”的1.44MB。

以3.5”的磁盘片为例,其容量的计算如下:
80(磁道)x18(扇区)x512 bytes(扇区的大小)x2(双面) = 1440 x1024 bytes = 1440 KB = 1.44MB
3.5英寸软盘片,其上、下两面各被划分为80个磁道,每个磁道被划分为18个扇区,每个扇区的存储容量固定为512字节。

段寄存器:

不管要指定内存的什么地址都必须同时指定段寄存器,默认为段寄存器DS,故DS必须预先指定为0,否则地址会加上这个数的16倍

make run


; 03_day/harib00b
entry:MOV       AX,0            ; 儗僕僗僞弶婜壔MOV        SS,AXMOV        SP,0x7c00MOV        DS,AX; 僨傿僗僋傪撉傓MOV       AX,0x0820MOV        ES,AXMOV        CH,0            ; 僔儕儞僟0MOV      DH,0            ; 僿僢僪0MOV       CL,2            ; 僙僋僞2MOV       SI,0            ; 记录失败次数的寄存器
retry:MOV       AH,0x02         ; AH=0x02 : 僨傿僗僋撉傒崬傒MOV        AL,1            ; 1僙僋僞MOV       BX,0MOV     DL,0x00         ; A僪儔僀僽INT      0x13            ; 僨傿僗僋BIOS屇傃弌偟JNC       fin             ; 没出错的话跳转到finADD        SI,1            ; 往SI加1CMP      SI,5            ; 比较SI和5JAE     error           ; SI >= 5 跳转errorMOV        AH,0x00MOV      DL,0x00         ; A僪儔僀僽INT      0x13            ; 重置驱动器JMP      retry

到目前还挺简单的,但是得补编译原理、数据库作业去了,感觉第三天内容好像挺多

欢迎关注B站账号,会发一些深度强化学习的学习资料
B站账号:哔哩哔哩 无名-易
Gitee账号:gitee账号
GitHub账号:GitHub

30天自制操作系统——第一天到第二天相关推荐

  1. 30天自制操作系统——第一天制作一个Hello word操作系统

    入手一本<30天自制操作系统>,内容诙谐有趣,很适合对操作系统一窍不通的新手. 据作者所言,这本书的最终目标是从零开始编写一个五脏俱全的图形操作系统,不用什么基础,而且只需30天!! 没有 ...

  2. 《30天自制操作系统》---第一天

    <30天自制操作系统>---第一天 二进制编译与文本编译器大家用自己顺手的就可以,今天通过两种方法运行虚拟机,第一种通过作者提供的工具运行在QEMU中,第二种方法运行到VMWare中,直接 ...

  3. 30天自制操作系统——第二天

    30天自制操作系统--第二天 今天是该系列的第二天,继续昨天的开发,今天的任务主要有以下几项: 1.进一步的加工一下汇编程序(去除昨天的二进制代码) 2.对启动区进行制作 3.利用makefile简化 ...

  4. 30天自制操作系统:第一天

    30天自制操作系统:第一天 趁着双十一采购了一大堆书,准备消化一下,不然就太浪费了. 书上推荐的二进制编辑器是bz ,界面和版本有点古老,还只有日语和英语版本. 不过直到最近一年还一直在维护,最新的版 ...

  5. 30天自制操作系统——第二十三天窗口操作

    窗口及输入切换 我们先来实现用键盘切换窗口,按下F11键,将最下面的窗口移动到最上面,这里F11按键的编码为0x57. bootpack.c节选: void HariMain(void) {(略)fo ...

  6. 30天自制操作系统——第五天

    第五天 参考<30天自制操作系统>GDT&IDT - 谷月轩 - 博客 梳理一下文件 现在我们拥有这么9个文件: ipl10.nas InitialProgramLoader, 占 ...

  7. 30天自制操作系统第三天

    操作系统实验日志3 学号 201708010402 姓名 徐冰娜 专业年级班级 实验日期 2019.9.28 实验项目 第3天:进入32位模式并导入C语言 智能1701 30天自制操作系统第三天 操作 ...

  8. 发布在《30天自制操作系统》之前的帮助阅读贴

    说明:这是8月15日即将上市的一本新书,本文的摘选也可以命名为<30天自制操作系统>上市之前必读.本书幽默,有趣,可以说是技术书里的幽默书,让您读起来绝对不会感到乏味.在本书上市之前,您一 ...

  9. 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!

    <30天自制操作系统>笔记(01)--hello bitzhuwei's OS! 最初的OS代码 1 ; hello-os 2 ; TAB=4 3 4 ORG 0x7c00 ; 指明程序的 ...

  10. 由《30天自制操作系统》引发的漫画创作

    大家可还记得<30天自制操作系统>的封面上的那只猫吗?记得当时,在果壳网有人问,为何这只猫长了两只尾巴呢,延着这条线,我把这本书捧上了展示的舞台.事隔四个多月,我又重提此书. 这本经我手宣 ...

最新文章

  1. 字节、腾讯、阿里的开发为啥都在用Python?网友:又酸又香!
  2. 常见文件扩展名(二)
  3. 机器学习十大算法(二)
  4. Long Number
  5. 使用Google GSON:额外的赠品:第一部分
  6. [密码学基础][每个信息安全博士生应该知道的52件事]52.先进的应用概念 系统的大致安全需求
  7. UML-based workflow |wfmc|面向对象的概念
  8. 如何执行静默(无人参与)Java 安装?
  9. 线性代数的本质与几何意义 01. 向量是什么?(3blue1brown 咪博士 图文注解版)
  10. Java 编程需要注意的细节
  11. nginx 代理springmvc到二级目录_详解Nginx从入门到实践
  12. 使用c语言的多学科协同仿真软件,Multisim10软件在单片机C语言协同仿真中应用.pdf...
  13. Metasploit之——社会工程学工具包
  14. 中芯国际:Q1营收同比增长22%至11亿美元,预计年底产能仍供不应求|看财报
  15. Farmer John 木瓜地 C++
  16. java 8 stream 的学习
  17. 联想小新15用什么C语言程序,长处更长 优点更优 联想小新Air 15 2019首测
  18. 查看linux Mac地址
  19. vscode上的git三部曲+git pull操作
  20. Camera测试-- ITS测试

热门文章

  1. 在APPLE从创建ID到申请发布AppStore账户(六)新建AppleID用户首次使用要求双重认证(您的 Apple ID 需要更新)
  2. pacman 查询_archlinux pacman常用命令
  3. 南昌工学院计算机科学与技术专业,南昌工程学院特色专业介绍_计算机科学与技术_专业课程介绍_专业排名_就业方向...
  4. c语言代码后return0表示什么意思,return 0是什么意思 ?
  5. 手机共享计算机网络连接,如何将手机wifi网络通过USB共享给电脑?教您共享方法...
  6. 什么是胖客户端和瘦客户端?什么是哑终端?(转)
  7. BF的数据结构题单-提高组——P1783 海滩防御
  8. 『天涯杂谈』十大古今名人语录经典(2007版)
  9. 《广西经济社会发展报告(2019)》正式发布 聚焦发展热点
  10. homotopy-同伦_拔剑-浆糊的传说_新浪博客