c语言读取c盘文件,C语言从磁盘上读取数据解决办法

Assembly code.............

;以下读每一个扇区,

StartRead:

mov ax, [SectAdr]

mov es, ax ; es:bx,段地址

mov bx, [MemAdr] ; es:bx,偏移地址

mov dl, 0h ; 驱动器号

mov dh, [BeginSide] ; 读写头号

mov ch, [BeginTrack] ; 磁道号

mov cl, [BeginField] ; 扇区号

ReadField:

mov ah, 02h ; 读磁盘

mov al, 01h ; 一个扇区

int 13h ; 磁盘服务中断

jc ReadField ; 不成功重新读

;读一个扇区后应该做以下调整

inc byte [BeginField] ; 调整扇区号

cmp byte [BeginField], 013h ; 每个磁道的一侧包括18个扇区,读完后要调整磁道号和磁头号

jne next0 ; 否则跃过磁道号与磁头号调整跳转到next0,只调整内存地址和扇区计数

mov byte [BeginField], 01h ; 重新置扇区号,从1号开始到18号结束,而不是从0号开始

cmp byte [BeginSide], 00h ; 查看磁头号,看是否需要增加磁道号

je next1 ; 不需要则直接跳转到调整磁头号

inc byte [BeginTrack] ; 调整磁道号

next1:

xor byte [BeginSide], 0x01 ; 调整磁头号

next0:

mov bx, [MemAdr]

add bx, 0x0200 ; 每读入一个扇区地址增加512个字节

mov [MemAdr], bx ; 调整内存地址

inc byte [Num] ; 调整读入扇区数

cmp byte [Num], 0x80 ; 检查是否读入128个扇区,即64k数据

jne next2 ; 如果不到64k,则跳转到next2,继续下一次读扇区操作

inc byte [Sect] ; 如果达到64k,则增加读入段数计数值

;即时显示,读完一个64k段在新的一行显示一个“Sect”

mov ax, cs

mov es, ax

mov ax, DoneSect

mov bp, ax ; ES: BP = ...

mov cx, 6 ; CX = ...

mov ax, 01301h ; AH = 13, AL = 01h

mov bx, 000ch ; ...0(BH=0)....(BL=0Ch,..)

mov dh, byte [Sect]; 第Sect,即新增加的行

mov dl, 0 ; 第0列

int 10h ; 10h ...

mov byte [Num], 0h

mov bx, 0h

mov [MemAdr], bx

mov ax, [SectAdr] ; 调整段地址

add ax, 0x1000

mov [SectAdr], ax

cmp byte [Sect], 01h ; 如果读入1段则停止读入

je next3

next2:

jc StartRead

BeginTrack: db 0x0 ; 开始磁道号

BeginSide: db 0x0 ; 开始磁头号

BeginField: db 0x2 ; 开始扇区号

Num: db 0x0 ; 读入扇区数

Sect: db 0x0 ; 读入段数

MemAdr: dw 0x0000 ; 偏移地址

SectAdr: dw 0x7000 ; 段地址

.....................

------解决方案--------------------

直接读取磁道里面的数据,应该涉及到底层的驱动了吧

如果涉及驱动就要等windows开源了

------解决方案--------------------

磁盘也就个文件, 用你稀饭的文件操作的东东( fopen , open , CreateFile , fstream ... )打开, 定位到相应的磁道, 读写就是.

比如:

fp = fopen( "\\\\.\\PhysicsDriver0" , "rb" );

ifstream ifs( "/dev/sda" , ios::binary );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值