计算机开机首先执行的是什么程序,计算机是如何启动的?

相信很多人和我一样,从接触计算机开始,就一直在思考这个问题,当按下电脑的开机键之后,到底发生了什么,为什么这样就能启动电脑了?这篇文章我试着分析一下计算器的启动原理和过程。

post.jpg

CPU

CPU全称是中央处理器,是计算机的核心,包括控制单元,运算单元,存储单元和时钟等,它的主要功能是解释计算机指令以及处理各类数据。包括基本的算术操作,从存储器或者各个接口卡(外设)读取或者写入数据等。

CPU内部包含若干个寄存器,用来暂存数据或者指导CPU的运行,8086中常见的寄存器有,AX,BX,CX,DX,CS,DS,SS,ES,DI,SI,SP,BP,IP,Flag等。

我们都知道计算机只能识别二进制数据,例如指令101110000000是把寄存器ax的值设为0,因为二进制指令比较难以理解,所以人们发明了汇编语言,上述指令用汇编语言(Intel写法)描述就是mov ax,0。

存储器

存储器就是我们所说的内存,CPU是计算机的核心,但没有存储器是万万不行的,因为CPU需要操作的指令和数据没有地方存放。CPU通过地址总线,数据总线和控制总线和存储器连接,以便于CPU从内存的指定位置取出或者写入数据。上课的时候,老师告诉我们内存是易失性存储器(RAM),就是内存必须通电才能保证数据的完整性,掉电数据即不复存在,所以在这里的时候,我们会产生一个疑问,既然内存没有电就没有数据,CPU又不能自己产生数据,那么开机时,CPU的数据是从哪里来的?答案是ROM。

非易失性存储器

说道非易失性存储器,我们想到的可能就是类似U盘,硬盘或者光盘等类似的写入数据就能永久保存的数据,实际上还有一种叫ROM,它掉电以后内容不会消失,被用做存储永久数据,计算机很多设备中都有ROM,例如显卡,但最常见的是主板上的ROM,用来存储BIOS((基本输入输出设备)。ROM也是存储器的一种,也是通过三根总线和CPU相连,所以CPU能直接读取ROM的数据,不同的是CPU不能往ROM里写入数据。

计算机的启动

说到这里,似乎就好理解了,只要我们事先往ROM里写入一些数据,开机的时候让CPU直接执行ROM里的指令,不就行了?实际正式如此,过程如下:

1,按下电源键,主板开始给CPU供电,待电源稳定之后,CPU把CS寄存器的值设为0xFFFF,IP寄存的值设为0x0000,意味着CPU要执行0xFFFF0处的指令,0xFFFF0位于ROM中,所以有数据。

2,FFFF0H的数据一般是一条jmp指令,用以跳转到BIOS在ROM中真正的位置处。

3,BIOS要做的事情是加电自检(POST),就是我们常见的开机启动后,系统自检的画面。到这里,实际上电脑已经启动起来了。

4,在完成系统检查之后,BIOS会把系统的管理权交给下一阶段的设备中存放的程序。

在BIOS中,会有一个设备启动的顺序,如硬盘,U盘或者光盘,BIOS会依次读取这些设备的第一个扇区(前512字节)到内存0x7C00,并检查其最后两个字节是否为0x55,0xaa,如果是,则从0x7c00处执行,如果不是,则检查下一个启动设备。

启动设备的第一个512byte的扇区我们称之为MBR(主引导记录),包含调用系统的代码,设备的分区表和2字节的签名(0x55,0xaa),MBR的作用是把操作系统自己的引导程序读入内存,然后跳转到操作系统的引导程序,操作系统引导程序加载操作系统,并把CPU设置为保护模式,系统就启动完成了。

更详细的启动流程,请看下图:

boot-Process.png

综上,计算机启动过程中,有几个关键点:

1, ROM事先就储存了启动程序。

2,CPU加电之后,会首先执行某一个固定位置的程序。

3,启动设备上的MBR负责第一阶段加载启动设备上的启动程序。

实际上对于我们来说,ROM和CPU都已经固定了,MBR就是整个系统的关键点,下面我们来完成一个MBR,不依赖操作系统,用来在系统启动时打印出”Welcome to https://www.hitoy.org/”。

DISADDR EQU 0xb800

DISCOLOR EQU 0x02

LOADADDR EQU 0x7c00

section .code vstart=LOADADDR

_start:

;注意:实模式下不能设置CS段地址

;mov ax,LOADADDR

;mov cs,ax

;data addr

mov ax,string

mov si,ax

;display segment

;and AR

mov ax,DISADDR

mov ds,ax

mov bx,0

show:

;Copy Char to CL

mov cl,[cs:si]

mov ch,0

cmp cx,0

je end

mov ch,DISCOLOR

mov [ds:bx],cx

inc si

add bx,2

jmp show

end:

jmp $

string: db "Welcome to https://www.hitoy.org/",0

times 510-($-$$) db 0

db 0x55,0xaa

用nasm编译成bin格式文件,然后写入启动设备第一个扇区,可以看到开机时文字已经被显示出来了。

MBR-display-text.jpg

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值