|
@@ -0,0 +1,57 @@
|
|
|
+;将程序开始位置设置为0x7c00处,并给BaseOfStack赋值为0x7c00
|
|
|
+ org 0x7c00
|
|
|
+
|
|
|
+BaseOfStack equ 0x7c00
|
|
|
+
|
|
|
+Label_Start:
|
|
|
+ ;初始化寄存器
|
|
|
+ mov ax, cs
|
|
|
+ mov ds, ax
|
|
|
+ mov es, ax
|
|
|
+ mov ss, ax
|
|
|
+ mov sp, BaseOfStack
|
|
|
+
|
|
|
+ ;清屏
|
|
|
+ mov ax, 0x0600 ;AL=0时,清屏,BX、CX、DX不起作用
|
|
|
+ mov bx, 0x0700 ;设置白色字体,不闪烁,字体正常亮度,黑色背景
|
|
|
+ mov cx, 0
|
|
|
+ mov dx, 0184fh
|
|
|
+ int 10h
|
|
|
+
|
|
|
+ ;设置屏幕光标位置为左上角(0,0)的位置
|
|
|
+ mov ax, 0x0200
|
|
|
+ mov bx, 0x0000
|
|
|
+ mov dx, 0x0000
|
|
|
+ int 10h
|
|
|
+
|
|
|
+ ;在屏幕上显示Start Booting
|
|
|
+ mov ax, 0x1301 ;设置显示字符串,显示后,光标移到字符串末端
|
|
|
+ mov bx, 0x000f ;设置黑色背景,白色字体,高亮度,不闪烁
|
|
|
+ mov dx, 0x0000 ;设置游标行列号均为0
|
|
|
+ mov cx, 10 ;设置字符串长度为10
|
|
|
+
|
|
|
+ ;为什么这里不能直接把ds赋值给es?
|
|
|
+ push ax
|
|
|
+ mov ax, ds
|
|
|
+ mov es, ax
|
|
|
+ pop ax
|
|
|
+ mov bp, StartBootMessage
|
|
|
+ int 10h
|
|
|
+
|
|
|
+ ;软盘驱动器复位
|
|
|
+ xor ah, ah
|
|
|
+ xor dl, dl
|
|
|
+ int 13h
|
|
|
+
|
|
|
+ jmp $
|
|
|
+
|
|
|
+StartBootMessage: db "Start Boot"
|
|
|
+
|
|
|
+;填满整个扇区的512字节
|
|
|
+ times 510 - ( $ - $$ ) db 0
|
|
|
+ dw 0xaa55 ;===确保以0x55 0xaa为结尾
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|