L2 揭开钢琴的盖子 Open the OS

Q1:打开电源,开启计算机,背后发生了什么事情

从图灵机到通用图灵机

从通用图灵机到计算机:冯·诺伊曼的存储程序思想

计算机由5大部件组成:输入设备、输出设备、存储器、运算器和控制器

打开计算机电源时,硬件寄存器的值怎样初始化?

ROM BIOS是固化的程序

0磁道0扇区是操作系统的引导扇区
在引导扇区中存储的是一段汇编代码:bootsect.S,该代码会把自己的内容从0x7c00处移动到0x9000处,占据512个字节

引导扇区:

引导扇区代码


ds = 7c0

es = 9000
si = 0
di = 0
ds:si = 7c00
es:di = 90000
cx = 256 指定了移动字(movw)的大小,256个字即512个字节
movw将ds:si处开始的256个字移动到es:di处
jmpi go, INITSET 将INITSEG的值赋给cs寄存器,将go的值赋给ip寄存器(go是汇编代码中的一个标号,代表一个地址)
通过jmpi go, INITSET程序跳转到go标号处开始执行,在下一阶段,将setup部分的4个扇区读入到内存中

0x13:BIOS 读磁盘扇区中断
ch = 00, 表示磁盘的柱面号

cl = 02,表示读第二个扇区
ah = 02, 表示读磁盘
al = 00 + SETUPLEN = 4,表示要读的扇区的数量
dh = 00, dl = 00
es:bx = 0x9000:0200 = 0x90200 指向的地址是 读进来的扇区内容 要存储到的内存的起始地址


读入setup4个扇区到内存0x90200处之后,在ok_load_setup中,将一串文本输出到屏幕上

接下来再去从磁盘读入system模块到内存中


SETUPSEG的值是0x9020,则jmpi 0, SETUPSEG将会跳转到0x9020:0000的地方:0x90200,即之前从磁盘读的setup4个扇区在内存中的起始地址,跳转到这里执行





posted @ 2020-11-10 22:46  scnb  阅读(170)  评论(0)    收藏  举报