开发自己的操作系统引导程序
来源:互联网 发布:dot.js清空页面 编辑:程序博客网 时间:2024/05/21 22:24
导读:
开发自己的操作系统引导程序
当你打开计算机时发生了什么?
1.电源打开;2.BIOS开始执行;3.引导程序开始执行。
引导程序的规定:你要有一个普通的二进制文件(COM 格式);大小是512个字节;最后两个字节一定是0AA55h;它能被载入到内存地址0x7C00。
工具:
NASM——是一个免费的汇编工具(有DOS/windows/Linux三种版本)
PARTCOPY2.0——DOS下可自由往磁盘拷贝数据的软件
举例:
1.Just hang……
这个简单的引导程序只能挂起:
hang:
jmp hang
times 512-($-$$)-2 db 0
dw 0AA55h
连接这个引导程序:
nasm -f bin -o hang.bin hang.asm
现在你需要一张格式化磁盘,传送hang.bin到磁盘的引导扇区
partcopy hang.bin 0 200 -f0
“0”的意思是指从hang.bin文件的顶端开始传送
“200”的意思是指拷贝200个字节
插入磁盘和重新启动机器,测试这个引导程序。
2.一个实模式下的引导程序
上面的程序非常简单,下面介绍一个稍微复杂一点的程序。
bits 16
org 0x7C00
start:
cli;关中断
mov ax,0x9000;设置堆栈址:0x90000
mov ss,ax
mov sp,0
sti;开中断
l1:push ds
mov dl,0;
重新设置磁盘控制器
mov ax,0
int 13h
pop ds
jc fail
push es
mov ax,0x1000;ES:BX=10000
mov es,ax
mov bx,0
mov ah,2;读磁盘扇区
mov al,5;读入5个扇区
mov cx,2;柱面号=0,扇区号=2
mov dx, 0;磁头号=0,驱动器号=0
int 13h;ES:BX=来自磁盘上的数据
pop es
jc l1
mov ax,0x10000;设置段寄器
mov es,ax
mov ds,ax
push ax
mov ax,0
push ax
retf
fail:
jmp fail
times 512-($-$$)-2 db 0
dw 0AA55h
连接这个引导程序:
nasm -f bin -o boot.bin boot.asm
传送boot.bin到磁盘的引导扇区
partcopy boot.bin 0 200 -f0
为了使程序可以看到,在编译下面程序
mov ax,1000h;修改段寄存器
mov ds,ax
mov es,ax
mov si,msg;打印 "JIPPIKAYE!"
call putstr
hang:;挂起
jmp hang
putstr:
lodsb
or al,al
jz short putstrd
mov ah,0x0E
mov bx,0x0007
int 0x10
jmp putstr
putstrd:
retn
msg db 'JIPPIKAYE!',13,10,0
连接和传送:
nasm -f bin -o boot.bin boot.asm
partcopy boot.bin 0 200 -f0 200
在partcopy中最后一个参数“200”意思是指磁盘的偏移地址插入磁盘和重新启动机器,你会看到“JIPPIKAYE”然后挂起。
本文转自
http://www.woos.cn/bbs/read.php?tid=72
开发自己的操作系统引导程序
当你打开计算机时发生了什么?
1.电源打开;2.BIOS开始执行;3.引导程序开始执行。
引导程序的规定:你要有一个普通的二进制文件(COM 格式);大小是512个字节;最后两个字节一定是0AA55h;它能被载入到内存地址0x7C00。
工具:
NASM——是一个免费的汇编工具(有DOS/windows/Linux三种版本)
PARTCOPY2.0——DOS下可自由往磁盘拷贝数据的软件
举例:
1.Just hang……
这个简单的引导程序只能挂起:
hang:
jmp hang
times 512-($-$$)-2 db 0
dw 0AA55h
连接这个引导程序:
nasm -f bin -o hang.bin hang.asm
现在你需要一张格式化磁盘,传送hang.bin到磁盘的引导扇区
partcopy hang.bin 0 200 -f0
“0”的意思是指从hang.bin文件的顶端开始传送
“200”的意思是指拷贝200个字节
插入磁盘和重新启动机器,测试这个引导程序。
2.一个实模式下的引导程序
上面的程序非常简单,下面介绍一个稍微复杂一点的程序。
bits 16
org 0x7C00
start:
cli;关中断
mov ax,0x9000;设置堆栈址:0x90000
mov ss,ax
mov sp,0
sti;开中断
l1:push ds
mov dl,0;
重新设置磁盘控制器
mov ax,0
int 13h
pop ds
jc fail
push es
mov ax,0x1000;ES:BX=10000
mov es,ax
mov bx,0
mov ah,2;读磁盘扇区
mov al,5;读入5个扇区
mov cx,2;柱面号=0,扇区号=2
mov dx, 0;磁头号=0,驱动器号=0
int 13h;ES:BX=来自磁盘上的数据
pop es
jc l1
mov ax,0x10000;设置段寄器
mov es,ax
mov ds,ax
push ax
mov ax,0
push ax
retf
fail:
jmp fail
times 512-($-$$)-2 db 0
dw 0AA55h
连接这个引导程序:
nasm -f bin -o boot.bin boot.asm
传送boot.bin到磁盘的引导扇区
partcopy boot.bin 0 200 -f0
为了使程序可以看到,在编译下面程序
mov ax,1000h;修改段寄存器
mov ds,ax
mov es,ax
mov si,msg;打印 "JIPPIKAYE!"
call putstr
hang:;挂起
jmp hang
putstr:
lodsb
or al,al
jz short putstrd
mov ah,0x0E
mov bx,0x0007
int 0x10
jmp putstr
putstrd:
retn
msg db 'JIPPIKAYE!',13,10,0
连接和传送:
nasm -f bin -o boot.bin boot.asm
partcopy boot.bin 0 200 -f0 200
在partcopy中最后一个参数“200”意思是指磁盘的偏移地址插入磁盘和重新启动机器,你会看到“JIPPIKAYE”然后挂起。
本文转自
http://www.woos.cn/bbs/read.php?tid=72
- 开发自己的操作系统引导程序
- 如何开发自己的操作系统的引导程序?
- 如何开发自己的操作系统的引导程序
- 构建自己的操作系统[1]-引导程序
- 用 GRUB 引导自己的操作系统
- 用 GRUB 引导自己的操作系统
- 用 GRUB 引导自己的操作系统
- 开发自己的操作系统
- 恢复Linux操作系统的GRUB引导程序
- 引导程序和操作系统的区别
- 操作系统引导程序(nasm)
- 操作系统引导程序顺序
- 把自己的操作系统写入U盘(FAT32)引导扇区
- 运行自己开发的操作系统
- 开发一套自己的操作系统
- 操作系统实践之引导程序
- 操作系统引导程序学习笔记
- 比LILO更强劲的多操作系统引导程序
- mysql 字符集的问题 解决方法 使用UTF-8
- MySQL中SELECT语句的基本语法
- 重新执笔
- mysql concat,substring用法
- 在ASP.Net中实现flv视频转换
- 开发自己的操作系统引导程序
- 利用缓存 分别更新日投票数,周投票数,月投票数
- 利用缓存 更新点击数
- JS 控制显示的图片
- Java工具集介绍10_23
- 李阳疯狂英语突破对话(51)-Departure and Arrival出发与到达
- 那位起名高手给我家的小宝宝起个名字啊
- Java工具集介绍10_24
- onblur在html中的意思是:控件在失去焦点的时候触发的事件