?? boot.asm
字號:
;%define _BOOT_DEBUG_ ; 做 Boot Sector 時一定將此行注釋掉!將此行打開后用 nasm Boot.asm -o Boot.com 做成一個.COM文件易于調試
%ifdef _BOOT_DEBUG_
org 0100h ; 調試狀態, 做成 .COM 文件, 可調試
%else
org 07c00h ; Boot 狀態, Bios 將把 Boot Sector 加載到 0:7C00 處并開始執行
%endif
jmp short LABEL_START ; Start to boot.
nop ; 這個 nop 不可少
; 下面是 FAT12 磁盤的頭
BS_OEMName DB 'ForrestY' ; OEM String, 必須 8 個字節
BPB_BytsPerSec DW 512 ; 每扇區字節數
BPB_SecPerClus DB 1 ; 每簇多少扇區
BPB_RsvdSecCnt DW 1 ; Boot 記錄占用多少扇區
BPB_NumFATs DB 2 ; 共有多少 FAT 表
BPB_RootEntCnt DW 224 ; 根目錄文件數最大值
BPB_TotSec16 DW 2880 ; 邏輯扇區總數
BPB_Media DB 0xF0 ; 媒體描述符
BPB_FATSz16 DW 9 ; 每FAT扇區數
BPB_SecPerTrk DW 18 ; 每磁道扇區數
BPB_NumHeads DW 2 ; 磁頭數(面數)
BPB_HiddSec DD 0 ; 隱藏扇區數
BPB_TotSec32 DD 0 ; 如果 wTotalSectorCount 是 0 由這個值記錄扇區數
BS_DrvNum DB 0 ; 中斷 13 的驅動器號
BS_Reserved1 DB 0 ; 未使用
BS_BootSig DB 29h ; 擴展引導標記 (29h)
BS_VolID DD 0 ; 卷序列號
BS_VolLab DB 'Tinix0.01 '; 卷標, 必須 11 個字節
BS_FileSysType DB 'FAT12 ' ; 文件系統類型, 必須 8個字節
LABEL_START:
mov ax, cs
mov ds, ax
mov es, ax
Call DispStr ; 調用顯示字符串例程
jmp $ ; 無限循環
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = 串地址
mov cx, 16 ; CX = 串長度
mov ax, 01301h ; AH = 13, AL = 01h
mov bx, 000ch ; 頁號為0(BH = 0) 黑底紅字(BL = 0Ch,高亮)
mov dl, 0
int 10h ; int 10h
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0 ; 填充剩下的空間,使生成的二進制代碼恰好為512字節
dw 0xaa55 ; 結束標志
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -