实现一个简单的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 ...
随机推荐
- Mongodb数据备份恢复
Mongodb数据备份恢复 一.MongoDB数据库导入导出操作 1.导出数据库 twangback为备份的文件夹 命令: mongodump -h 127.0.0.1[服务器IP] -d advie ...
- Jndi使用好处,与简单实例【Tomcat】
JNDI学习总结(一)——JNDI数据源的配置 一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动 ...
- java 调用mysql的存储过程(简单示例)
首先我在mysql的test数据库里定义了一个student表: create table student4( id int primary key, sanme char(5) ); 插入几 ...
- mysql事务、触发器、视图、存储过程、函数
存储过程: procedure 概念类似于函数,就是把一段代码封装起来, 当要执行这一段代码的时候,可以通过调用该存储过程来实现. 在封装的语句体里面,可以用if/else, case,while等控 ...
- android_重写button样式
这样的button样式应该源自IOS.假设安卓上实现,则须要使用android上面的layer-list来实现. 事实上layer-list有点像framlayout,作用就是覆盖. 先说一下实现原理 ...
- 设计模式六大原则(4):接口隔离原则(Interface Segregation Principle)
接口隔离原则: 使用多个专门的接口比使用单一的总接口要好. 一个类对另外一个类的依赖性应当是建立在最小的接口上的. 一个接口代表一个角色,不应当将不同的角色都交给一个接口.没有关系的接口合并在一起,形 ...
- c++自带倒置数组函数
#include<stdio.h> #include <vector> #include <queue> #include<algorithm> usi ...
- git笔记之解决eclipse不能提交jar等文件的问题
今天用git托管了一个java web项目,由于是web项目,所以要上传jar文件(此项目未使用maven管理),一直使用git commit and push,就是在server上看不到jar文件上 ...
- hdu4635(最多加多少边,使得有向图不是强连通图)
连边的最后肯定是两个集合x,yx集合的每个元素,到y集合中的每个元素都是单向的边x集合,和y集合都是完全图设a为x集合的点的个数, b为y集合的那么答案就是 a * b + a*(a-1) + b*( ...
- Leet code —Jump Game
问题叙述性说明: Given an array of non-negative integers, you are initially positioned at the first index of ...