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

来源:互联网 发布:c语言中int 编辑:程序博客网 时间:2024/06/06 11:01

 

;用 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 0