重拾OS的实现
好久没看OS实现了- -。感觉最近过的乱七八糟的。最为一名学渣,苟活于学霸之间实在是很辛苦啊。不过还是感觉要坚持下去比较好,决定每天学一点,写点感想。也算是通过这个平台逼迫一下自己。= =#。
今天回顾一下第一章的最小的操作系统。
首先比不可少的自然是代码。
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx,
mov ax, 01301h
mov bx, 000ch
mov dl,
int 10h
ret
BootMessage: db "Hello, OS world!"
times -($-$$) db
dw 0xaa55
使用nasm编译
nasm boot.asm -o boot.bin
使用dd命令写入
dd if = boot.bin of = boot1.img bs= count=
效果如图所示:

首先分析一下操作系统的启动过程,在打开电源后,BIOS开始进行开机自检。系统开始检查软盘(因为我是从软盘启动的,硬盘就是0磁道0柱面1扇区 )上的0面0磁道1扇区。如果是以0xAA55(如果该区域是一个数组,就可以看做array[510]=0x55,array[511]=0xAA)结束,就认为是一个引导扇区。对于本例子,由于运行在虚拟机环境,写到扇区操作是通过那个dd命令完成的。
BIOS发现了引导扇区后,执行org 07C00,将程序调入0000:7c00处执行。
关于
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
cs 是代码段寄存器,用ax作为一个单独的中转,把代码段寄存器的值赋予ds(数据段)以及es(附加数据段)。这是一个初始化动作。目的是为了让后面的数据操作能定位到正确的位置(这是由寄存器本身的特性决定的)。call Dispstr并循环。jmp $;停止在这一步,不断循环。
mov ax, BootMessage
mov bp, ax
mov cx,
mov ax, 01301h
mov bx, 000ch
mov dl,
int 10h
ret
这里主要就是一个中断调用的过程。即调用bios的int 10;中断显示字符。
到这里我有几个问题其实不太懂。①这段命令生成的代码只能在Bochs里面运行,无法在实体裸机上运行。②关于汇编,我不懂内部运行的具体过程。只懂语法以及使用。为什么这段程序可以作为引导区程序在所有的机器上运行?不同的硬件的机器指令难道不是不通用的吗?
但愿以后会搞懂。。。。。。。
重拾OS的实现的更多相关文章
- 【Java】 重拾Java入门
[概论与基本语法] 取这个标题,还是感觉有些大言不惭.之前大三的时候自学过一些基本的java知识,大概到了能独立写一个GUI出来的水平把,不过后来随着有了其他目标,就把这块放下了.之后常年没有用,早就 ...
- CSS魔法堂:重拾Border之——更广阔的遐想
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——不仅仅是圆角
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——图片作边框
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——解构Border
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- 重拾Blog
上个月是我入职现在的公司三周年的月份,所以又续订了五年的合同,最近有一些思考,也不知道这个五年能否还会一直在这个公司工作. 一切随缘吧. 闲适有毒,忙碌的时光总是过的很快,自从加入这个公司以来,日常的 ...
- [linux]重拾linux
起因 因为想重拾起linux,同时需要用docker起几个镜像,用来学习网络知识.本来想直接去阿里云上买,后来一想自己机器上,起一个linux是个不错的选择,毕竟不花钱! 还可以用来做本地测试,学习使 ...
- 重拾qt
最近公司又接了一个煤矿的项目,要写个小程序摘取数据,我是公司唯一c++程序员,本来搞ios搞好好的,现在又得重拾半年没摸得qt了.呵呵...呵呵呵. 这里只记录这次小程序的一些小的总结吧.. 1.中文 ...
- 重拾linux
重拾linux 起因 因为想重拾起linux,同时需要用docker起几个镜像,用来学习网络知识.本来想直接去阿里云上买,后来一想自己机器上,起一个linux是个不错的选择,毕竟不花钱! 还可以用来做 ...
随机推荐
- Struts2框架之-注解开发
Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action类中每个方法的绑定这是重点,在这里先简单看一下配置文件中的简单配置: <span style=" ...
- ZYNQ 的PS GEM DMA存在缺陷
使用iperf对zynq进行单socket tcp传输速率测试: 无网络损伤时,单向网络带宽约为600Mbps,双向网络带宽相加约400Mbps: 50ms延时,1ms抖动,无丢包时,单向网络带宽约为 ...
- Only MySqlParameter objects may be stored
Only MySqlParameter objects may be stored 今天碰到了这个问题琢磨了半天,最后发现是MySql.Data.dll版本问题,换了个最新版本的就可以了.
- maven使用阿里云仓库
1.修改maven的conf/settings.xml文件,在<mirrors></mirrors>标签里加入: <mirror> <id>nexus- ...
- VUE 入门基础(3)
三,模板语法 Vue将模板编译成虚拟DOM渲染函数,结合响应系统,在应用状态改变时,vue能够智能地计算出重新渲染组件的最小代价并DOM操作上. 插值,文本 数据绑定常见的形式就是使用"Mu ...
- python基础知识5——赋值与深浅拷贝——整数和字符串,列表元组字典
深浅copy 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 import copy 2 # ######### 数字.字符串 #### ...
- IA32寄存器与x86-64寄存器的区别
IA32寄存器 一个IA32CPU包含一组8个存储32位值的通用寄存器,这些寄存器用来存储整数数据和指针: 31-0 15-0 15-8 7-0 使用惯例 %eax %ax %ah %al 调用者保存 ...
- php面向对象之final的应用
final从英文字面上很容易理解,翻译成中文就是“最终的”之意.在php面向对象编程中,final的应用主要有两个作用: 1.使用final修饰的类,该不能被继承 01 <?php 02 ...
- mysql+ibatis 批量插入
述:相比oracle批量插入,mysql批量插入就简单的多了,mysql支持values后面跟多条数据,进行批量插入,并且主键可以自增,不像oracle会遇到序列问题. 1.建表 CREATE TAB ...
- Java file read & write
1. read public static void readfile(String filepath) { BufferedReader br = null; try { String sCurre ...