东北大学 bootblock-只有汉语注释.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
东北大学 bootblock-只有汉语注释

2000?? !?? Bootblock 1.4 - Minix boot block.?? Author: Kees J. Bot 2001?? !?? 21 Dec 1991 2002-2016 ! 1. 功能描述: 当PC加电后,PC试图读软盘0的第一扇区到0x7C00。如果因为没有可用的磁介质而失败,则它试图从硬盘的第一个扇区读主引导记录(master boot record),该扇区不仅包含可执行代码,也包含硬盘的分区表(DPT,disk partition table)。当他执行时,他将选择活动分区并把他的第一个扇区到0x7C00。 本文件包含最终从软盘或从硬盘分区读出的代码,它将从引导设备上加载次级引导代码到内存地址0x10000处,并执行他。次级引导代码在磁盘上的地址是由installboot将24位的扇区号和8位的扇区数(above enddata upwards)。次级引导代码也足够聪明,能够将MINIX内核的不同部分加载到内存,并执行他们直到最后使Minix启动。 2017 ??! 入口参数: (1)dl寄存器包含用于启动的驱动器(即,本文件的代码来自于该驱动器)。对于第一、第二软驱值是0x00和0x01,对于硬驱是0x80, 0x81, 0x82, or 0x83。 (2)如果本代码来自于硬盘,并是主引导记录装载该代码,则对应于引导分区的分区表入口是由es:si传递。 2018 2019???LOADOFF=0x7C00? ! 0x0000:LOADOFF is where this code is loaded 2020?? BOOTSEG=0x1000? ! Secondary boot code segment. 2021?? BOOTOFF=0x0030? ! Offset into secondary boot above header 2022?? BUFFER =0x0600? ! First free memory 2023 LOWSEC = 8? ! Offset of logical first sector in partition 2024?? ! table 2025 2026 ?! Variables addressed using bp register 2027 device = 0? ! The boot device 2028 lowsec = 2? ! Offset of boot partition within drive 2029 secpcyl= 6? ! Sectors per cylinder = heads * sectors 这在汇编中是相当普遍的事。将几个值压入堆栈(lines 2043, 2044, and 2046),并且堆栈指针sp保存在bp中(mov bp, sp - line 2047)。如果2字节值压入堆栈,那么最后的两字节通过0(bp)存取,之后的两字节使用2(bp)存取,等等(见line 2095)。 这里有3个变量占用8字节,仅有6字节压入堆栈。lowsec (lines 2043 and 2044) and device (line 2046) 被压入堆栈,但是secpcyl变量如何? 当最后一个值存储到secpcyl变量中 (line 2110),bootblock代码的头两个字节被覆盖――即第一条指令xor ax, ax instruction (line 2036)被覆盖。这没有关系因为代码再不会跳到开头执行。这个存储不仅是变量需要的2字节,还有push指令需要的存储器。 2030 2031?? .text 2032 2033?? ! Start boot procedure. 2034 2035?? boot: 2036 xor ax, ax? ! ax = 0x0000, the vector segment 2037 mov ds, ax 第一条指令(xor ax, ax)使AX清0。它比mov ax, #0快。指令中操作符的顺序:mov destination, source /* 设置堆栈,在0:LOADOFF(0:0x7c00)处; 栈底在0:0x7c00处 2038 cli ! Ignore interrupts while setting stack 2039 mov ss, ax ! ss = ds = vector segment 2040 mov sp, #LOADOFF ! Usual place for a bootstrap stack 2041 sti

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档