自己写操作系统1??引导扇区
作者:网络转载 发布时间:[ 2013/12/10 10:11:56 ] 推荐标签:
软件环境:win xp,bochs,nasm,硬盘镜像VHD
这是一个简单的引导程序,因为引导扇区只有512字节,并且后两个自己必须为55aa所以一共可以利用的字节只有510,但是作为联系应该够了。
这只是一个简单的例子,让引导程序读取虚拟硬盘镜像的三号扇区中的512字节数据到内存0x7e00处。
MBR引导程序
;MBR.ASM
SECTION ALIGN=16 VSTART=0x7C00
LBA_BASE_ADDRESS EQU 5
MOV AX , [cs:SS_BASE]
MOV SS , AX
XOR SP , SP
MOV AX , [cs:DS_BASE]
MOV DS , AX
XOR BX , BX
MOV CX , 512
write_memory:
mov byte [bx] , 0x02
inc bx
loop write_memory
xor bx , bx
CALL WRITE_DISK
JMP $
;
;
;
;DS:BX MEMORY ADDRESS
;
WRITE_DISK:
mov dx , 0x1f2
mov al , 0x01
call out_port
call pio_delay
mov dx , 0x1f3
mov al , 0x03
call out_port
call pio_delay
mov dx , 0x1f4
mov al , 0x00
call out_port
call pio_delay
mov dx , 0x1f5
mov al , 0x00
call out_port
call pio_delay
mov dx , 0x1f6
mov al , 0xe0
call out_port
call pio_delay
call check_drdy
;wait?until?the?controller?is?not?busy
busy_hd:
call read_status
and al , 0x80
jnz busy_hd
;wait?until?the?controller?accepts?command
accept_hd:
call read_status
and al , 0x40
jz accept_hd
mov dx , 0x1f7
mov al , 0x30
call out_port
call pio_delay
;wait until the controller is not busy
busy_hd1:
call read_status
and al , 0x80
jnz busy_hd1
;wait until the controller accepts command
accept_hd2:
call read_status
and al , 0x88
cmp al , 0x08
jnz accept_hd2
mov cx , 512
mov al , 0x12
mov dx , 0x1f0
s:
call out_port
loop s
mov dx, 0x1f0 ; port
mov di, bx ; buf
mov cx, 256
cld
rep outsw
accept_hd3:
call read_status
test al , 0x40
jz accept_hd3
ret
out_port:
out dx , al
ret
;;
check_drdy:
mov dx , 0x1f7
in al, dx
test al, 0x40
jz check_drdy
ret
read_status:
mov dx , 0x1f7
in al , dx
ret
;;
pio_delay:
nop
nop
nop
nop
ret
DS_BASE DW 0x1000
SS_BASE DW 0x2000
TARGET_PROGRAM_ADDRESS DB 0x02
TARGET_PROGRAM_SIZE DB 0x01
times 510 - ($-$$) db 0
dw 0xaa55
|
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
浅谈操作系统对内存的管理HBase佳实践??用好你的操作系统选择适合Rails开发的操作系统三问:Linux操作系统安全加固卡巴斯基面向物联网设备发布专用操作系统卡巴斯基正式推出操作系统:非Linux,主打安全,秘研14年Linux以外的7种开源操作系统现代操作系统 - 存储设备看操作系统对程序的执行过程有哪些支持谷歌正开发融合操作系统Fuchsia,真的有必要吗?iOS在印度连第二名都排不上 本土操作系统太强大了解决Linux操作系统下AES解密失败的问题如何保护你的Linux操作系统?谷歌:安卓操作系统前景不容乐观韩国发布自主操作系统TmaxOS:兼容安卓、iOS和Windows摆脱安卓/WP依赖,华为将做自主操作系统
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南