30天自制操作系统:第二天 汇编语言学习与Makefile入门

本文介绍了使用Notepad++作为文本编辑器进行日语文档编辑,并探讨了汇编语言的基础知识,包括ORG指令、jmp指令、汇编标号和寄存器的使用。此外,还提及了启动区的制作过程,以及C语言改写后的代码示例。文章以学习操作系统开发的视角,阐述了汇编语言在内存管理和程序执行中的作用,同时提到了Makefile的基础知识和资源链接。
摘要由CSDN通过智能技术生成
1.介绍文本编辑器

本小节内容只是编者介绍了一个免费的文本编辑器,因为是日语的缘故,译者向我们推荐了一个可编辑中文的文本编辑器: Notepad++,笔者也正用这个编辑器,放上下载链接:
>>>> Download Notepad++ >>>>
在这里插入图片描述
↑Notepad++使用界面


2.继续开发

节选了projects/02_day中的helloos3中的部分内容,原文档中注释用的是日文,所以这里截取了书中的代码片段:
在这里插入图片描述在这里插入图片描述

因为是从零开始做一个操作系统,作者对代码中的汇编格式进行了非常详细的介绍。

ORG指令

ORG指令来源于英文"origin",意思是“源头、起点”,它会告诉nask(应该是一个汇编语言编译器)程序要从这个地址开始,也就是要把程序装载到内存的指定地址,这里指定的地址是 0x7c00。(后续再讨论原因)

如果有汇编语言的基础(写过汇编程序),那么对于这条指令应该是非常熟悉,该指令类似于笔者学习时用的masm编译器中的 start 指令。
在这里插入图片描述
↑使用masm编译器风格的汇编代码

jmp指令

在这里插入图片描述
在CPU中由CS(Code Segment, 代码段寄存器) + IP(Instruction Pointer,指令指针寄存器)来指示它执行的位置。目前只需要知道它是用于改变程序执行位置的即可。

entry标号

标号在书写汇编代码时经常用到,因为程序时常需要完成跳转进行:循环、执行函数都是以转移为基础的,转移也就是改变CS:IP的值,标号可以指明CS:IP需要变更的值,当然了CPU是不认识标号的,只能通过编译程序将标号程序的首地址计算出来。

mov指令

这个指令应该是汇编中最常用的一个了,类似于高级语言中的赋值号,比如:
mov ax, 0 相当于 ax = 0
mov ss, ax 相当于 ss = ax(注意:ax并没有改变,还是原有的数据)

基本寄存器介绍

这里的内容较为基础,介绍了CPU中的各种寄存器。
在这里插入图片描述
上述都是16位寄存器,后来的32位寄存器只是在原有寄存器名称前加了字母 ‘E’, 意为 Extend(扩展)
EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI

还有一些段寄存器:
在这里插入图片描述

HLT指令

HLT指令源自于英文"Halt", 意思是停止。
在这里插入图片描述

HLT是让CPU停止动作的指令,不过并不是彻底地停止(如果要彻底停止CPU的动作,只能切断电源),而是让CPU进入待机状态。只要外部发生变化,比如按下键盘,或是移动鼠标,CPU就会醒过来,继续执行程序。

在这里插入图片描述
如上图所示,这里的HLT即使去掉了也不影响(循环还是会无限进行下去),但是CPU会全力以赴地去执行这个循环,非常费电,所以使用HLT让CPU初一睡眠状态是一个不错的选择。

C语言改写后的helloos.nas程序节选

在这里插入图片描述
程序的功能是将0:msg的内容循环写入到显卡中(在读到0时停止),当读到0时,程序跳转到fin(final)进入无限循环。“hello world”就是这样显示出来的。

对于ORG从0x7c00的疑惑

为什么必须从0x7c00处开始执行程序呢:
操作系统中的很多内存位置是不能随便使用的,里面可能有各种数据、核心程序段,因此很早之前IBM的大佬们规定了
0x00007c00 - 0x00007dff 这块区域位启动区内容的装载地址,至于为什么要选这个,感兴趣的同学可以查阅当年IBM开发操作系统的历史~

在这里插入图片描述
↑截取自原书P73


3.先制作启动区

顺序输入: asm -> makeimg -> run
在这里插入图片描述


4.Makefile入门

这部分是对Makefile文档的介绍:Makefile的功能、格式、使用。由于笔者在学习Linux时有接触,在这里放上几篇笔者认为非常不错的博客供大家学习:
跟我一起写 Makefile(一)
跟我一起写 Makefile(二)


感受

今天学的东西都比较基础(笔者在假期自学了汇编语言),主要是对汇编语言的各种寄存器、指令、访问内存的方式进行了介绍,正因如此没有太多自己的想法,都是用的书上的解析,当然了这里还有中断作者没有深入讲解。再就是引入了Makefile,对于大工程来说,这是必不可少的。
再接再厉~
over~~ 明天见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nepu_bin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值