汇编语言MBR.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编语言MBR

主引导记录工作原理 ; 下面是DOS汇编部分 ;@ECHO OFF ;GOTO END_BATCH ;下面是一些编译设置,因为要编成COM文件,所以是TINY模式(C语言的微型模式) .MODEL tiny .CODE ;CODE(代码) STARTUPCODE ;BIOS引导系统把我从硬盘的主引导分区中搬到了内存中,我现在的位置是0000:7C00 ;STARTUP(起始)我终于可以工作了,让我先设置新的堆栈段,数据段,附加段吧! M_0100: CLI ;禁止INTR中断 XOR AX,AX ;SS:SP=0000:7C00,因为0000:7C00是我的家,所以我的堆栈当然要在我前面啦 MOV SS,AX ;异或逻辑XOR AX,AX的结果是0000 MOV SP,7C00H ;等一会我们就要搬家了,所以先把般家的位置准备好,DS:SI=0000:7C00,ES=0000 MOV SI,SP ; PUSH AX ;以下是利用堆栈指令来进行转送数据 POP ES ;ES=0000 PUSH AX POP DS ;DS=0000 STI ; STI(开放INTR中断) CLD ;CLD(0→DF,DF是方向标志位,串操作的指针移动方向从低到高) MOV DI,0600H ;把新家搬到0000:0600的位置吧,因为0000:7C00这个地方要让给DOS引导程序玩啊 ;注意:系统引导型病毒也会搬家的哦,不过是搬到9FC0:0这个内存最高端的1K内 ;存中的,这样既腾出了空间给DOS,又保护了自已不会发现,当然新家就很安全了哦 MOV CX,0100H ;串操作的次数:256,因为是字传送,故可传送512字节。 REPNZ MOVSW ;新家搬好了,赶快跳过去吧,是0000:061D这个地方,不要跳错了哦:) DB 0EAH,1DH,6,0,0 ; JMP 0000:061D ;终于跳到新家了,我们又可以继续我们的工作了,不过我现在的位置是在0000:061D处 M_011D: MOV SI,0600H+PT-M_0100 ;设好分区表的起始位置,我们要一个一个地检查了啊 MOV BL,04 ;我们要读4个分区的信息,所以BL=4,BL是我们的计数器哦,不要数错了 M_0122: CMP BYTE PTR [SI],80H ; 80H是活动分区标志,如果我们读到了活动分区标志80H的话,快去M_0135这个地方继续工作吧 JZ M_0135 ; JZ:结果为零(ZF=1),则转移。 JNZ:结果不为零(ZF=0),则转移 CMP BYTE PTR [SI],00 ;00是非活动分区标志,其它数值是非法的,如果是其它数值,而且分区是非法的话,哪就去死吧 JNZ M_0148 ADD SI,+10H ;继续看看下面有没有合法分区,最好有活动分区就谢天谢地喽 DEC BL ;BL存放的是分区的数,初值=4,减1,还没看完吧, JNZ M_0122 ;回去再看看吧,机会总是有的嘛。当BL=0时,还没有查到80或00,就执行INT 18H。终于死掉了,虽然读到的分区都是合法的,可是很不爽啊,居然没有一个是活动的,可 ;去玩ROM BASIC啊,这可是BILL GATES刚出道时玩的东东哟,听清楚了吗,是BASIC,编程序的,如果你不会编程序,呵呵,哭

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档