(这是学习计算机启动过程和汇编的时候写的)
计算机启动流程:
加电初始化 -> BIOS自检 -> BIOS初始化 -> 运行bootloader
在BIOS完成初始化之后, 会将启动盘刚开始的512B载入到内存0x7c00处
汇编代码:boot.asm
org 0x7c00
base_sp equ 0x7c00
start:
mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax
mov sp,base_sp
clear_screen:
mov ax,0x0600
mov bx,0x0700
mov cx,0
mov dx,0x0184
int 0x10
show_message:
mov ax,ds
mov es,ax
mov bp,bootmessage
mov ax,0x1301
mov bx,0x000f
mov cx,endbootmessage-bootmessage
mov dx,0x0000
int 0x10
jmp $
bootmessage:
db "start booting with fat12"
endbootmessage:
;=== fill zero until whole sector
times 510 - ($ -$$) db 0
dw 0xaa55
生成镜像(linux环境, 需要安装nasm):
nasm -f bin boot.asm -o boot.bin
dd if=boot.bin of=boot.img bs=512 count=1
dd if=/dev/zero of=boot.img bs=512 count=2879 conv=notrunc oflag=append