www.pudn.com > Tinx.zip > 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				; 结束标志