BOOT0的主要代码兼Unix下汇编小节

2009-05-13 05:02:58来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

Boot0的主要作用:

书上说得比较多了,大致的作用就跟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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:让FreeBSD使用ntpd同步时间

下一篇:各种平台下Perl模块的安装方法完全版