首页
社区
课程
招聘
[旧帖] int13绝对读磁盘出错(已解决,求原因~) 0.00雪花
发表于: 2011-1-25 00:13 3938

[旧帖] int13绝对读磁盘出错(已解决,求原因~) 0.00雪花

2011-1-25 00:13
3938
实模式下,
使用int13h功能02h读扇区,

在执行int13h之前寄存器如下:
ax: 0x0201 cx: 0x0101
dx: 0x0000 bx: 0x0000
es: 0x0AE2

也就是说,
读AL=1个扇区,
磁道号CH=1,
扇区号CL=1,
磁头/面号DH=0
驱动器号DL=0 表示第一个软盘A:

ES:BX为数据缓冲区=0x0AE2:0x0000

但是执行后AH=01H,即非法命令~

使用Bochs没问题,但是使用Virtual PC和真机就会出现这个问题~
这里的软盘A:是img镜像,应该不会出现数据损坏必须低格的问题~

非常纠结,求解释~

详见8L~
代码在此, SimOS.rar

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 2401
活跃值: (1402)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
你的真機,

指的是 Windows 下的 DOS-Box 吧?

直接開機進 DOS 再試看看?
2011-1-25 10:57
0
雪    币: 93
活跃值: (55)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
我写的程序是一个在软盘里的引导扇区~

也就是说,真机 其实是无操作系统的环境 ,这时我使用的是真实的软盘~
不过我使用Virtual PC,不管是img镜像,还是真实的软盘,都会出现这个问题~
2011-1-25 18:24
0
雪    币: 2401
活跃值: (1402)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
这应该是 MicroSoft 和 Windows 本身的问题。
非法命令的信息是由 Windows 发出的吗?
2011-1-25 23:08
0
雪    币: 93
活跃值: (55)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
5
这个非法命令,是BIOS程序的返回值~
2011-1-26 14:14
0
雪    币: 2401
活跃值: (1402)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
我猜想, 是 Virtual PC 內建的 BIOS 不支持直接讀取磁區嗎?
2011-1-27 14:37
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
7
xor ax, ax
mov sp,0x7bff ;看看你的栈
mov bx, 0xAE20
mov es, ax		; read to es:bx
mov ax, 0x201		; ah=2 - read sectors, al - sectors num
mov cx, 1		;
mov dx, 0x00		; 1st floppy disk 
int 0x13

你该贴出代码来看看的...好大家分析一下..
2011-1-27 20:22
0
雪    币: 93
活跃值: (55)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
8
嘿嘿,解决了,不过不明所以~
果然是栈的问题。。。
我程序一开始得栈设ss=0x9000,sp=0
后来改为ss=0x8000,sp=0
就可以了

bochs和virtual PC、真机,的不同结果应该是因为不同的BIOS程序~

不过还是有点不解~
0x90000-0x9FFFF这段内存BIOS应该是不使用的吧~
为什么会有影响呢~

求解释,分就给先让我明白真相的的人吧~
2011-1-27 22:40
0
游客
登录 | 注册 方可回帖
返回
//