汇编 ---- 第二章 计算机的启动

爱⌒轻易说出口 提交于 2019-12-27 11:49:42

第一节 程序是如何跑起来的

  • 双击程序运行
    • 双击程序 --> 发送请求给操作系统 --> 操作系统根据当前的内存情况为程序分配内存 --> 操作系统将程序加载到内存中 --> 操作系统根据其他程序运行情况在适当情况下提交给处理器 --> 处理器执行程序
  • 程序需要根据操作系统的要求来进行编写,不同的操作系统对程序有不同的要求,故不同操作系统之间的软件是不互相兼容的
  • 是否可以绕过操作系统使程序运行起来?
    • 可以
    • 理由:详见本章第五节

第二节 计算机的启动和重启

  • 计算机在启动或者重启的时候,处理器会对寄存器执行一个初始化操作
    • 代码段寄存器CS的值被初始化为FF FF
    • 其他寄存器(IP)的值被初始化为00 00
  • 初始化工作完成后,处理器会立刻开始机器周期的循环

第三节 BIOS

  • 1MB并不是指内存大小,而是指处理器可以访问的空间(寻址空间)的大小,与计算机实际内存之间并没有直接联系
  • 1MB的寻址空间从物理上被分为了三大部分:
    • 大部分用于访问内存(640KB)
    • 剩余部分分给了只读存储器ROM(64KB)和外围板卡(320KB)
  • ROM(Read-Only Memory):只读存储器
  • BIOS(Basic Input Output System):基本输入输出系统
  • 跳转指令:
    • 作用:改变CSIP的值,让处理器从ROM较低的位置处执行
    • 执行 jmp F000:005C 以后,
    • CS的值变为F000IP的值变为005C
    • CS的值左移四位,变为F0000,加上IP的值,结果为F005CF005C属于ROM中较低端的位置,从而使得ROM有更多的空间执行指令
  • 在这里插入图片描述
  • 如图可以看出,FFFF0距离顶端FFFFF只有16个字节的空间,故在FFFF0处一般为跳转指令,使得程序跳到ROM的底部去执行
  • 如果使用的是8086的处理器,分配一块640KB大小的内存条刚刚好(8086处理器访问内存的能力只有640KB

第四节 硬盘

  • 在这里插入图片描述
  • 组成:盘片、读写磁头、磁头臂、磁头支架、转轴、扇区、磁道
    • 在这里插入图片描述
  • 数据存储于硬盘的盘片上,盘片都串于同一根轴(转轴)上,由电动机带动,进行同步旋转
  • 除了最上面和最下面的盘片外,其余每个盘片都有上下两个磁头最上面的盘片只有上方一个磁头,最下面的盘片只有下方一个磁头
  • 磁头具有编号,从上往下分别为1,2,3,··· 。磁头是一个整体,不能单独移动其中的某一个磁头
  • 磁头通过磁头臂固定在支架上,由步进电机带动,同步的在盘片的中心和边缘之间来回移动
  • 磁道:磁头在电机带动下围绕圆心所画的圆,由于所有的磁头都是同步的,所以每个盘片都有相同的磁道
  • 柱面:将每个盘片上的同一条磁道上下相连,形成柱面
    • 作用:优化数据读写
  • 磁道和柱面皆具有编号,编号由边缘向圆心的位置编号分别为0,1,2,3,···
  • 在硬盘上,数据的访问是以柱面来组织的,数据存储时当每个盘面的同一磁道都完成了存储,数据才会被存入下一磁道中
  • 磁道进一步划分为扇区,扇区之间存在一定的间隔,每个扇区都有一个编号,分别为1,2,3,···
  • 每个扇区以扇区头开始,扇区头后面是512个字节的存储空间(真正存储数据的部分),扇区头包含了每个扇区的信息,比如扇区所在的磁道号、磁头号、扇区号等
  • 主引导扇区(硬盘的第一个扇区):0面0道1扇区

第五节 操作系统的自举

  • 1、启动或重启计算机,寄存器被初始化
    • CS:FFFF 代码段寄存器被初始化为FFFF
    • IP:0000 指令指针寄存器被初始化为0000
  • 2、初始化完成后,处理器开始进入机器周期的循环,首先到FFFF0的位置执行跳转指令( jmp F000:005C)
    • CS:F000 代码段寄存器的值被改为F000
    • IP:005C 指令指针寄存器的值被改为005C
  • 3、处理器到F005C的位置(ROM存储器的底部)取指令并执行
    • 从下往上依次执行BIOS中的指令
  • 4、BIOS所做的最后一件事:将主引导扇区中的内容加载到内存地址为7C00的位置处
  • 5、BIOS的最后一条指令(跳转指令):JMP 0000:7C00
    • CS:0000 代码段寄存器的值被改为0000
    • IP:7C00 指令指针寄存器的值被改为7C00
  • 6、处理器到7C00的位置处执行主引导扇区中的指令
    • (1)、加载操作系统自举代码到内存中
    • (2)、最后通过一条跳转指令,使处理器去执行操作系统的自举代码,启动操作系统
  • 处理器如何绕过操作系统使程序运行起来?
    • 在第4步的时候,将程序写入主引导扇区中,由主引导扇区加载到内存地址为7C00的位置处
    • 继续执行第5步的跳转指令,执行7C00位置处的程序,此处的程序为绕过操作系统写入的程序
    • 引发的问题:主引导扇区中的内容被改写,操作系统无法启动,造成计算机瘫痪

第六节 虚拟机

  • 在虚拟机中创建一个虚拟硬盘

第七节 向虚拟硬盘写入数据

  • 虚拟硬盘的本质:文件
  • 准备:
    • 向虚拟硬盘写入数据的软件:Vhd Writer
    • 汇编代码编写的程序(作用:通过汇编代码控制显卡,在屏幕上显示一串字符)
  • 操作:
    • 运行Vhd Writer
    • 点击左下角选择虚拟硬盘文件,选中想要写入的虚拟硬盘,点击下一步,在数据文件对话框中选择准备好的汇编程序,点击下一步,点击写入文件,看到提示数据写入完成,本次共操作了一个扇区,点击完成
    • 启动虚拟机(在虚拟机中创建的虚拟硬盘)

选择准备好的汇编程序,点击下一步,点击写入文件,看到提示数据写入完成,本次共操作了一个扇区,点击完成

  • 启动虚拟机(在虚拟机中创建的虚拟硬盘)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!