一个备份硬盘主引导记录的程序,但是我看不懂,高人指点一下

tuita 2004-07-10 06:15:18
debug
-a 1000
xxxx:1000 mov DL,80
MOV DH,0 (为什么是0磁头,磁头是什么,和柱面,磁道扇区有什么关系?)
MOV CH,0
MOV CL,1
MOV BX,0100(为什么缓冲区地址是100,一定要100吗?)
MOV AL,1(为什么只读一个扇区)
MOV AH,2
INT 13
-G 1000
-N BOOT
-R CX
:0200(为什么是这样)
-W 0100(为什么是从0100开始写)
...全文
142 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
vicallee 2004-07-28
  • 打赏
  • 举报
回复
讲得很详细.
dunkel 2004-07-10
  • 打赏
  • 举报
回复
读入的数据应该是在 ES:BX 中的, 直接 debug 时, CS=DS=ES, 所以往往不再设置 ES. 但如果是在自己的程序中实现类似的功能的话, 则要按照实际情况设置 ES 了.
tuita 2004-07-10
  • 打赏
  • 举报
回复
还有问题,在用int 13读入的数据由BX里内容指定缓冲区地址
那么这个地址是哪个寄存器的地址
也就是说在这个例子中,读入的数据是存放在哪个寄存器0100开始的地址中的
tuita 2004-07-10
  • 打赏
  • 举报
回复
谢谢
dunkel 2004-07-10
  • 打赏
  • 举报
回复
就是以 bx:cx 组成的双字(bx 为高位字, cx 为低位字)来作为要写文件的大小.
比如上面的例子中, bx=0100(读代码里面设置的), cx=0200(r 命令修改的), 这样 bx:cx 就
是 01000200h = 16,777,728(十进制), 大概 16M 的样子了, 而不是设想的 512 字节.
因此, 实际上在读入了主引导扇区后, 还应该通过 debug 的 r 命令将 bx 改为 0000 的, 这样 bx:cx 组成的双字就是 00000200h=512(十进制) 了,
tuita 2004-07-10
  • 打赏
  • 举报
回复
谢谢,大概了解了
但是“w 则是以 BX:CX 的大小写文件的”这句话不懂,bx:cx代表什么
为什么说实际创建的文件远非一个主引导扇区大小了.
能不能解释的仔细一些,本人实在是菜,刚开始学
谢谢
dunkel 2004-07-10
  • 打赏
  • 举报
回复
你这段内容有问题的吧. debug 进入后, 缺省的 ip 是 0100, g 1000 是指从当前的 ip 运行到 1000, 但按照 a 1000 来看, 则应该是 g=1000 1011 吧, 其中 1011 是 int 13 的下一条指令的地址. 另外, 执行了 int 13h 后, bx 的值是不会变化的, w 则是以 BX:CX 的大小写文件的, 所以, 实际创建的文件远非一个主引导扇区大小了.

debug
-a 1000
xxxx:1000 mov DL,80
MOV DH,0 (为什么是0磁头,磁头是什么,和柱面,磁道扇区有什么关系?)
; 因为主引导扇区就是在 0 磁头, 0 柱面, 1 扇区的
MOV CH,0
MOV CL,1
MOV BX,0100(为什么缓冲区地址是100,一定要100吗?)
; 可以是其他的值, 但不要和这段代码有重叠, 而且要和后面的写文件的地址一致
MOV AL,1(为什么只读一个扇区)
; 普通的主引导扇区, 只有一个扇区
MOV AH,2
INT 13
-G 1000
-N BOOT
-R CX
:0200(为什么是这样) ; 因为一个扇区的大小就是 0200h = 512(十进制) 字节
-W 0100(为什么是从0100开始写) ; 因为你上面是把主引导扇区读入到 0100 处的

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧