首页
社区
课程
招聘
[旧帖] [求助]引导代码在虚拟机通过,在真机却不行? 0.00雪花
发表于: 2013-4-9 21:18 1479

[旧帖] [求助]引导代码在虚拟机通过,在真机却不行? 0.00雪花

2013-4-9 21:18
1479
如题,我打算用lba48方式用端口读操作系统的pbr然后jump到其代码上进行引导操作系统,但这段代码在安有XP的bochs虚拟机上通过,但在真机上去不行,我也考虑了真机主板等硬件不支持LBA48,但我电脑上的win7又能读出硬盘,实在是不理解为什么,恳请给位大虾指点一二!
贴出代码,nasm编译通过

cld
mov cx,512
mov ax,0x07c0
mov ds,ax
mov si,0
mov ax,0x2000
mov es,ax
mov di,0
rep movsb
jmp 0x2000:0x1b
mov ax,0x07c0
mov ds,ax
push 1
push 63
push 0
push 0
push 0
call readhd
mov dx,0
jmp 0x07c0:0

readhd:
mov bp,sp
mov dx,0x1f2
mov al,[bp+11]
out dx,al
mov al,[bp+10];mov al,1
out dx,al  ;写两次0x1f2端口: 第一次要读的扇区数的高8位,第二次低8位
inc dx
mov al,[bp+7];mov al,1
out dx,al
mov al,[bp+8];mov al,0
out dx,al ;写0x1f3: LBA参数的24~31位,写0x1f3: LBA参数的0~7位
inc dx
mov al,[bp+4];mov al,0
out dx,al
mov al,[bp+9]
out dx,al ;写0x1f4: LBA参数的32~39位,写0x1f4: LBA参数的8~15位
inc dx
mov al,[bp+5]
out dx,al
mov al,[bp+6]
out dx,al  ;写0x1f5:LBA参数的40~47位,写0x1f5: LBA参数的16~23位
inc dx
mov al,0x40 ;lba48 0x40;lba28 0xe0
out dx,al
mov dx,0x1f7
mov al,0x24 ;lba48 0x24;lba24 0x20
out dx,al
mov dx,0x1f7
wai:
in al,dx
and al,0x88
cmp al,0x08
jnz wai
mov ax,512
mov dx,[bp+10]
mul dx
mov cx,ax
mov dx,0x1f0
mov bx,0
rr:
in ax,dx
mov [bx],ax
add bx,2
loop rr
ret 10

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
求回复呀!!!
2013-4-9 22:50
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你这太高深了. 在这里应该没人能答的了
2013-4-10 18:05
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哎....没办法呀,还不能成为正式会员...........
2013-4-11 11:49
0
雪    币: 242
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我也是遇到这个问题纳闷中...调试发现真机上貌似只能读取出一个扇区 后面的扇区都无法读取...- -
2013-7-7 12:54
0
雪    币: 313
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我已经转正很久了
2013-7-7 20:49
0
游客
登录 | 注册 方可回帖
返回
//