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

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


文章目录

  • 30天自制操作系统——第二天
  • 一、进一步加工汇编程序
  • 二、制作启动区
  • 三、利用makefile
  • 四、给大家展示一下list文件:
  • 总结

一、进一步加工汇编程序

这里我使用的是vscode 进行书写汇编程序(也可以使用其他的文本编辑器)。其主要代码(这里与原作者给出的代码相比我进行了自己的加工以及添上了我个人的理解的注释)如下:

;hello-os
;TAB=4ORG 0x7c00 ;启动程序的装载地址一般为0x7c00~0x7dffjmp entry
;标准的FAT12格式软盘的必备专用的代码 Stand FAT12 format floppy code,即书写在开头的文件描述系统DB     0x90DB      "HELLOIPL"        ; 启动扇区名称(8字节)DW       512             ; 每个扇区(sector)大小(必须512字节)DB     1               ; 簇(cluster)大小(必须为1个扇区)DW       1               ; FAT起始位置(一般为第一个扇区)DB     2               ; FAT个数(必须为2)DW       224             ; 根目录大小(一般为224项)DW        2880            ; 该磁盘大小(必须为2880扇区1440*1024/512)DB     0xf0            ; 磁盘类型(必须为0xf0)DW     9               ; FAT的长度(必须是9扇区)DW        18              ; 一个磁道(track)有几个扇区(必须为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:;将启动区的初始段地址(0000)设置给以及将启动扇区的偏移地址(7c00)进行设置到栈和数据段中mov ax,0mov ss,axmov sp,0x7c00mov ds,axmov es,axmov si,msg
;程序启动后我们想要显示的内容putloop:mov al,[si]add si,1   ; 给SI加1,循环打印cmp al,0je fin  ;若数据内存该处的值为零,则该程序终止mov ah,0x0e  ; 显示一个文字,调用0x0e号子中断程序mov bh,0   ;第0页mov bl,11001010B  ; 指定字符颜色int 0x10 ; 设置中断程序。10h号中断代表显示字符串,调用bios的中断jmp putloop fin: HLT ;cpu停止运行,等待指令,节约资源jmp fin ; 无限循环msg:DB      0x0a, 0x0a      ; 换行两次DB        "hello, world"DB      0x0aDB      "OS made by GXU yuan"DB       0x0a            ; 换行DB      0RESB   0x7dfe-$        ; 填写0x00直到0x001feDB     0x55, 0xaa  ;这里标志着有启动程序,因为计算机一般先读最后两字节进行判断是否含启动程序的!!

ORG 这个指令,意思是告诉计算机再执行时将以下的这些代码装载到内存的哪个地址。
HLT 这个指令,则让cpu停止动作的指令,当然如果有外唤醒,cpu将继续执行的。这里使用这一个指令,就是不想让cpu无意义的空转,浪费资源。
至于中断程序,那就参考第零天里的汇编知识了。当然,我这里利用bl设置了颜色,但是最后结果依旧没有出现色彩,因此我推测可能是在当前这个页面下,不能这么简单的指定色彩吧??

补充一些小知识: 内存当中的第0号地址以及在0xf0000号附件可能都存在着BIOS程序本身,因此我们在开发操作系统的过程中,要注意避免使用这些区域,以免使得系统崩溃。然后,一般来说,会将启动区的内容装载到0x00007c00~0x00007dff 共512字节的内存区域当中(至于为什么是这里,着我也不知道,是之前的大佬们设计之处定下的) 因此,我们前面的汇编程序要使用org定位到7c00的内存地址当中。

好了,这里我加工完毕后(以上的只是包含了软盘中操作系统的启动区),我们接下来开始将这个汇编代码编译连接,然后制作映像文件。

二、制作启动区

这里我们继续利用前面的启动区(512字节)的汇编代码,来启动我们的程序。首先将asm文件里的内容进行修改,以方便我们输出.bin 以及 .list文件。bin是用于我们后续制作光盘的,list是为了给我们看每一步指令产生的对应的机器指令。

asm.bat
..\..\z_tools\nask.exe yuan-hello-os.nas yuan-hello-os.bin yuan-hello-os.list

除此之外,还需要做一个文件makeimg.bat 将bin文件转化为磁盘映像文的:

makeimg.bat:
..\..\z_tools\edimg.exe   imgin:../../z_tools/fdimg0at.tek   wbinimg src:yuan-hello-os.bin len:512 from:0 to:0   imgout:yuan-hello-os.img

以上需要注意以下相对路径哈!!!

然后在!const打开的cmd中,依次输入:asm->makeimg->run即可。

三、利用makefile

以上呢,我们要使用各种bat文件来进行批处理命令,十分的麻烦,因此为了简化上述的操作,我们利用makefile文件来同一进行处理:
1、建立一个makefile文件(不要后缀);
2、输入以下内容:

img :../../z_tools/make.exe -r yuan-hello-os.imgasm:../../z_tools/make.exe -r yuan-hello-os.binrun:../../z_tools/make.exe imgcopy yuan-hello-os.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: yuan-hello-os.img yuan-hello-os.bin : yuan-hello-os.nas Makefile../../z_tools/nask.exe  yuan-hello-os.nas yuan-hello-os.bin yuan-hello-os.listyuan-hello-os.img : yuan-hello-os.bin Makefile../../z_tools/edimg.exe imgin:../../z_tools/fdimg0at.tek wbinimg src:yuan-hello-os.bin len:512 from:0 to:0 imgout:yuan-hello-os.imgclean :-del ipl.bin-del ipl.lstsrc_only :../z_tools/make.exe clean-del helloos.img


# 代表注释;

yuan-hello-os.bin : yuan-hello-os.nas Makefile 意思是如果想要制作yuan-hello-os.bin 文件需要先检查是否已经有 yuan-hello-os.nas Makefile这两个文件了,如果有则执行下面的命令! 这里面的yuan-hello-os.bin 这一个则是相当于告诉make.exe程序,我要制作的是这一个程序,然后将要执行这下面的命令了。。因此我们只需在cmd中输入make yuan-hello-os.bin 就会自动执行下面的命令从而生成bin文件。

要注意的一点是:命令与上述的名字即yuan-hello-os.bin:的间距需要输入一个tab键进行空行出来。

3、制作make启动的批处理文件:

make.bat
..\..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

这时就已经全部制作完成了,我们只需在!const打开的命令行输入make+对应的名字即可(名字即makefile文件里:前的那串字符)

解释上述命令中的 clean: 是指删除处.img 外的所有中间产生的文件。
**src_only:**是删除源程序以外的文件。

四、给大家展示一下list文件:


也就是说我们写的汇编和我们之前的那些二进制代码其实是语言的,cpu并不会识别我们需要处理的数据,只会傻傻的处理传入的电信号而已。


总结

以上就是Day2的内容,今天进一步的完善了汇编的代码,使得我们极大的减少了二进制的编辑,并且利用了makefile简化了文件的数量(之前的bat可以删掉了)。

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

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

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

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

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

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

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

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

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

  5. 30天自制操作系统 导读

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

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

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

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

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

  8. 30天自制操作系统第五天

    操作系统实验日志5 第5天:结构体.文字显示与GDT/IDT初始化 30天自制操作系统第五天 操作系统实验日志5 一.实验主要内容 1. 内容1:接收启动信息 2. 内容2:使用结构体 3. 内容3: ...

  9. 为什么《30天自制操作系统》封面中的猫是两只尾巴

    刚刚在一社区,发了一贴,被指出一问题,询一高人,得一答案.这便是我没有关注到的封面上的那只猫,我想这也是很多读者没有关注到的.因为在我微博的200转发贴中,并没有人提到封面中的猫为何有两只尾巴.于是咨 ...

最新文章

  1. discuz sitemap.php,discuz制作门户的百度sitemap
  2. springmvc教程(4)
  3. ORA-12170:TNS:连接超时
  4. Fedora 13 的新特性
  5. Java Message System简介
  6. C#写文本文件如何写入回车换行符?
  7. 数据采集工具flume
  8. 从零开始学android开发-布局中 layout_gravity、gravity、orientation、layout_weight
  9. 阿里每天究竟要抵御多少攻击
  10. SQL语句中,创建标识列、默认值及各种约束的语法介绍
  11. 元胞计算机系统,元胞自动机
  12. SpringBoot 的配置文件
  13. BXP3.0安装指南(传统方法)(转)
  14. 谷歌浏览器保存网页为PDF
  15. 补锅之校内测(桶哥系列)
  16. 【实践】电商知识图谱构建及搜索推荐场景下的应用.pdf(附下载链接)
  17. 轻松一下:python(turtle模块)绘制分形图
  18. 分享112个HTML娱乐休闲模板,总有一款适合您
  19. [转载] 华中科技大学学生违纪处分条例
  20. Http请求状态码:905

热门文章

  1. R与Rtools版本不兼容问题
  2. 实现天翼校园网络共享指南!!!!!
  3. docker (九)promethues的服务发现和grafana
  4. 2016年3月4日。
  5. three.js设置背景色
  6. 江民杀毒 90天试用序列号申请
  7. java在线问问题_java问题在线解答
  8. RealPlayer 安装
  9. 内地网络概念股席卷香江
  10. 执行“openssl version“报openssl: /usr/lib/libcrypto.so.3: version `OPENSSL_3.1.0‘ not found (required by