![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-18 10:29 |
共 47,814 主题排行 / 349,907 发帖 / 今日 0 篇 / 48,259 会员排行 |
| DOS疑难解答 & 问题讨论 (解答室) » [问题]硬盘主引导的备份 |
| 可打印版本 1,356 / 8 |
| 第1楼 pcuser80 | 发表于 2006-10-12 23:39 |
| 初级用户 发帖 50 积分 136 | |
|
[问题]硬盘主引导的备份 我用DOS联盟的文章讲述的方法备份硬盘主引导,输入如下:
debug mov ax,201 mov bx,200 mov cx,1 mov dx,80 int 13 int 3 -g=100 -r=cx cx 0001:200 -n boot.zyd -w 200 -q 在-w 200这一行出了问题 系统显示"write 2000200 bytes, D盘没有足够的空间",换C盘也是如此 然后我只输入w后面不加参数,之后得到一个32Mbyte大小的文件 这是主引导文件吗? ps:我是在WINDOWS XP下用grub for DOS 0。96 加载DOS71启动软盘镜像,在这个DOS环境下进行的以上操作 |
|
| 第2楼 beiyuly | 发表于 2006-10-13 21:09 |
| 初级用户 发帖 40 积分 95 | |
|
代码明显错误.
|
|
| 第3楼 beiyuly | 发表于 2006-10-13 21:10 |
| 初级用户 发帖 40 积分 95 | |
| 第4楼 GOTOmsdos | 发表于 2006-10-13 22:06 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
cx 应该是200才对
|
|
| 第5楼 DOS95 | 发表于 2006-10-14 23:49 |
| 初级用户 发帖 49 积分 112 | |
|
你运行后 BX的值变成200了,W 命令写文件时标示文件大小的高位寄存器就放在 BX时,CX放的是低位值,当然就不对了。
所以 G 后要这样 r bx bx XXXX:0200 0 r cx cx XXXX:0001 200 另外,MBR 放在从 XXXX:0200 开始后 200bit ,而 W 时是从 XXXX:0100 开始计算的,要算好大小哦。 |
|
| 第6楼 DOS95 | 发表于 2006-10-14 23:57 |
| 初级用户 发帖 49 积分 112 | |
|
所以,最后要这样 -a
mov ax,201 mov bx,200 mov cx,1 mov dx,80 int 13 int 3 -g -r bx 0 -r cx 200 -r ds ds+10 (注意这里,DS+10 就相当于原来的 DS:200 变成 DS:100,如果原来的 DS 是 1234,现在把它改成 1244,即 1234+10) -n boot.dat -w -q 这样就生成了一个 512 字节的 MBR 文件。 |
|
| 第7楼 beiyuly | 发表于 2006-10-15 02:15 |
| 初级用户 发帖 40 积分 95 | |
|
mov ax,201
这条语句错误了。 你好好看看int13的资料吧。 ;┌─────────────────────────────────┐ ;│BIOS 呼叫 INT 13H,AH=01H │ ;│讀取磁碟機狀態 │ ;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │ ;│成功 => (C=0),(失敗 C=1,示誤碼如下) │ ;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │ ;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │ ;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │ ;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │ ;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│ ;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │ ;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │ ;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │ ;│ AH=08H:DMA 忙碌中 AH=AAH:hard disk drive 未備妥 │ ;│ AH=09H:DMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │ ;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │ ;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │ ;│ 自動校正錯誤功能,而且只有硬碟才有ECC │ ;└─────────────────────────────────┘ ;┌─────────────────────────────────┐ ;│BIOS 呼叫 INT 13H,AH=02H │ ;│讀取磁區資料 │ ;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │ ;│? (AL) <= 欲讀取的磁區數 │ ;│? (CH) <= 磁軌號碼,從 0 開始,高 2 bit 可存於 cl 的 b6、b7 │ ;│? (CL) <= 起始磁區編號,從 1 開始 │ ;│? (DH) <= 磁頭號碼,從 0 開始 │ ;│? (ES:BX) <= 欲儲存資料的緩衝區記憶體變數 │ ;│成功 => (C=0),(AL=真正讀到的磁區數) │ ;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │ ;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │ ;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │ ;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │ ;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│ ;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │ ;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │ ;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │ ;│ AH=08H:DMA 忙碌中 AH=AAH:hard disk drive 未備妥 │ ;│ AH=09H:DMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │ ;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │ ;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │ ;│ 自動校正錯誤功能,而且只有硬碟才有ECC │ ;└─────────────────────────────────┘ ;┌─────────────────────────────────┐ ;│BIOS 呼叫 INT 13H,AH=03H │ ;│寫資料到磁區內 │ ;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │ ;│? (AL) <= 欲寫入的磁區數 │ ;│? (CH) <= 磁軌號碼,從 0 開始,高 2 bit 可存於 cl 的 b6、b7 │ ;│? (CL) <= 起始磁區編號,從 1 開始 │ ;│? (DH) <= 磁頭號碼,從 0 開始 │ ;│? (ES:BX) <= 已儲存資料的緩衝區記憶體變數 │ ;│成功 => (C=0),(AL=真正寫入的磁區數) │ ;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │ ;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │ ;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │ ;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │ ;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│ ;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │ ;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │ ;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │ ;│ AH=08H:DMA 忙碌中 AH=AAH:hard disk drive 未備妥 │ ;│ AH=09H:DMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │ ;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │ ;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │ ;│ 自動校正錯誤功能,而且只有硬碟才有ECC │ ;└─────────────────────────────────┘ ;┌─────────────────────────────────┐ ;│BIOS 呼叫 INT 13H,AH=04H │ ;│檢查磁區結構是否完好 │ ;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │ ;│? (AL) <= 欲檢查的磁區數 │ ;│? (CH) <= 磁軌號碼,從 0 開始,高 2 bit 可存於 cl 的 b6、b7 │ ;│? (CL) <= 起始磁區編號,從 1 開始 │ ;│? (DH) <= 磁頭號碼,從 0 開始 │ ;│成功 => (C=0),(失敗 C=1,示誤碼如下) │ ;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │ ;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │ ;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │ ;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │ ;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│ ;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │ ;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │ ;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │ ;│ AH=08H:DMA 忙碌中 AH=AAH:hard disk drive 未備妥 │ ;│ AH=09H:DMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │ ;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │ ;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │ ;│ 自動校正錯誤功能,而且只有硬碟才有ECC │ ;└─────────────────────────────────┘ ;┌─────────────────────────────────┐ ;│BIOS 呼叫 INT 13H,AH=05H │ ;│將指定的磁區格式化,以軌為單位 │ ;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │ ;│? (CH) <= 磁軌號碼,從 0 開始,高 2 bit 可存於 cl 的 b6、b7 │ ;│? (DH) <= 磁頭號碼,從 0 開始 │ ;│? (ES:BX) <= 指向磁區參數表的記憶體變數,共四 byte,即 CHRN │ ;│磁區參數表:C:磁柱編號(cylinder) R:磁區編號(Record) │ ;│ H:磁頭編號(head) N:每磁區的byte數(0:128,1:256 │ ;│ 2:512,3:1024) │ ;│成功 => (C=0),(失敗 C=1,示誤碼如下) │ ;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │ ;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │ ;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │ ;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │ ;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│ ;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │ ;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │ ;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │ ;│ AH=08H:DMA 忙碌中 AH=AAH:hard disk drive 未備妥 │ ;│ AH=09H:DMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │ ;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │ ;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │ ;│ 自動校正錯誤功能,而且只有硬碟才有ECC │ ;└─────────────────────────────────┘ ;┌─────────────────────────────────┐ ;│BIOS 呼叫 INT 13H,AH=06H │ ;│將指定的磁軌格式化,並設定損壞磁碟 │ ;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │ ;│? (CH) <= 磁軌號碼,從 0 開始,高 2 bit 可存於 cl 的 b6、b7 │ ;│? (CL) <= 起始磁區編號,從 1 開始 │ ;│? (DH) <= 磁頭號碼,從 0 開始 │ ;│成功 => (C=0),(失敗 C=1,示誤碼如下) │ ;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │ ;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │ ;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │ ;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │ ;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│ ;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │ ;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │ ;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │ ;│ AH=08H:DMA 忙碌中 AH=AAH:hard disk drive 未備妥 │ ;│ AH=09H:DMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │ ;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │ ;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │ ;│ 自動校正錯誤功能,而且只有硬碟才有ECC │ ;└─────────────────────────────────┘ ;┌─────────────────────────────────┐ ;│BIOS 呼叫 INT 13H,AH=07H │ ;│從指定的磁軌位置,格式化磁片 │ ;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │ ;│? (CH) <= 磁軌號碼,從 0 開始,高 2 bit 可存於 cl 的 b6、b7 │ ;│? (CL) <= 起始磁區編號,從 1 開始 │ ;│? (DH) <= 磁頭號碼,從 0 開始 │ ;│成功 => (C=0),(失敗 C=1,示誤碼如下) │ ;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │ ;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │ ;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │ ;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │ ;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│ ;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │ ;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │ ;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │ ;│ AH=08H:DMA 忙碌中 AH=AAH:hard disk drive 未備妥 │ ;│ AH=09H:DMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │ ;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │ ;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │ ;│ 自動校正錯誤功能,而且只有硬碟才有ECC │ ;└─────────────────────────────────┘ ;┌─────────────────────────────────┐ ;│BIOS 呼叫 INT 13H,AH=08H │ ;│取得磁碟機的磁軌參數 │ ;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │ ;│磁面的磁軌數減 1 => (CH) 及 (CL 的 bit6、bit7) │ ;│磁軌的磁區數 => (CL 的 bit0 ~ bit5) │ ;│磁面數減 1 => (DH) │ ;│磁碟機數量 => (DL) │ ;└─────────────────────────────────┘ ;┌─────────────────────────────────┐ ;│BIOS 呼叫 INT 13H,AH=17H │ ;│設定磁碟機型式 │ ;│? (DL) <= 磁碟機代號 (A:00H,B:01H) │ ;│? (AL) <= 磁碟機型式 │ ;│磁碟機型式:AL=01H:使用 360K 磁碟機,工作 360K 的磁片 │ ;│ AL=02H:使用 1.2M 磁碟機,工作 360K 的磁片 │ ;│ AL=03H:使用 1.2M 磁碟機,工作 1.2M 的磁片 │ ;│ AL=04H:使用 720K 磁碟機,工作 720K 的磁片 │ ;│ AL=05H:使用 1.44M 磁碟機,工作 1.44M 的磁片 │ ;│成功 => (C=0),(失敗 C=1,示誤碼如下) │ ;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │ ;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │ ;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │ ;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │ ;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│ ;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │ ;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │ ;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │ ;│ AH=08H:DMA 忙碌中 AH=AAH:hard disk drive 未備妥 │ ;│ AH=09H:DMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │ ;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │ ;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │ ;│ 自動校正錯誤功能,而且只有硬碟才有ECC │ ;└─────────────────────────────────┘ |
|
| 第8楼 DOS95 | 发表于 2006-10-15 15:37 |
| 初级用户 发帖 49 积分 112 | |
|
你说哪里错?
mov ax,201 ==> mov ah,2 / mov al,1 就是读1个扇区,错在哪? 我自己写的多系统引导程序也是这样用的,没发现有哪里不对。 |
|
| 第9楼 beiyuly | 发表于 2006-10-17 07:56 |
| 初级用户 发帖 40 积分 95 | |
Originally posted by DOS95 at 2006-10-15 15:37: 不好意思,我看错了。 但我想,也许没错,取决于编译器。 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |