实现一个简单的boot
1.汇编语言。分别汇编器和链接as86和ld86。码如下面:
.globl begtext,begdata,begbss,endtext,enddata,endbss
.text
begtext:
.data
begdata:
.bss
begbss:
.text
BOOTSEG=0x7c0
entry start
start:
jmpi go,BOOTSEG go:
mov ax,cs
mov ds,ax
mov es,ax mov ax,#0x0600
mov cx,#0x0000
mov dx,#0xFFFF
int 0x10 mov cx,#20
mov dx,#0x0000
mov bx,#0x000c
mov bp,#msg1
mov ax,#0x1301
int 0x10
loop0:jmp loop0 msg1:
.ascii "Loading system..."
.byte 13,10
.org 510
.word 0xAA55
.text
endtext:
.data
enddata:
.bss
endbss:
BOOTSEG=0x7c00
entry start
start:
jmpi go,BOOTSEG
go:
entry start告诉编译器程序入口是start,我们这段是引导代码。引导代码在引导盘的指定位置处,BIOS会读取引导盘的第一个扇区到内存0x7c00:0x00处。
注意:程序执行在实模式以下。寻址方式段*16+偏移,要想在0x7c00初開始执行,要设BOOTSEG=0x7c0,而不是0x7c00。
jmpi go,BOOTSEG是跳转到0x7c00:go处运行。前面我们说到BIOS会读取引导扇区到内存的0x7c00处。而jmpi 这条语句使得引导程序从0x7c00開始运行,也就是说。開始运行我们当前的引导区程序。
mov ax,#0x0600
mov cx,#0x0000
mov dx,#0xFFFF
int 0x10
这段代码调用BIOS的0x10中断,功能是清屏。
mov cx,#20
mov dx,#0x0000
mov bx,#0x000c
mov bp,#msg1
mov ax,#0x1301
int 0x10
上面代码调用BIOS的0x10中断,显示字符串msg1
.org 510
.word 0xAA55
启动扇区标志
2.编译调试boot.s程序。
前边说过使用as86汇编器和ld86链接器,使用bochs模拟器,bochs支持虚拟的软盘和硬盘。由于软盘简单一些,所以我们把程序编译后放到软盘上就可以启动了。
(1)编译boot.s
as86 -0 -a -o boot.o boot.s
(2)连接boot.o
ld86 -0 -s -o boot boot.o
(3)制作虚拟软盘
dd bs=32 if=boot of=boot.img skip=1
由于boot前32字节是文件头,所以要跳过不写。把后边全部的内容写进boot.img,至此boot.img就是做好的可启动虚拟软盘了
3.执行调试
创建bochsrc.txt。输入bochs命令就可以调试boot程序
4.linux的dd命令具体解释
dd [option]
语法:
if=输入文件[STDIN]
of=输出文件[STDOUT]
ibs=bytes 一次读取bytes字节
skip=blocks,跳过输入文件开头的ibs*blocks块
seek=bytes,跳过输出文件bytes*blocks块
obs=bytes,一次写入bytes字节
bs=bytes,等于同一时候设置obs和ibs
版权声明:本文博主原创文章,博客,未经同意不得转载。
实现一个简单的boot的更多相关文章
- spring boot一个简单用户管理DEMO
概述 该Demo旨在部署一个简单spring boot工程,包含数据编辑和查看功能 POM配置 <?xml version="1.0" encoding="UTF- ...
- Java Spring Boot VS .NetCore (一)来一个简单的 Hello World
系列文章 Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filte ...
- Spring Boot 揭秘与实战 自己实现一个简单的自动配置模块
文章目录 1. 实战的开端 – Maven搭建 2. 参数的配置 - 属性参数类 3. 真的很简单 - 简单的服务类 4. 自动配置的核心 - 自动配置类 5. spring.factories 不要 ...
- spring boot: @Entity @Repository一个简单的数据读存储读取
spring boot: @Entity @Repository一个简单的数据读存储读取 创建了一个实体类. 如何持久化呢?1.使用@Entity进行实体类的持久化操作,当JPA检测到我们的实体类当中 ...
- spring boot入门笔记 (一) - 一个简单的说明+一个案例
spring boot 简化开发:把平时开发者最常用的到一些步骤,按照开发者的习惯,把能包装的就包装成一些固有的工具类(就比如我们之前连接数据库时常写的DB工具类).当然,是在原有的spring框架的 ...
- 构建一个简单的Spring Boot项目
11 构建一个简单的Spring Boot项目 这个章节描述如何通过Spring Boot构建一个"Hello Word"web应用,侧重介绍Spring Boot的一些重要功能. ...
- 一个简单的spring boot程序
搭建一个spring boot项目十分的方便,网上也有许多,可以参考 https://www.cnblogs.com/ityouknow/p/5662753.html 进行项目的搭建.在此我就不详细介 ...
- 一个简单且易上手的 Spring boot 后台管理框架-->EL-ADMIN
一个简单且易上手的 Spring boot 后台管理框架 后台源码 前台源码
- Linux内核分析—完成一个简单的时间片轮转多道程序内核代码
---恢复内容开始--- 20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10 ...
随机推荐
- SVN的命令行操作
最近在进行svn二次开发,使用的是svnkit.看了很多svnkit的api,渐渐发现都是和SVN的命令行操作对应的.顺便研究一下svn的命名行操作. 1.将文件checkout到本地目录: 基本命令 ...
- CF 460C Present 【DP+】主意
给你n高树花.m日,每天连续浇筑w鲜花.一天一次,花长1高度单位 求m天后.最矮的花最高是多少 最大最小问题能够用二分来解 首先我们能够得到全部花的最矮高度即答案的下界,给这个花浇m天即是答案的上界 ...
- sql server实现主从复制
测试环境 :主机: 数据库sql server08 r2 系统windows server 2008 r2 IP192.168.1.202 丛机:数据库sql server12 系统window ...
- maven 打包 时出现非法字符: /65279错误
maven 打包 时出现非法字符: /65279错误 碰到的一个问题: 使用下面的命令给工程打包时, maven mvn clean package -Ptest01 -Dmaven.test.ski ...
- android uiautomator自己主动化測试
前提是自己电脑上配置好JDK,android和ant的环境 1.命令行下进入\Android-sdk\tools\文件夹下,执行命令: android list 查看相应android版本 ...
- 64地点 Windows 8/7 根据系统 32地点PLSQL 耦合 64 地点 Oracle 11g
64地点 Windows 8/7 根据系统 32地点PL/SQL 耦合 64 地点 Oracle 11g 说明:安装后Oracle的 oci.dll 是64位的,而32位应用程序 PL/SQL ...
- Html5 Device API详解
三.四月曾学习过html5相关知识,并就html5 device api做过一次讲解 课程时长一个小时,预期达到level 200目标,即知道html5 device api是什么,且知道怎么实现 面 ...
- PyUnit框架学习
http://www.oschina.net/question/12_27127#INSTALL http://www.360doc.com/content/11/0606/23/54470_1221 ...
- hadoop的一些名词解释
在网上收集了一些mapreduce中常用的一些名词的解释,分享一下: Shuffle(洗牌):当第一个map任务完成后,节点可能还要继续执行更多的map 任务,但这时候也开始把map任务的中间输出交换 ...
- oracle迁移mysql数据库注意(转)
oracle转mysql修改: 1. substr() substr( string , 0, 10) 这里测试 必须从 第一位获取 既是 substr(string , 1 , 10)2. to_c ...