读磁盘

fminhua 2005-07-28 10:04:48

ORG 100H
BEGIN:
JMP START
DATA:TIMES 512 DB 0
START:
MOV AX,201H
MOV BX,DATA
MOV CX,01H
MOV DX,80H
INT 13H
END
这个程序在debug下可以读出硬盘的MBR,但汇编成COM程序后,一运行就死机。哪里有问题呢
...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
programfanny 2005-08-12
  • 打赏
  • 举报
回复
是啊,要精确定位数据地址。平时数据位置是被系统级程序管理着,现在我们要绕过系统了,就要事先考虑仔细才行啊。
WYlslrt 2005-08-11
  • 打赏
  • 举报
回复
你一开始并没有设置ES,所以ES是未知的,引导区被读到ES:OFFSET DATA里了,谁知道这是哪里?除非ES初始化和CS是一样的,所以当你movsb时,0000h:7c00h是512个0,你jmp过去一大堆的nop呵呵。
ahjoe 2005-08-07
  • 打赏
  • 举报
回复
这样做有问题。在程序运行时,因为中断向量表是已经被操作系统初始化过的。
fminhua 2005-07-29
  • 打赏
  • 举报
回复
我想在DOS下把MBR的数据拷贝到内存0:7c00处,然后JMP到7c00处,让他执行引导操作系统的工作,从而进入WINDOWS系统,这样有可能成功吗,我写了下面的代码,但是执行时死了
BS_SEGMENT EQU 0
BS_OFFSET EQU 7C00H

ORG 100H
BEGIN:
JMP START
DATA:TIMES 512 DB 0
START:
MOV AX,201H
MOV BX,DATA
MOV CX,01H
MOV DX,80H
INT 13H



PUSH WORD BS_SEGMENT
POP ES
MOV DI,BS_OFFSET
PUSH CS
POP DS
MOV SI,DATA

MOV CX,512
REP MOVSB
JMP BS_SEGMENT:BS_OFFSET

MOV AH,4CH
INT 21H

END
zara 2005-07-28
  • 打赏
  • 举报
回复
没有 "结束程序返回到 dos" 的功能调用. 可以在 END 语句之前加上:
mov ah, 4ch
int 21h

21,458

社区成员

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

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