| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 337 人关注过本帖
标题:关于int 13h硬盘读写的问题
收藏  订阅  推荐  打印 
cxbszd
Rank: 1
等级:新手上路
帖子:5
积分:150
注册:2008-8-12
关于int 13h硬盘读写的问题

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”以后,程序虽然能正常运行,但是结果表明程序并没有读取硬盘扇区。请问只是为什么?
搜索更多相关主题的帖子: 汇编  int  13h  硬盘读写  
2008-8-25 13:11
ONEPROBLEM
Rank: 12Rank: 12Rank: 12
来自:编程中国
等级:版主
威望:8
帖子:1381
积分:12632
注册:2008-7-11

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扇区开始的~~于是就可能“结果表明程序并没有读取硬盘扇区”了。
2008-8-25 15:36
woami66
Rank: 2
等级:注册会员
帖子:37
积分:534
注册:2008-2-29

这个程序在纯DOS下应该可以运行
2008-8-25 15:36
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.098107 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved