文档章节

自制操作系统5

LynnZou
 LynnZou
发布于 2017/06/08 23:16
字数 492
阅读 11
收藏 0

让我们直接使用硬盘

;主引导程序
;--------------------------------------------------------------------
%include 'boot.inc'
SECTION MBR vstart=0x7c00
	mov ax,cs
	mov ds,ax
	mov	es,ax
	mov ss,ax
	mov fs,ax
	mov sp,0x7c00
	mov ax,0xb800
	mov gs,ax
;--------------------------------------------------------------------
	mov ax,0600h
	mov bx,0700h
	mov cx,0
	mov dx,184fh
;--------------------------------------------------------------------
	int 10h
;--------------------------------------------------------------------
	mov byte [gs:0x00],'1'
	mov byte [gs:0x01],0xA4

	mov byte [gs:0x02],' '
	mov byte [gs:0x03],0xA4

	mov byte [gs:0x04],'M'
	mov byte [gs:0x05],0xA4

	mov byte [gs:0x06],'B'
	mov byte [gs:0x07],0xA4

	mov byte [gs:0x08],'R'
	mov byte [gs:0x09],0xA4
;--------------------------------------------------------------------
	mov eax,LOADER_START_SECTOR
	mov bx,LOADER_BASE_ADDR
	mov cx,1
	call rd_disk_m_16

	jmp LOADER_BASE_ADDR
	rd_disk_m_16:

	mov esi,eax
	mov di,cx

	mov  dx,0x1f2
	mov al,cl
	out dx,al

	mov eax,esi

	mov dx,0x1f3
	out dx,al

	mov cl,8
	shr eax,cl
	mov dx,0x1f4
	out dx,al

	shr eax,cl
	mov dx,0x1f5
	out dx,al

	shr eax,cl
	and al,0x0f
	or al,0xe0
	mov dx,0x1f6
	out dx,al

	mov dx,0x1f7
	mov al,0x20
	out dx,al

	.not_ready:
	nop
	in al,dx
	and al,0x88
	cmp al,0x08
	jnz .not_ready

	mov ax,di
	mov dx,256
	mul dx
	mov cx,ax

	mov dx,0x1f0
	.go_on_read:
	in ax,dx
	mov [bx],ax
	add bx,2
	loop .go_on_read
	ret

	times 510-($-$$) db 0
	db 0x55,0xaa

命名为mbr_4.S

然后boot.inc为

;------------------loader and kernel--------------
LOADER_BASE_ADDR equ 0x900
LOADER_START_SECTOR equ 0x2

文件位置如下

[root@makeOS software]# ls
bochs  include  mbr_3.S  mbr_4.S  mbr.bin  mbr.S
[root@makeOS software]# nasm -I include/ -o mbr.bin mbr_4.S
[root@makeOS software]# dd if=./mbr.bin of=bochs/hd60M.img bs=512 count=1 conv=notrunc
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.0450586 s, 11.4 kB/s

实现内核加载器

%include 'boot.inc'
section loader vstart=LOADER_BASE_ADDR
mov byte [gs:0x00],'2'
mov byte [gs:0x01],0xA4

mov byte [gs:0x02],' '
mov byte [gs:0x03],0xA4

mov byte [gs:0x04],'L'
mov byte [gs:0x05],0xA4

mov byte [gs:0x06],'O'
mov byte [gs:0x07],0xA4

mov byte [gs:0x08],'A'
mov byte [gs:0x09],0xA4

mov byte [gs:0x0a],'D'
mov byte [gs:0x0b],0xA4

mov byte [gs:0x0c],'E'
mov byte [gs:0x0d],0xA4

mov byte [gs:0x0e],'R'
mov byte [gs:0x0f],0xA4

jmp $
[root@makeOS software]# nasm -I include/ -o loader.bin loader.S
[root@makeOS software]# dd if=./loader.bin of=bochs/hd60M.img bs=512 count=1 seek=2 conv=notrunc
0+1 records in
0+1 records out
99 bytes (99 B) copied, 0.000174176 s, 568 kB/s

我们启动虚拟机之后,屏幕上就可以显示” 2 loader “了。

 

© 著作权归作者所有

上一篇: http容器2
下一篇: 自制操作系统4
LynnZou
粉丝 1
博文 31
码字总数 25112
作品 0
程序员
私信 提问
[Beautifulzzzz的博客目录] 快速索引点这儿O(∩_∩)O~~,红色标记的是不错的(⊙o⊙)哦~

3D相关开发 [direct-X] 1、direct-X最小框架 [OpenGL] 1、环境搭建及最小系统 [OpenGL] 2、企业版VC6.0自带的Win32-OpenGL工程浅析 51单片机 [51单片机] 1602液晶显示控制代码 [51单片机] 1...

史迪奇2号
2017/08/01
0
0
有没有一些 x64 的操作系统学习资料?源码或者其他学习资料

现在书面上的资料有《自己动手写操作系统》《30天自制操作系统》这些都是32位的 问下有没有64位的源码或学习资料?

郭同jet
2013/08/28
414
2
关于毕业设计选题

各位oscer好。 我的问题是这样的,再过一个月就到了毕业选题的时候了,考虑到会有太多XX信息系统设计。所以想弄个特殊一点的。准备选的题目大概是"一个简易操作系统的实现"。但考虑到自己知识...

无脑仔的小明
2014/09/19
766
19
由《30天自制操作系统》引发的漫画创作

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

生气的散人
2013/01/15
1K
9
请教一个c语言调用汇编写的函数的一个初级问题

在汇编里处理c语言里输入的实参不是应该在esp找第一个参数吗?为什么是esp+4呢? 该问题出自《30自制操作系统》第四天

qinuxman
2014/05/22
143
3

没有更多内容

加载失败,请刷新页面

加载更多

驰骋工作流引擎-督查督办系统

1.概要说明 督查督办系统信息化平台适用于政府,企事业单位的重点项目跟进,重点工程部署,及各级精神的传达等督查督办性工作。开发设计坚持流程式管理的总体思路,充分体现督查事项立项的规...

孟娟
4分钟前
0
0
阿里靠什么支撑 EB 级计算力?

作者 关涛 阿里云智能事业群 研究员 导读:MaxCompute 是阿里EB级计算平台,经过十年磨砺,它成为阿里巴巴集团数据中台的计算核心和阿里云大数据的基础服务。去年MaxCompute 做了哪些工作,这...

zhaowei121
6分钟前
0
0
mybatis生成代码配置详解

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.o......

事儿爹
8分钟前
0
0
Vuex和表单绑定的一个神级坑再填一遍

vuex有一个很大的缺陷,就是和input输入框的v-model本身是冲突的。 官方文档给出了两种解决方案:https://vuex.vuejs.org/zh/guide/forms.html 一个是使用get和set → 适用于input框比较少的...

LinearLaw
10分钟前
0
0
CPU与GPU的区别

作者讲述的清楚: 我的理解:1 GPU ALU更多 2 Core 更多 3 业务更加专一(主要进行密集计算) 4 缓存区更少 https://www.zhihu.com/question/19903344...

南桥北木
11分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部