2 Star 0 Fork 0

yywd_123/EXOS-src

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Boot.asm 1.21 KB
一键复制 编辑 原始数据 按行查看 历史
yywd_123 提交于 2022-03-05 15:30 . 32-bits Protect Mode!!!
org 0x7c00
mov sp,0x7c00
;清屏
mov ax,0x0600
mov bh,0x07
mov cx,0
mov dx,0x184f
int 0x10
;读取硬盘的第2扇区并加载到内存0x800的位置
mov eax,0x02 ;起始扇区lba地址
mov bx,0x800 ;写入的内存地址
mov cx,4 ;待读入的扇区数
call read_disk
jmp 0x800
;读硬盘方法
read_disk:
mov esi,eax ;备份lba扇区号
mov di,cx ;备份
;设置要读取的扇区数
mov dx,0x1f2
mov al,cl
out dx,al
mov eax,esi ;恢复
;设置LBA地址
mov cl,8
;0-7位的lba
mov dx,0x1f3
out dx,al
;8-15位的lba
mov dx,0x1f4
shr eax,cl
out dx,al
;16-23位的lba
mov dx,0x1f5
shr eax,cl
out dx,al
;24-27位的lba
mov dx,0x1f6
shr eax,cl
and al,0x0f ;lba的24-27位
or al,0xe0 ;另外4位为1110,表示lba模式
out dx,al
;请求读取硬盘
mov dx,0x1f7
mov al,0x20
out dx,al
.wait: ;等待硬盘准备好
nop
in al,dx
and al,0x88 ;第4位为1表示准备好,第7位为1表示忙
cmp al,0x08
jnz .wait
;读数据
mov ax,di
mov dx,256
mul dx
mov cx,ax
mov dx,0x1f0
.read_loop:
in ax,dx
mov [bx],ax
add bx,2
loop .read_loop
ret
times 510-($-$$) db 0
db 0x55,0xaa
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/yywd123/exos-src.git
git@gitee.com:yywd123/exos-src.git
yywd123
exos-src
EXOS-src
master

搜索帮助