boot.asm 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. ;将程序开始位置设置为0x7c00处,并给BaseOfStack赋值为0x7c00
  2. org 0x7c00
  3. BaseOfStack equ 0x7c00
  4. Label_Start:
  5. ;初始化寄存器
  6. mov ax, cs
  7. mov ds, ax
  8. mov es, ax
  9. mov ss, ax
  10. mov sp, BaseOfStack
  11. ;清屏
  12. mov ax, 0x0600 ;AL=0时,清屏,BX、CX、DX不起作用
  13. mov bx, 0x0700 ;设置白色字体,不闪烁,字体正常亮度,黑色背景
  14. mov cx, 0
  15. mov dx, 0184fh
  16. int 10h
  17. ;设置屏幕光标位置为左上角(0,0)的位置
  18. mov ax, 0x0200
  19. mov bx, 0x0000
  20. mov dx, 0x0000
  21. int 10h
  22. ;在屏幕上显示Start Booting
  23. mov ax, 0x1301 ;设置显示字符串,显示后,光标移到字符串末端
  24. mov bx, 0x000f ;设置黑色背景,白色字体,高亮度,不闪烁
  25. mov dx, 0x0000 ;设置游标行列号均为0
  26. mov cx, 10 ;设置字符串长度为10
  27. ;为什么这里不能直接把ds赋值给es?
  28. push ax
  29. mov ax, ds
  30. mov es, ax
  31. pop ax
  32. mov bp, StartBootMessage
  33. int 10h
  34. ;软盘驱动器复位
  35. xor ah, ah
  36. xor dl, dl
  37. int 13h
  38. jmp $
  39. StartBootMessage: db "Start Boot"
  40. ;填满整个扇区的512字节
  41. times 510 - ( $ - $$ ) db 0
  42. dw 0xaa55 ;===确保以0x55 0xaa为结尾