代码拉取完成,页面将自动刷新
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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。