注册 登录
编程论坛 汇编论坛

关于int 13h硬盘读写的问题

cxbszd 发布于 2008-08-25 13:11, 1785 次点击
assume cs:code,ds:data
data segment
    buffer db 512 dup(0)
    filename db 'D:\bootse.txt',0
data ends
code segment
start:
    
    mov ax,data
    mov ds,ax
    mov es,ax

    mov bx,offset buffer
    mov ah,2
    mov al,1
    mov ch,0
    mov cl,1
    mov dh,0
    mov dl,80h
    int 13h             ;boot sector写入buffer

    mov ah,3ch
    mov dx,offset filename
    mov cx,0
    int 21h               ;建立文件

    
    mov bx,ax
    mov ah,40h
    mov cx,512
    mov dx,offset buffer
    int 21h                 ;buffer中的内容写入文件

    mov ah,3eh
    int 21h                ;关闭文件

    mov ax,4c00h
    int 21h
code ends
end start

以上程序在 Virtual PC的虚拟DOS下运行,运行后出现问题。DOS马上死了。
还有,如果将 “mov dl,80h”改成“mov dl,81h”以后,程序虽然能正常运行,但是结果表明程序并没有读取硬盘扇区。请问只是为什么?
2 回复
#2
ONEPROBLEM2008-08-25 15:36
LZ,我有心顶帖,可却没那水平啊~~~唉,尽力回答一下,给自己捞点分得了~~LZ看了之后别笑我菜啊~~
Virtual PC的虚拟DOS ?这是什么?它是不是得在WINDOWS下运行?是的话,我觉得操作系统是不会允许你读取C盘Master Boot Record 的。这也许就是保护模式在后台作怪。毕竟,无论怎么虚拟DOS,最终还是建立在保护模式基础上的。这有点像你在WINDOWS下可以格式化D E F 盘,如果格式化C盘就不行。
如果将 “mov dl,80h”改成“mov dl,81h”。是改成了要读取D盘吧?但是,D盘却不是从0磁头、0柱面、1扇区开始的呀?(个人看法)也许是从1磁头、277柱面、1扇区开始的~~于是就可能“结果表明程序并没有读取硬盘扇区”了。
#3
woami662008-08-25 15:36
这个程序在纯DOS下应该可以运行
1