- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 青岛版(五四制)小学数学四年级下册《分数加减法(一)》单元整体备课.doc VIP
- 湖南省2025年高考真题化学试卷.docx VIP
- 大隐静脉曲张手术方法的探讨.doc VIP
- 2019年医院感染监测计划.docx
- 20230804-华安证券-心通医疗_B-2160.HK-出海在即,创新型心脏瓣膜介入诊疗平台.pdf VIP
- 学位英语考试真题及答案.doc
- NB∕T 10100-2018 光伏发电工程地质勘察规范(高清版).pdf VIP
- 聚羟基脂肪酸酯(PHA)分散体及其制备方法.pdf VIP
- 2025年开县xx乡镇“十五五”发展规划.docx VIP
- 国际经济学-第五版-冯德连-【PPT】第2章 国际贸易理论的微观基础.pptx VIP
文档评论(0)