这一天我们会学到汇编语言,与makefile,还记昨天用了大量的DD,DW等指令,虽然已经很不错了,但我们想让它更为人看得懂。

一上来我也推荐个编辑器吧,我一般用Sublime(翻译推荐的是notepad++,这个一般被我用来打开某个单独文件)因为我以前用它习惯性写lua代码,所以,工程类的东西我还是喜欢Sublime

ORG 0x7c00 ;指明程序装在地址

JMP entry
DB 0x90

; 程序核心

entry:

    MOV        AX,0            ; 初始化寄存器MOV        SS,AXMOV        SP,0x7c00MOV        DS,AXMOV        ES,AXMOV        SI,msg

putloop:

    MOV        AL,[SI]ADD        SI,1            ; 给SI加1CMP        AL,0JE        finMOV        AH,0x0e            ; 显示一个文字MOV        BX,15            ; 指定字符颜色INT        0x10            ; 调用显卡BIOSJMP        putloop

fin:

    HLT                        ; 让CPU停止,等待指令JMP        fin                ; 无限循环

msg:

    DB        0x0a, 0x0a        ; 执行2次DB        "hello, world"DB        0x0a            ; 换行DB        0RESB    0x7dfe-$        ; 填写0x00直到0x001feDB        0x55, 0xaa

这一下基本每句代码都比较好的来解释他的意思了。虽然汇编是个很古老的语言了,但至少我们看得懂。后面大部分还是用C来写逻辑,汇编提供底层接口函数。

首先是ORG指令,他告诉编译器要让我们的程序从这个地址开始,也就是装载到指定内存地址中去。原因当然是没有啊,因为要是我来定我会定个520。
一些简单的指令就不多讲。
有几个比较具有代表性的寄存器,这里说说。
AX-累加寄存器
CX-计数寄存器
DX-数据寄存器
BX-基址寄存器
SP-栈指针寄存器
BP-基址指针寄存器
SI-源变址寄存器
DI-目标变址寄存器

然后这些寄存器可以拆为高八位与第八位分别是后缀改为LOW和HIGH这里有个比较蛋疼的问题,就是当我要取BP,SP,SI,DI这四个寄存器的低八位与高八位的时候,就得通过一个媒婆来实现,例如,MOV AX,SI 然后再用AL,AH取出来,当然可能当时Intel大叔们这样设计是有他们的原因的。
这些都是16位的寄存器后来32后有了EAX等。。,EAX取高16位非常不好取,所以一般用低16位,因为要通过位运算来得到高16位。
还有一个段寄存器
ES-附加段寄存器
CS-代码段寄存器
SS-栈段寄存器
DS-数据段寄存器
FS-没有名称
GS-没有名称

这些寄存器都可以根据其名称知道他们的作用

首先是jmp到一个标号,这个标号会被编译器自动解析为所对应的内存地址,如果你想写指定内存地址那我认为你是疯了。

接下来看看[SI],这个代表的就是去取内存条中的字节
由于用作此作用的寄存器只有BX,BP,SI,DI这几个,所以又来了个蛋疼的问题

MOV BX,DX
MOV AL,BYTE[BX]
就得这样玩儿。由于AL是8位的寄存器,所以从指定内存地址中读取一个字节内容到AL,mov的规则是左右数据必须相同,和高级语言一样。

cmp比较指令,若成立执行下一句代码若不成立略过下一句代码向后执行。

现在要来讲个很有意思的指令了,int(中断指令)其实我最开始学的时候,我据把他当成调用函数来看待,和高级语言非常类似。首先就是根据BIOS说好的我先往哪些寄存器里填东西,然后再调用某个int则可以实现某个功能。

MakeFile:

这个makefile在以后几乎随时都要用到,掌握它,不吃亏。
集成开发环境的作用就是一个软件提供了,从代码编写到运行为你最终想要看到的样子,makefile就是在写这样一个规则,当然这中间的一个个具体工作的工具,作者已提供(其实我认为作者对这部分工具没有开源,对我们来说是不可控的,不是一件好事)。
我在这里讲解的makefile不建议读者学习,仅用于自己记录(忘理解),可以上Google参考更详细的makefile教程。
格式:
要生成的文件 : 需要为生成而准备的文件 若成立则会执行下一句命令
''表示此行不够补到下行继续

make很聪明,若需要准备的文件不存在,它会首先去检查一下之前是否有命令可以生成这个文件。
没有考察过是否是根据日期来是否重新生成,或者是md5呢(对于其内部不太清楚)

关于最后:
关于作者的提问数据也能"执行"吗?机器语言也能"显示"吗? 如果是初学者一定会问的问题,若提前了解过汇编,那么这个问题,或许早就在学汇编的时候问过了。不管你是图片还是程序,甚至是音乐,在计算机看来都是0,1,关键在于你如何看待这些数据。

第二天已经over啦。总结一下,从昨天到今天,主要用上了makefile对于我们开发时常看效果简直是太方便啦。而且又解决了一些看不懂的代码,明天继续

30天自制操作系统-2相关推荐

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

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

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

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

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

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

  4. 写在《30天自制操作系统》上市之前

       这本<30天自制操作系统>马上就要在各大书店和网上商城全面上架了,作为本书的4位译者之一,我负责翻译了本书约三分之二的内容.这是我参与翻译的第一本译著,我感到很激动也很紧张,因为我知 ...

  5. 《30天自制操作系统》笔记(04)——显示器256色

    <30天自制操作系统>笔记(04)--显示器256色 进度回顾 从最开始的(01)篇到上一篇为止,已经解决了开发环境问题和OS项目的顶层设计问题. 本篇做一个小练习:设置显卡显示256色. ...

  6. 《30天自制操作系统》学习笔记--第好多天

    之前看<30天自制操作系统>,参考而成,和书中系统并不完全一致,是在原有基础上按照自己的习惯而成,由于水平和工作原因,未完成内存管理和文件系统,有兴趣者可以通过以下网址https://gi ...

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

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

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

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

  9. 30天自制操作系统-初体验

    最近在图书馆翻阅关于操作系统的书籍,看到川和秀实的自制操作系统决定也动手尝试一下,这本书书名就叫做30天自制操作系统.首先还是附上光盘镜像的获取地址吧.30天自制操作系统光盘镜像ISO完整版下载 - ...

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

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

最新文章

  1. 项目管理中的十一个原则
  2. weblogic集群的资料
  3. Xmind笔记之HTML5+CSS
  4. SQL Server 堆表行存储大小(Record Size)
  5. 一个关于c++ list迭代器的问题
  6. vue 给iframe设置src_vue组件中使用iframe元素
  7. 2018年的AI/ML惊喜及预测19年的走势(一)
  8. 欧几里得算法和扩展欧几里得算法详解
  9. jQuery多选插件
  10. SQL报错:Column count doesn‘t match value count at row 1
  11. dataframe scala 修改值_【Spark学习笔记】 Scala DataFrame操作大全
  12. 了解一点儿JavaConfig
  13. 第J题-=数组中等于K的数对(详解) =======给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数
  14. LeetCode-108将有序数组转换为二叉搜索树
  15. think PHP前台模板,thinkphp5(二)前台模板的引入
  16. Error occurredd during initialization of VM Cound not reserve enough space for object heap
  17. NRF52832 SDK 15.2.0设置内部32768
  18. 微信小程序圣诞帽_完成圣诞快乐Web应用程序界面
  19. POJ 1118 Lining Up 叉积,三点共线。
  20. JVM 运行机制及其原理

热门文章

  1. 315前瞻:哪些互联网消费领域今年可能上榜?
  2. Xiph opus音频编码器试用
  3. 计算机从系统格式开始
  4. html怎么叠加透明图片,css – 您可以在图片上叠加透明div
  5. uniapp打包之后首页白屏
  6. 保利威视收购CuPlayer,视频云竞争大幕已然拉开
  7. 更适合小孩的电动牙刷,轻柔呵护口腔,Combo咸蛋超人电动牙刷上手
  8. MATLAB代码:面向削峰填谷的电动汽车多目标优化调度策略
  9. 火狐浏览器打开IE窗口/IE跳谷歌页面等 --- 自定义协议---手动执行注册表
  10. Win10下IE无法打开网页的解决办法