【操作系统】计算机的启动过程
来源:互联网 发布:同和软件 编辑:程序博客网 时间:2024/05/01 07:15
计算机的启动过程十分复杂,在这里仅仅写一下我个人大致的理解。(以Intel x86结构为例)
1.计算机在按下电源键之后,CPU处于实模式寻址。CS=0xFFFF;IP=0x0000。
CS(Code segment)是一个16位段寄存器,IP是指令指针寄存器(段内偏移),也是16位寄存器。处于实模式寻址时,实际寻找的地址是将CS的值左移4位加上IP的值得到的地址。实际上是20位寻址,因此最大可寻址内存空间为1MB。
2.CS=0xFFFF;IP=0x0000,寻址0xFFFF0,在内存空间中,从0XFFFF0开始的一段内存空间(具体大小是多少?)是固化的,叫做ROM BIOS映射区(即基本输入输出系统)。这一段空间是计算机上电后内存里面唯一有代码的空间,这一段代码的作用是检查RAM,键盘,显示器,软硬磁盘等硬件是否存在问题。
3.将磁盘0磁道0扇区里的内容读入内存地址0x7c00处。然后设置CS=0x07c0,IP=0x0000。这段内容的大小是512字节。0磁道0扇区是操作系统的引导扇区。是操作系统的第一段代码,这段代码是bootsect.s(.s表示汇编代码)
bootsect.s的作用
这段代码干了好几件事情:
1.将bootsect.s从地址0x7c00开始的区域转移到0x9000中。后面会看到这样做的目的就是为了腾出空间。
start mov ax,#BOOTSEG //BOOTSEG=0x07c0 mov ds,ax mov ax,#INITSEG //INITSEG=0x9000,SETUPREG=0x9020 mov es,ax mov cx,#256 sub si,si sub di,di rep movsw //一次移动两个字节,256B*2=512B jmpi go, INITSEG
2.加载setup模块
//0x13是BIOS读磁盘扇区的中断: ah=0x02-读磁盘,al=扇区数量(SETUPLEN=4),ch=柱面号,cl=开始扇区,dh=磁头号,dl=驱动器号,es:bx=内存地址go: mov ax,cs //cs=0x9000 mov ds,ax mov es,ax mov ss,ax mov sp,#0xff00load_setup: //载入setup模块 mov dx,#0x0000 mov cx,#0x0002 //cx低8位为2,表示从第二个扇区开始读 mov bx,#0x0200 mov ax,#0x0200+SETUPLEN int 0x13 //int 0x13是BIOS中断,读磁盘,ax低八位是SETUPLEN,表示需要读取的扇区数量,即为4个扇区。 jnc ok_load_setup mov dx,#0x0000 mov ax,#0x0000 //复位 int 0x13 j load_setup //重读
读取4个扇区的数据接着在bootsect后面存放,可以看到ex:bx组成的地址刚好是boot后面的第一个字节。
3.读入setup之后:Ok_load_setup
Ok_load_setup: //载入setup模块 mov dl,#0x00 mov ax,#0x0800 //ah=8获得磁盘参数 int 0x13 mov ch,#0x00 mov sectors,cx mov ah,#0x03 xor bh,bh int 0x10 //读光标 mov cx,#24 mov bx,#0x0007 mov bp,#msg1mov ax,#1301 int 0x10 //显示字符 mov ax,#SYSSEG //SYSSEG=0x1000 mov es,ax call read_it //读入system模块 jmpi 0,SETUPSEG
(未完待续)
0 0
- 【操作系统】计算机的启动过程
- 计算机及操作系统启动的过程详解
- 从操作系统的角度简述计算机的启动过程
- 一个操作系统的实现笔记2:计算机的启动过程
- 专注于操作系统3之计算机的启动过程
- 操作系统的启动过程
- 操作系统的启动过程
- 计算机启动的过程
- 计算机的启动过程
- 计算机的启动过程
- 计算机的启动过程
- 计算机的启动过程
- 计算机的启动过程
- 计算机的启动过程
- 计算机的启动过程
- 计算机启动的过程
- 计算机启动的过程
- 计算机的启动过程
- 设计模式(2)用例图之一
- Atitit.eclipse comment template注释模板
- .2016-04-01
- Java8 Lambda表达式介绍
- Java8 stream流介绍
- 【操作系统】计算机的启动过程
- Android小知识点一
- Go语言版HelloWorld
- Linux系统如何创建一个新进程
- NodeJS、NPM安装配置步骤(windows版本)
- 叶问
- 重装系统后怎么处理Mysql数据库
- 火眼睛睛查coredump(stl sort)------永远让比较函数对相同元素返回false
- 1.JAVA 编程思想——对象入门