我的Sinix操作系统(2)引导程序(1)
我的Sinix的第一个版本的引导程序来了,只是显示了一行欢迎词!但是这已经是一个可以不借助任何软件而在一个裸机上去行的程序了!感觉很好!
其实有很多同学觉得写操作系统没有环境,但是我觉得有虚拟机一切都可以办到,我就是用虚拟机来学习对软盘和硬盘进行扇区级读写。所以,我写的这个引导区,经过一个小软件把它写入到我的一个虚拟软盘中,然后再用这张虚拟的软盘引导我的Sinix裸机!就可以看到可爱的Sinix了!
;***********************
;* 文件名:boot.asm
;***********************
;%define _BOOT_DEBUG_ ;做Boot Sector时一定将此行注释掉
%ifdef _BOOT_DEBUG_
org 0100h
%else
org 07c00h ;Boot状态,BIOS把Boot Sector加载到0:7c00处并开始执行
%endif
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ;调用显示字符串例程
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax ;es:bp = 串地址
mov cx, 50 ;cx = 串长度
mov ax, 01301h ;ah = 13, al = 01h BIOS调用,显示字符,光标跟随移动
mov bx, 0002h ;页号为0(bh=0) 黑底绿字(bl=02h,高亮)
mov dh, 10 ;起始行
mov dl, 12 ;起始列
int 10h ;10h号中断
ret
BootMessage: db "Hello,Welcome to Sinix World! Sinix is Booting."
times 510-($-$$) db 0 ;填充余下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ;Boot Sector 结束标志
;* 文件名:boot.asm
;***********************
;%define _BOOT_DEBUG_ ;做Boot Sector时一定将此行注释掉
%ifdef _BOOT_DEBUG_
org 0100h
%else
org 07c00h ;Boot状态,BIOS把Boot Sector加载到0:7c00处并开始执行
%endif
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ;调用显示字符串例程
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax ;es:bp = 串地址
mov cx, 50 ;cx = 串长度
mov ax, 01301h ;ah = 13, al = 01h BIOS调用,显示字符,光标跟随移动
mov bx, 0002h ;页号为0(bh=0) 黑底绿字(bl=02h,高亮)
mov dh, 10 ;起始行
mov dl, 12 ;起始列
int 10h ;10h号中断
ret
BootMessage: db "Hello,Welcome to Sinix World! Sinix is Booting."
times 510-($-$$) db 0 ;填充余下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ;Boot Sector 结束标志