初探如何编写系统引导程序
2014-02-24 16:48
267 查看
计算机启动过程
当按下电源开关后,将发送电信号给BIOS,BIOS获得电信号后将启动自检程序检查周边设备是否通电完毕
检查完毕后,自检程序将控制权交还BIOS,BIOS然后读取引导启动盘的启动程序
在虚拟机里选择软盘启动,计算机会检查软盘的0面0磁道1扇区,如果发现它以0xAA55则BIOS认为它是一个引导扇区,也就是Boot Sector。
同时BIOS在读取引导启动程序之前事先分配好最初的1MB内存空间
这是一个源自《自己动手编写操作系统》书中给的实例代码略改动而来。
start:
jmp main
BootMessage db 'boot loader!'
MessageLength dd 12
main:
org 07c00h;load code at 0x7c00h
;cli
mov ax,cs
mov ds,ax
mov es,ax
call DispStr
jmp $
;sti
DispStr:
mov ax,BootMessage
mov bp,ax;string address
mov cx,12;string length
mov ax,01301h;ah=13h al=01h
mov bx,00ch;bh=0 black-red bl=0ch high-light
mov dl,0
int 10h;interrupt 10
ret
times 510-($-$$) db 0;make it 512bit 512-2=510
dw 0xaa55;end flag
0x07C00是引导程序加载的起始地址。
一个超级简单的引导程序就这么出现了。
当按下电源开关后,将发送电信号给BIOS,BIOS获得电信号后将启动自检程序检查周边设备是否通电完毕
检查完毕后,自检程序将控制权交还BIOS,BIOS然后读取引导启动盘的启动程序
在虚拟机里选择软盘启动,计算机会检查软盘的0面0磁道1扇区,如果发现它以0xAA55则BIOS认为它是一个引导扇区,也就是Boot Sector。
同时BIOS在读取引导启动程序之前事先分配好最初的1MB内存空间
这是一个源自《自己动手编写操作系统》书中给的实例代码略改动而来。
start:
jmp main
BootMessage db 'boot loader!'
MessageLength dd 12
main:
org 07c00h;load code at 0x7c00h
;cli
mov ax,cs
mov ds,ax
mov es,ax
call DispStr
jmp $
;sti
DispStr:
mov ax,BootMessage
mov bp,ax;string address
mov cx,12;string length
mov ax,01301h;ah=13h al=01h
mov bx,00ch;bh=0 black-red bl=0ch high-light
mov dl,0
int 10h;interrupt 10
ret
times 510-($-$$) db 0;make it 512bit 512-2=510
dw 0xaa55;end flag
0x07C00是引导程序加载的起始地址。
一个超级简单的引导程序就这么出现了。
相关文章推荐
- 如何用linux系统编写c程序
- 如何用linux系统编写c程序
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
- 如何在Blackfin上已移植的uClinux系统中添加自己编写的程序
- 如何用linux系统编写c程序
- 如何用linux系统编写c程序
- 如何用linux系统编写c程序
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
- 如何用linux系统编写c程序
- 系统恢复技术-主引导程序错误,如何恢复
- BIOS是如何从软盘加载系统引导程序的
- [reprint]如何编写引导程序 Hello World
- 双系统:win7+fedora16 如何用windows引导程序启动fedora16
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统
- 用VB如何编写无窗口系统热键程序
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统
- 如何编写引导程序 Hello World
- 如何用linux系统编写c程序