bootsec.asm

来自「国内的一个小型操作系统」· 汇编 代码 · 共 63 行

ASM
63
字号
[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 + =
减小字号Ctrl + -
显示快捷键?