读bootsct.S、setup.S、head.S心得
/bootsect.S、setup.S、head.S读取心得 -bootsect.S完成的功能: 1. bootsect.S将自己从ROM BIOS载入的绝对地址0x7C00处搬到0x9000处,然后利用一个jmpi的指令,跳到新位置的jmpi的下一行(go:)去执行。 2.接着,将其他segment registers包括DS、ES、SS都指向0x9000这个位置,与CS看齐。另外将SP及DX指向一任意位移地址(offset),这个地址等一下会用来存放磁盘参数表(disk parameter table)。 3.读入磁盘参数,并建立参数表。 4.接着利用BIOS中断服务int 13h的第0号功能,重置磁盘控制器,使得刚才的设定发挥功能。 5.完成重置磁盘控制器之后,bootsect就从磁盘上读入紧邻着bootsect的setup程序,也就是setup.S,此读入动作是利用BIOS中断服务int 13h的第2号功能。 -bootsect.S源码分析: 1.在boot.h中设置4个DEF_参数,分别为:DEF_INITSEG 0x9000(将bootsect程序移至0x9000段处);DEF_SYSSEG 0x1000(系统加载至0x1000(65536)(64k)段处);DEF_SETUPSEG 0x9020(设置程序(setup)从0x9020开始);DEF_SYSSIZE 0x7F00(=32512=31.75k)*16=508(系统的大小0x7F00)。 2.代码:mov ax,#BOOTSEG mov ds,ax(将ds段寄存器设置为0x7C0);mov ax,#INITSEG mov es,ax(将es段寄存器设置为0x9000);mov cx,#256(将cx计数器置为256(要移动256个字,512字节));sub si,si、sub di,di分别设置源地址和目的地址;设置好之后,程序jmpi go,INITSEG go:表示将跳到CS为0x9000,IP为offset的位置,其中INITSEG=0x9000定义于程序开头的部分,而go这个label则恰好是下一行指令所在的位置。 -Setup.S: 1. Setup.S读入磁盘参数,并建立参数表。 2.接着利用BIOS中断服务int 13h的第2号功能,读取目前磁盘的参数。 3.就要读入真正Linux的kernel了,也就是你可以在Linux的根目录下看到的"vmlinuz"。 -HEAD.S: 1.HEAD.S主要是用于加载Linux kernel。 2.它从磁盘上读入Linux kernel,然后将其加载到内存中。 -常见的问题与解决: 1.Q:bootsect.S的作用是什么? A:bootsect.S的作用是将自己从ROM BIOS载入的绝对地址0x7C00处搬到0x9000处,然后读取磁盘参数,并建立参数表。 2.Q:setup.S的作用是什么? A:setup.S的作用是读入磁盘参数,并建立参数表,然后读取Linux kernel。 3.Q:head.S的作用是什么? A:head.S的作用是加载Linux kernel。
剩余8页未读,继续阅读
- ytok1232013-06-15读bootsct.S、setup.Shead.S心得是一个好资料
- 粉丝: 1
- 资源: 21
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 联想7400打印机更换定影组件.jpg
- 基于servlet+jsp+mysql实现的影视管理系统课程设计
- GUIdemo.zip
- 正点原子RK3568卡片电脑ATOMPI-CA1的ubuntu-24.04.1最小安装包,特别适合运行板级ROS2环境jazzy
- U盘量产工具SM3280&3281&3282-AvidiaV0209整合版
- 可直接运行 MATLAB数学建模学习资料 模拟算法MATLAB代码实现.rar
- 计算机数学建模中模拟退火算法详解及其TSP问题求解应用
- 基于 Java+SQLServer 实现的医药售卖系统课程设计
- HCNP(HCDP)华为认证资深网络工程师-路由交换方向培训 -IESN中文理论书-内文.pdf
- 新版FPGA课程大纲,芯片硬件开发用的大纲