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

📄 boot.asm

📁 保护模式下8259A芯片编程及中断处理探究
💻 ASM
字号:
;boot.asm 0.04
;for pyos4 
;xieyubo@126.com
;
;这是boot.asm的第四个版本,这个版本有较大改动,参考了linux 0.11的设计
;首先指出的是版本标识改动,为了便于日后修改,以后每个文件设定独立版本号
;并指出用于什么系统,此版本用于 pyos4 系统
;
;本版本的内存分配如下
;内存起示地址为 0x90000
;最大结束地址为 0x9ffff
;最大共 64KB       
;所有启动代码在一个段内,方便调用
;启动代码共分两部分,一是boot,一是setup,这点照搬linux 0.11的设计
;但与其不同的是,boot不会将自己搬到0x90000处,而直接跳到 0x90100处运行
;0x90000~0x900ff (256B) 系统保留来存放一些从BIOS中取出的关键数据
;0x90100~0x904ff (1KB):此处开始存放 setup,setup大小为1KB

[BITS 16]                                         ;编译成16位的指令
[ORG 0x7C00]
;----------------------------------------------------------------------------------------------
jmp	Main
;----------------------------------------------------------------------------------------------
;数据定义
MSG                 db                  "Loading pyos ..."  ;输出信息
                    db                  13 , 10 , 0         ;13表示回车,10表示换行,0表示字符串结束
BOOTSEG             equ                 0x0000              ;boot所在的段基址    
         
SETUPSEG            equ                 0x9000              ;setup所在的段基址
SETUPOFFSET         equ                 0x0100              ;setup所在的偏移量
SETUPSIZE           equ                 1024                ;setup的大小,必须是 512 的倍数

BOOTDRIVER          db                  0                   ;保存启动的驱动器号
;----------------------------------------------------------------------------------------------
ShowMessage:  
  ;以下程序行为显示输出信息
  mov               ah , 0x0e                               ;设置显示模式
  mov               bh , 0x00                               ;设置页码
  mov               bl , 0x07                               ;设置字体属性
  
  .nextchar:
  lodsb
  or                al , al
  jz                .return
  int               0x10
  jmp               .nextchar
  
  .return:  
  ret
;-----------------------------------------------------------------------------------------------  
Main:    
  mov               [BOOTDRIVER] , dl                       ;得到启动的驱动器号                                         ;开始运行处
  
  ;以下程序设置数据段
  mov               ax , BOOTSEG
  mov               ds , ax
  mov               si , MSG  
  
  call              ShowMessage                             ;显示信息
  
  ;读入setup
  ;从磁盘的第二个扇区读到0x90100处
  .readfloopy:
  mov               ax , SETUPSEG            
  mov               es , ax
  mov               bx , SETUPOFFSET
  mov               ah , 2
  mov               dl , [BOOTDRIVER]
  mov               ch , 0
  mov               cl , 2
  mov               al , SETUPSIZE / 512                    ;读入扇区数( 2个共1KB )
  int               0x13
  jc                .readfloopy
  
  ;把启动驱动器号保存在0x90000处
  mov               al , [BOOTDRIVER]
  mov               [0] , al
  
  ;跳转
  jmp               SETUPSEG : SETUPOFFSET
;---------------------------------------------------------------------------
times 510-($-$$) db 0
db 0x55
db 0xAA

⌨️ 快捷键说明

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