大家帮我看下!为什么我这样读软盘不成功

难得糊涂ha 2010-09-21 10:35:40

;read 0,0,2 sector to 07e00h
read_sec_num equ 550
mov ax,07e0h
mov es,ax
mov bx,0000h ;保存数据的缓冲区指针
mov cx,0002h ;ch为开始读的柱面数,cl为开始的扇区数
mov dx,0000h ;dh为开始的磁头数,dl为所在驱动器,00为软盘 BIT7为1则是硬盘,即80H开始
mov si,read_sec_num ;所要读的扇区数,因为是每次读一扇区,用循环来实现读多扇区
;

;高密度软盘的格式为side=2,cyl=80,sector=18,从0面0柱1扇区开始,直到
;0面0柱18扇区,下来是1面0柱到18扇区,再下来到0面1柱0扇区,直到第79柱

next_cylinder:



mov ah,dh ;ah做为磁头计数器
next_side:

mov al,cl ;al做为扇区计数器

next_sector:
push ax
mov cl,al
mov dh,ah
Read_fd_sector:
mov ax,0201h
int 13h
jb p_die
pop ax
dec si
jz start ;这是下面主程序的开始点
add bx,200h
jnc Address_Is_right

Address_adjust: ;当判断BX已超过FFFFH时重新设置段址ES和偏移BX
push ax
mov ax,es
add ax,1000h
mov es,ax
xor bx,bx
pop ax
Address_Is_right:
inc al
cmp al,18
jbe next_sector ;扇区数不大于18就继续读下一扇区,大于就调整SIDE,
;读取下一个磁头的18扇区
mov cl,1 ;扇区数赋初值
inc ah
cmp ah,1
jbe next_side ;磁头数不大于1就读下一个磁头,大于就转到另一个柱面去读取
mov dh,0
inc ch
cmp ch,79
jbe next_cylinder


p_die:
;display error message
xor dx,dx
mov ah,03h
int 10h
mov ax,1301h
mov bl,07h
mov cx,read_err_len
mov bp,offset read_err
push cs
pop es
int 10h
jmp $
read_err db 'Floppy_disk readed fault!'
read_err_len=$-read_err
...全文
83 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhgwbzhd 2010-09-26
  • 打赏
  • 举报
回复
我觉得你去看看中断大全里面的int13,你用的是2号功能。可以看看这个。还有一个42号功能。是他的扩展。

就能解决你的问题。
难得糊涂ha 2010-09-25
  • 打赏
  • 举报
回复
谢谢 goodider !能否把有关软盘读取的限制说的详细些呢
goodider 2010-09-25
  • 打赏
  • 举报
回复
CL的限制也是int 13读取软盘时的限制
难得糊涂ha 2010-09-25
  • 打赏
  • 举报
回复
唉!这个版块怎么了!人太少了?还是人都太冷漠了?问个问题也没人理!自己顶吧又不让!这都什么呀!问下版主,我这样问问题是不是你也讨厌呀?也不知你对版主的位置讨厌不?
难得糊涂ha 2010-09-23
  • 打赏
  • 举报
回复
想问下读软盘时都有什么方面的限制!有人说cl不能大于16!还有什么dma 64k限制什么的!哪位能详细给我解释下好吗!先谢谢了
小魔菇 2010-09-23
  • 打赏
  • 举报
回复
仔细分析下吧 肯定是那个小细节弄错了
可以debug调试调试
110CODE 2010-09-23
  • 打赏
  • 举报
回复
可能是操作系统的原因吧!xp环境下很多的东西是不让你接触的!要在纯dos系统中!就会肯定可以的!
难得糊涂ha 2010-09-22
  • 打赏
  • 举报
回复
自己先顶

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧