我的学习之旅(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
- 我的学习之旅(2) boot.s
- 我的学习之旅(1) boot.s
- 我的学习之旅(3)setup.s
- 我的学习之旅(4) setup.s
- 我的学习之旅(5) setup.s
- 我的学习之旅(6)setup.s
- 我的学习之旅(10) start32.s
- 我的学习之旅(11) start32.s
- 我的学习之旅(42)asm.s
- 我的学习之旅(43)asm.s
- 我的linux学习之旅2
- 我的学习之旅
- Spring Boot 学习之旅
- boot.s head.s 学习说明
- U-Boot学习笔记(二):U-Boot--arm--Start.S的分析
- 我的python的学习之旅
- 我的第一篇博客spring boot学习
- 我的hibernate学习之旅(2)
- 漫画设计模式2——老板招工模式(代理模式)
- MySQL修改root密码的4种方法(以windows为例)
- PowerDesigner的应用(二)
- eclipse内存分析工具MAT浅谈(一)
- 线程和fragment
- 我的学习之旅(2) boot.s
- 奇怪的bug,win8里的ctrl-backspace失效了
- iOS开发Xcode6之后创建空项目
- 沙盒路径下Plist文件操作
- 权重标签
- 自省--“勿在浮沙筑高台”
- 鸟哥私房菜(基础篇第三版)笔记
- 集成化环境包WampServer如何定义网站根目录
- MySQL查询指定库中所有的表记录的行数,表的大小,创建时间,字符集