📄 bootsec.asm
字号:
[BITS 16]
[ORG 0x7C00]
jmp start
msg1 db 'Loading System$' ;loading信息
bootdrive db 0 ;启动驱动器号
start:
xor ax,ax ; 设置 DS
mov ds,ax ; DS=0X0000
; 清屏
mov ax,3 ; 设置清屏功能号
int 0x10 ; 调用 BIOS 10 号中断清屏
ResetFloppy: ; 重置磁盘
mov ax,0 ; 设置重置磁盘的功能号
mov dl,[bootdrive] ; 选择启动磁盘
int 0x13
jc ResetFloppy ; 如果出错则重试
mov si,msg1 ; 打印字符串
call print
ReadFloppy: ; 读内核到内存中 0000:9000 (es:bx)处
xor ax,ax ; 设置 es 寄存器
mov es,ax
mov bx,0x9000
mov ah,2 ; 设置读磁盘功能号
mov dl,[bootdrive] ; 设置欲读驱动器号
mov ch,0 ; 磁头号
mov cl,2 ; 起始扇区号
mov al,10 ; 读入扇区数量
int 13h
jc ReadFloppy
;软盘控制寄存器的I/O地址为3F0 - 3F7
mov dl,[bootdrive] ; 停止驱动器
mov dx,0x3f2
mov al,0x0c
out dx,al
mov ax,0x0000
mov ds,ax
jmp 0x9000 ;jump to setup.s
print:
lodsb ; AL=字符存放在DS:SI
cmp al,'$' ; If AL='$' then hang
je return
mov ah,0Eh ; Print AL
mov bx,0
int 10h
jmp print ; 打印下一个字符
return:
ret
times 510-($-$$) db 0
db 0x55
db 0xAA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -