可视网站开发工具,政务网站的建设原则,seo研究协会,2022网页设计尺寸规范和要求【README】
1.本文总结自B站《操作系统#xff08;哈工大李治军老师#xff09;》的视频讲解#xff0c;非常棒#xff0c;墙裂推荐#xff1b; 【1】计算机上电 1#xff09; 问题#xff1a; 这神秘的黑色背后发生了什么 #xff1f;计算机是怎么工作的#x…【README】
1.本文总结自B站《操作系统哈工大李治军老师》的视频讲解非常棒墙裂推荐 【1】计算机上电 1 问题 这神秘的黑色背后发生了什么 计算机是怎么工作的 【2】从白纸到图灵机 计算32的加法
控制器从纸带上读取已经写好的3 2 读取后执行加法逻辑得到5并把5再次送入到纸带上但问题是这个控制器只会做加法不能做其他这就是问题所在了【3】从图灵机到通用图灵机 如果一个控制器像一个只会做饼的厨师那样就显得很低级不灵活没法扩展了 我们需要的是能够看懂菜谱的厨师一样的控制器能够灵活与扩展不仅仅只会做加法还会做其他算术或逻辑运算 厨师读到菜谱1可以做菜品1 厨师读到菜谱2可以做菜品2
控制器也一样 先预先设置控制器动作逻辑 然后读取数据对象根据预设动作进行相应的计算 通用图灵机能够设置控制器动作逻辑的控制机其中控制器动作逻辑就是应用程序 【4】从通用图灵机到计算机 冯诺依曼存储程序思想在1946年提出 4.1存储程序的主要思想将程序和数据存放到计算机内部的存储器中计算机在程序的控制下一步步处理 把程序或指令存储到内存主存里然后用一条指令指针IP或PC指向某条指令把该指令载入到控制器取指从而形成控制逻辑即指令描述了控制器如何工作接着控制器根据指令进行相应操作执行 小结计算机怎么工作的呢 取指执行
4.2冯诺依曼计算机由5大部件组成
输入设备输出设备存储器运算器控制器
那windows系统启动的黑色背景如何产生的
经过刚刚的分析控制器是在指令下工作的指令是由PC或IP的指向得到的那计算机启动时PC或IP指向的第一条指令是什么【5】打开电源计算机执行的第一句指令是什么 【问题】打开电源计算机执行的第一句指令是什么 1BIOSBasic Input Output System 基本输入输出系统开机时唯一有程序的地方 开机执行步骤
步骤1开机后CS0xFFFF IP0x0000 CS-Code Segment-代码段寄存器IPInstruction Point指令指针寄存器步骤2读取CS和IP的值并把CS的地址左移4位与IP寄存器的地址相加得到BIOS程序所在地址 0xFFFF0 步骤3从只读存储器ROM中 CS:IP地址上读取BIOS程序到控制器控制器根据BIOS程序进行相应操作步骤4BIOS程序首先检查 ram主板键盘显示器软硬磁盘步骤5接着BIOS程序把磁盘的0磁道0扇区即第1个扇区512字节的数据读取到以0x7c00为首地址的内存单元中其中0磁盘0扇区即第1个扇区就是操作系统的引导程序所在扇区又称引导扇区1个扇区512k步骤6设置cs0x07c0ip0x0000所以可以得到内存地址0x7c00
接下来控制器就会执行内存地址0x7c00保存的程序即操作系统引导扇区的程序 【5.1】0x7c00存放的代码是什么 1引导扇区代码示例 Bootsect.s 中的 .s 指的是 汇编代码assembly其中bootsect指的是引导扇区boot sector 所以引导扇区代码是一段汇编代码
2为什么要用汇编代码 而不用C呢
C语言无法控制某个变量在内存中的哪个位置上存储而因为汇编的每一条指令都转为了机器指令汇编可以控制变量存储的内存地址又引导扇区需要对程序进行完整控制包括变量存储的内存地址
3Bootsect.s 引导扇区的代码要做什么事情呢
引导扇区程序0x7c00处存放的代码的汇编指令执行步骤
表1 引导扇区汇编程序bootsect执行步骤 步骤 指令 描述 1 mov ax,#BOOTSEG #BOOTSEG0x07c0; 2 mov ds,ax 把 0x07c0送入ds寄存器 3 Mov ax,#INITSEG #INITSEG0x9000; 4 Mov es,ax 把 0x9000送入es寄存器 5 Mov cs,#256 把256赋值给cs寄存器 6 Sub si si 把0x0000送入si寄存器 7 Sub di di 把0x0000送入di寄存器 8 Rep movw 重复移动256个字512字节 源地址ds:si0x07c0:0x0000即0x7c00 目标地址es:di0x9000:0x0000即0x90000 即把0x7c00的代码拷贝到0x90000内存地址 9 jmpi go, INITSEG jump intersegment-段间跳转 目标地址cs:ipINITSEG:go0x9000:go 即下面进入到go为标号锚点的汇编指令执行 补充寄存器列表
1. AX――累加器Accumulator使用频度最高2. BX――基址寄存器Base Register常存放存储器地址3. CX――计数器Count Register常作为计数器4. DX――数据寄存器Data Register存放数据5. SI――源变址寄存器Source Index常保存存储单元地址6. DI――目的变址寄存器Destination Index常保存存储单元地址7. BP――基址指针寄存器Base Pointer表示堆栈区域中的基地址8. SP――堆栈指针寄存器Stack Pointer指示堆栈区域的栈顶地址9. IP――指令指针寄存器Instruction Pointer指示要执行指令所在存储单元的地址。IP寄存器是一个专用寄存器。
4为什么要把0x7c00的引导扇区程序拷贝到0x90000呢 为了腾出空间腾出空间干什么呢
5jmpi go, INITSEG 是什么作用引导扇区代码最后一条指令 jump intersegment-段间跳转 目标地址cs:ipINITSEG:go 图 1 启动盘结构图
表1中的步骤9 执行了 jmpi go, INITSEG意思是跳转到目标地址cs:ipINITSEG:go0x9000:go 去执行所以接着执行上图的 go标号的汇编指令步骤如下 步骤 指令 描述 go标号 1 Mov ax,cs 把cs0x9000赋值给ax 2 Mov ds,ax 把值0x9000赋值给ds 3 Mov es,ax 把值0x9000赋值给es 4 Mov ss,ax 把值0x9000赋值给ss 5 Mov sp,#0xff00 把值0xff00赋值给sp load_setup标号 载入setup模块 7 Mov dx,#0x0000 8 Mov cx,#0x0002 ch0x00 cl0x02 9 Mov bx,#0x0200 把0x0200赋值给bx 10 Mov ax,#0x0200SETUPLEN //SETUPLEN4; 把0x0204赋值给ax; ah0x02 al0x04 11 Int 0x13 //BIOS中断读取磁盘数据 12 Jnc ok_load_setup //跳转到 ok_load_setup标号锚点 13 Mov dx,#0x0000 14 Mov ax,#0x0000 // 复位 15 Int 0x13 16 J load_setup // 重读 最重要的指令是 int 0x13这是一个BIOS中断这个中断从磁盘读取数据磁盘寻址如下 从ch:cl柱面号:开始扇区0x00:0x02开始读取磁盘数据共计读取ah:al0x02:0x04读磁盘:扇区数量个扇区到内存地址es:bx0x9000:0x0200即从第2个扇区读取4个扇区的数据setup数据到内存0x90200因为第1个扇区存储了引导扇区程序
6接着读入setup模块后执行 ok_load_setup 锚点 Int 0x10 表示 一种BIOS中断用于显示字符显示的字符为 #msg1 即bp寄存器 ok_load_setup标号的程序执行步骤如下 表3 ok_load_setup汇编程序执行过程 步骤 指令 描述 ok_load_setup标号 // 载入setup模块 1 Mov dl,#0x00 把0x00赋值给dl 2 Mov ax,#0x0800 把0x0800赋值给ax即ah:al08:00 3 Int ox13 //BIOS中断读取磁盘数据 4 Mov ch,#0x00 把0x00赋值给ch 5 Mov sectors,cx 把cx赋值给sectors Mov ah,#0x03 把0x03赋值给ah 7 Xor bh,bh 异或运算把0x00赋值给bh 8 Int 0x10 //BIOS中断读光标 9 Mov cx,#24 把24赋值给cx表示要输出24个字符 10 Mov bx,#0x0007 把0x0007赋值给bx其中0007是显示属性 11 Mov bp,#msg1 把msg1赋值给bpbp存储要显示的字符 msg1是偏移就是把 Loading system字符串打到屏幕上的光标位置 其中byte13,10 分别是换行和回车ascii码 12 Mov ax,#1301 把1301赋值给ax 13 int 0x10 //BIOS中断显示字符 14 Mov ax,#SYSSEG //SYSSEG0x1000 15 Mov es,ax 把ax赋值给es 16 Call read_it //读取system模块 read_it 仍然是13号中断把操作系统后面的代码读入到内存读完之后bootsect汇编文件执行完成 Jmpi 0,SETUPSEG // SETUPSEG0x9020 jump intersegment-段间跳转 目标地址cs:ipSETUPSEG:0SETUPSEG:0 即下面跳转到SETUPSEG为标号锚点的汇编指令执行 如果我们要把 Loading System字符串修改为 diyos is loading字符串长度15在屏幕上显示的话还需要把第9条汇编指令修改为 mov cx,#15
小结
bootsect.s 文件中的汇编代码干的事情就是把操作系统读入到内存打出一个logo或字符串diyos is loading
Bootsect.s 汇编程序执行完成后就需要把控制权交给下一个程序执行即setup程序如何跳转到setup程序呢
执行 jmpi 0, SETUPSEG 即可根据图1我们知道SETUPSEG 的汇编程序在启动盘的第2~5个扇区【总结】计算机启动过程
相关文章: