BOOT0的主要代码兼Unix下汇编小节
2009-05-13 05:02:58来源:未知 阅读 ()
书上说得比较多了,大致的作用就跟MBR差不多,系统安装的时候把它放到硬盘的主引导记录当中,提供一个简单的多操作系统引导功能。如果选择启动FreeBSD,它会在对应的分区里面读“分区引导记录”,也就是Boot1,然后经由Boot1来引导BTX,boot2.bin,最终加载内核。
boot0.s是boot0的源代码,存在两个版本,一个大小是512K,占用一个扇区,还有一个是1024K,占用两个扇区,这两个文件分别是boot0.s,boot0ext.s,存放的目录是:
/usr/src/sys/boot/i386/boot0/boot0.s
在boot0.s这个源文件中采用的是AT&T的汇编语言语法格式,在指令上和windows环境下的汇编语言格式略有不同。
一、读这个代码的预备知识:根据PC机的体系结构,硬件启动的最后一个步骤是读取硬盘上的主引导记录,放到内存:0x0000:0x7c00这个地址,一个jmp跳转指令来执行主引导记录的第一条指令。
二、主要的代码:
boot0.s的主要工作流程是
1、代码搬移,从0x7c00这个地址挪到另外一个地址,主要是为了给后续读取分区引导记录boot1腾出空间。
2、扫描分区表,扫描引导扇区有效标志,打印多系统引导界面。
3、根据选择,读取相应分区的分区引导记录
4、出错处理
主要的代码:
1、变量定义:
.set ORIGIN,0x600 # Execution address
.set FAKE,0x800 # Partition entry
.set LOAD,0x7c00 # Load address
.set PRT_OFF,0x1be # Partition table
.set TBL0SZ,0x3 # Table 0 size
.set TBL1SZ,0xb # Table 1 size
.set MAGIC,0xaa55 # Magic: bootable
.set B0MAGIC,0xbb66 # Identification
.set KEY_ENTER,0x1c # Enter key scan code
.set KEY_F1,0x3b # F1 key scan code
.set KEY_1,0x02 # #1 key scan code
.set ASCII_BEL,0x07 # ASCII code for BEL>
.set ASCII_CR,0x0D # ASCII code for CR>
符号常量定义形式:
.set 符号常量,值 #注释
2、乾坤大挪移
start: cld # String ops inc
xorw %ax,%ax # Zero
movw %ax,%es # Address
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- AT&T 汇编指令说明 2009-05-13
- NetBSD 4.0 部分代码注释 2009-05-13
- 分析工作迁移到 NetBSD 5.0 2009-05-13
- 恢复永久删除数据 2009-05-13
- FreeBSD+postgresql+php5+diablo-jdk+Apache+Tomcat 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash