⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boot.asm

📁 是经典的UNIX的部分源代码
💻 ASM
字号:
[BITS 16]                                                   ;;编译成16位的指令
[ORG 0x7C00]
;----------------------------------------------------------------------------------------------
jmp	                main
;----------------------------------------------------------------------------------------------
MSG                 db "booting pyos from boot.asm ..." , 13 , 10 , 0
BOOT_DRIVER         db 0                                    ;;保存启动的驱动器号
VESA:
  times 256 db 0

;----------------------------------------------------------------------------------------------
read_setup:                                                 ;;读入 setup 程序
  push              es
  
  .read_setup_1
  mov               ax , 0x1000                             ;;setup.asm 所在的段基址            
  mov               es , ax
  mov               bx , 0
  mov               ah , 2
  mov               dl , [ BOOT_DRIVER ]
  mov               ch , 0
  mov               cl , 2
  mov               al , 2                                  ;;读入扇区数,每个扇区为 512B
  int               0x13  
  jc                .read_setup_1
  
  pop               es
  ret
;----------------------------------------------------------------------------------------------
save_boot_driver:
  push              es
  
  mov               ax , 0x8000                             ;;系统数据区的段基址
  mov               es , ax
  mov               al , [ BOOT_DRIVER ]
  mov               [ es:0 ] , ax
  
  pop               es
  ret
;----------------------------------------------------------------------------------------------
show_message:    
  mov               si , MSG
  mov               ah , 0x0e                               ;;设置显示模式
  mov               bh , 0x00                               ;;设置页码
  mov               bl , 0x07                               ;;设置字体属性
  
  .nextchar:
  lodsb
  or                al , al
  jz                .show_message_end
  int               0x10
  jmp               .nextchar
  
  .show_message_end:  
  ret
;----------------------------------------------------------------------------------------------
open_a_20:                                                  ;;打开 A 20 地址线的子程序
  mov               ax , 0x2401
  int               0x15                                    ;;通过 0x2401 中断号调用 BIOS
                                                            ;;0x15 中断完成,这被现代的 BIOS 支持 
  ret
;--------------------------------------------------------------------------------------------------------
main:                                                       ;;主程序          
  mov               ax , 0x0                                ;;boot.asm 程序的段基址
  mov               ds , ax
  
  mov               [ BOOT_DRIVER ] , dl                    ;;得到启动的驱动器号 
  
  call              open_a_20                               ;;打开 a20 地址线
  
  call              save_boot_driver                        ;;保存驱动器号
  
  call              show_message                            ;;显示启动信息  

  call              read_setup                              ;;读入 setup 程序  
  
  jmp dword         0x1000:0                                ;;跳转到 setup 处执行
;---------------------------------------------------------------------------
times 510-($-$$) db 0
db 0x55
db 0xAA

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -