我的学习之旅(2) boot.s

49 篇文章 0 订阅
49 篇文章 0 订阅

 

;用 bios提供的 int 13h 中断把存放在磁盘的第2和第3个扇区的setup.s 加载到内存起始地址 0x9020:0000
 ;假定用floopy disk并且setup.s大小不超过1024字节
 ; ah = 2 read, ah = 3 write
 ; al: section
 ; ch: 
load_setup:
 

;目标地址
 mov ax, #0x9020
 mov es, ax
 xor bx, bx

 ; sector 2, track 0
 mov cx, #0x0002
 
 ;drive 0, head 0
 mov dx, #0x0000
 
 ;service 2
 mov ah, #0x2
 
 ;需要加载2个扇区
 mov al, #0x2
 int 0x13

 ;加载成功就跳转到load_setup_ok
 jnc load_setup_ok

 ;如果加载失败就需要重新跳转到load_setup再次加载
 mov dx, #0x0000
 mov ax, #0x0000
 int 0x13
 jmp load_setup 

 ;加载成功后就可以跳转到0x9020:0000处执行setup.s代码了。 
 load_setup_ok:

 ;执行setup.s前调用bios中断int 0x10打印一点boot.s完成的信息。
 ;恢复 es 寄存器 to 0x9000,否则无法正确访问到msg数据了。
 mov ax, #0x9000
 mov es, ax

 
 mov ah, #0x03
 xor bh, bh
 int 0x10

 ;打印数据长度为24字节
 mov cx, #24 
 
 ; page 0, attribute 7
 mov bx, #0x0007

 mov bp, #msg
 
 ; write string and move cursor
 mov ax, #0x1301
 int 0x10 

 ; 跳转到 0x9020:0000执行setup.s代码
 jmpi 0x0, 0x9020

 ;要打印的数据定义区
 msg:
  .byte 13,10
  .ascii "Loading system ..."
  .byte 13,10,13,10


 ;填充剩余的空间一直到510字节偏移处
 .org 510

 ;根据bios的标准最后两个字节内容必须是0xaa55
 boot_flag:
  .word 0xaa55


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值