一步一步实现一个简单的OS(简单的让boot载入setup)
这次直接写用boot载入setup模块。
文件系统就先不弄了,以后再说,
咱先整个转简单的载入器。
我把软盘引导改成硬盘了,由于硬盘的读扇区函数简单一些。
这里没有做硬盘的mbr区,我认为在如今我的这个系统里面,mbr区还不是必须的。
好了,不废话了,贴代码。
这个是bootasm.S的代码:
.globl start
start: # 入口地址
.code16 cld # 字符串运算方向,(详细的,百度吧,基础) # 初始化各个段寄存器
xorw %ax, %ax
movw %ax, %ds
movw %ax, %es
movw %ax, %ss movw $start, %sp # 保存引导驱动器号
movb %dl, (bootdrv) # 清屏
movw $0x02, %ax
int $0x10 # 显示信息
movw $str, %si
call puts # 读第二个扇区。到内存的0x80000(0x8000:0x0000)处, 两个扇区
movl $1, %eax # 扇区号
movw $2, %cx # 扇区数
movw $0x8000, %bx # buffer 地址
movw %bx, %es
xorw %bx, %bx
call readdisk # 跳转到刚刚载入到内存中的SETUP模块
ljmp $0x8000, $0x0000 #
# 字符串显示函数(这个网上不少。自己看着理解吧)
# 输入:
# ds:si = 字符串地址
#
puts:
movw $0x07, %bx
movb $0x0E, %ah
1:
lodsb
orb %al, %al
jz 1f
int $0x10
jmp 1b
1:
ret #
# 读磁盘扇区(这个是用0x13的0x42号扩展中断。详细的中断參数,自己百度去吧。。 。)
#
# 输入: eax = 要读LBA扇区号
# cx = 扇区数(一次读入的字节数不能大于64KB)
# es:bx = 数据缓存区
#
readdisk:
pushal
movb (bootdrv), %dl pushl $0
pushl %eax pushw %es
pushw %bx pushw %cx
pushw $0x0010
movb $0x42, %ah
movw %sp, %si
int $0x13 addw $0x10, %sp
popal
ret bootdrv: # 这个定义了一个byte型的变量,用来保存当前引导驱动器号
.byte 0 str: # 这个是字符串,昨天看linux源代码发现的,
.string "in the boot code\n\r"
然后是setupasm.S的代码
.globl start
start: # 入口地址
.code16 cld # 字符串运算方向,(详细的,百度吧,基础) # 初始化各个段寄存器
movw %cs, %ax
movw %ax, %ds
movw %ax, %es
movw %ax, %ss movw $start, %sp # 显示信息
movw $str, %si
call puts # 死循环,停机
1:
hlt
jmp 1b #
# 字符串显示函数
# 输入:
# ds:si = 字符串地址
#
puts:
movw $0x07, %bx
movb $0x0E, %ah
1:
lodsb
orb %al, %al
jz 1f
int $0x10
jmp 1b
1:
ret str:
.string "in the setup code!!!\n\r"
setup模块如今写的非常easy,主要就是用来測试boot的载入代码写的是否正确。
。。
。
下一节会对setup模块进行填充完好,详细做什么功能我想大家也知道了。
就不多说了。。。。。。
详细的构建文件和源代码在群里面,我会传上去的。。。。。
一步一步实现一个简单的OS(简单的让boot载入setup)的更多相关文章
- 一步一步写一个简单通用的makefile(三)
上一篇一步一步写一个简单通用的makefile(二) 里面的makefile 实现对通用的代码进行编译,这一章我将会对上一次的makefile 进行进一步的优化. 优化后的makefile: #Hel ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(四)——一步一步教你如何撸Dapr之订阅发布
之前的章节我们介绍了如何通过dapr发起一个服务调用,相信看过前几章的小伙伴已经对dapr有一个基本的了解了,今天我们来聊一聊dapr的另外一个功能--订阅发布 目录:一.通过Dapr实现一个简单的基 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(三)——一步一步教你如何撸Dapr
目录:一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实现一个简单的基于.net的微服务电商系统(二)--通讯框架讲解 三.通过Dapr实现一个简单的基于.net的微服务电 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理
状态管理和上一章的订阅发布都算是Dapr相较于其他服务网格框架来讲提供的比较特异性的内容,今天我们来讲讲状态管理. 目录:一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务
我个人认为Actor应该是Dapr里比较重头的部分也是Dapr一直在讲的所谓"stateful applications"真正具体的一个实现(个人认为),上一章讲到有状态服务可能很 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流
在一般的互联网应用中限流是一个比较常见的场景,也有很多常见的方式可以实现对应用的限流比如通过令牌桶通过滑动窗口等等方式都可以实现,也可以在整个请求流程中进行限流比如客户端限流就是在客户端通过随机数直接 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(八)——一步一步教你如何撸Dapr之链路追踪
Dapr提供了一些开箱即用的分布式链路追踪解决方案,今天我们来讲一讲如何通过dapr的configuration来实现非侵入式链路追踪的 目录:一.通过Dapr实现一个简单的基于.net的微服务电商系 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权
Oauth2授权,熟悉微信开发的同学对这个东西应该不陌生吧.当我们的应用系统需要集成第三方授权时一般都会做oauth集成,今天就来看看在Dapr的语境下我们如何仅通过配置无需修改应用程序的方式让第三方 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十)——一步一步教你如何撸Dapr之绑定
如果说Actor是dapr有状态服务的内部体现的话,那绑定应该是dapr对serverless这部分的体现了.我们可以通过绑定极大的扩展应用的能力,甚至未来会成为serverless的基础.最开始接触 ...
随机推荐
- Python之数据结构:集合
一.set集合 1.集合是一个无序不重复元素集,有去重的作用 set集合类需要的参数必须是迭代器类型的,如:序列.字典等,然后转换成无序不重复的元素集.由于集合是不重复的,所以可以对字符串.列表.元组 ...
- 【11】vue router 之导航钩子
导航钩子 vue-router 提供的导航钩子主要用来拦截导航,让它完成跳转或取消.有多种方式可以在路由导航发生时执行钩子:全局的, 单个路由独享的, 或者组件级的.http://www.jiansh ...
- Linux脚本中调用SQL,RMAN脚本
Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...
- spring boot 排除个别配置类的代码
废话不说,直接上代码 @SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfigu ...
- Bioconda安装与使用
1. Bioconda是一个自动化管理生物信息软件的工具,就像APPstore.360软件管家一样. Bioconda的优点是安装简单,各个软件依赖的环境一同打包且相互隔离,非常适合在服务器中建立自 ...
- CentOS 7系统添加启动项
CentOS 7系统已经把CentOS 6的 runlevel 系统服务管理替换成了systemd.在 /etc/rc[0-6S].d 下添加启动项已经不能在系统启动的时候自动执行,需要通过新的 sy ...
- nginx报404的可能错误
1.转移地址写错,如root E:software_setup\ftpfile,而你实际的目录地址(比如test.jpg)在ftpfile文件夹里面的img文件夹下,如果直接找ftpfile\test ...
- hdu 5059(模拟)
Help him Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- LeetCode OJ-- Letter Combinations of a Phone Number ***
https://oj.leetcode.com/problems/letter-combinations-of-a-phone-number/ 使用递归,深搜,使用 map 保存已经处理过的结果 cl ...
- LeetCode OJ-- Combination Sum II **
https://oj.leetcode.com/problems/combination-sum-ii/ 一列数,每个数只能用一次或者不用,给出和为target的组合. 递归写的深搜,使用了编程技巧, ...