一个小bootloader

(这是学习计算机启动过程和汇编的时候写的)

计算机启动流程:

加电初始化 -> 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
原文地址:https://www.cnblogs.com/cdbb/p/12435456.html