回 帖 发 新 帖 刷新版面

主题:扩展int13读磁盘的问题?

下面这段代码,通过扩展int13,读一个扇区数据,写到文件001中,但是输出的文件内容不对,可能是buf有问题,但是不知道问题究竟出哪了。
高手指点一下 。。

datasg  segment
        tmpbuf     db 512 dup(0) 
DAP:        
        packsize   db 16
        reserved   db 0
        blockcount dw 1 
        buffoff    dw 0
        buffseg    dw 0
        blocknum   dq 1 
        
        file   db   '001 ',0 
datasg  ends 

codesg  segment 
assume  cs:codesg,ds:datasg 
start: 
        mov ax,datasg 
        mov ds,ax
        mov [buffseg],seg tmpbuf 
        mov [buffoff],offset tmpbuf
        mov ah,42h 
        mov dl,80h 
        mov si,offset DAP 
        int 13h 
        jnc exit

        mov dx,offset file 
        mov cx,0 
        mov ah,3ch              ; ds:dx 文件名 ,创建一个带句柄的文件
        int 21h 
        
        mov bx,ax               ; ax 为文件的句柄
        mov dx,0 
        mov cx,512 
        mov ah,40h              ; cx -- number of bytes to write  
                                ; bx -- file handle 
                                ; ds:dx -- pointer buffer
        int 21h 

exit:        
        mov ah,3eh              ; close a file with handle
        int 21h 
        mov ax,4c00h 
        int 21h 

codesg  ends 
end     start

回复列表 (共3个回复)

沙发


功能号40h的int 21h中断,DS:DX->data to write ,而你送的值为0,所以写入的内容应该是0吧,应该改为
mov dx, offset tmpbuf

板凳

应该不是这个问题,因为ds就是datasg   而tmpbuf就是在offset 为0的地方,所以offset tmpbuf 和0是一样的。
我试过的。

谢谢。
应该是磁盘地址包的问题,001里有数据不都是0。好像是文件头什么的。。。

3 楼

那你参考一下我之前的程序吧:
1:DAP结构
addpacket       struc                         
packetsize  db    16                           
reserved    db    0                           
blockcount  dw    ?                           
buff        dd    ?                          
blocknum    dq    ?                            
addpacket       ends

data        segment                          
packet      addpacket <>   ;定义的结构变量
data        ends
code        segment
            assume      cs:code,ds:data
.586
start:      mov   ax, data
            mov   ds, ax
            .......
            mov   packet.packetsize, 16         ;结构变量赋值
            mov   packet.reserved,   00h
            mov   packet.blockcount, 01h
            lea   si, packet
            mov   ax, offset diskbuff
            mov   word ptr packet[si+4],ax
            mov   ax, seg diskbuff
            mov   word ptr packet[si+6],ax
            mov   word ptr packet[si+8],bx
            mov   sector_numl,bx
            ........


我来回复

您尚未登录,请登录后再回复。点此登录或注册