操作系统——操作系统的启动(L2,L3)

揭开钢琴的盖子

在这里插入图片描述在这里插入图片描述通用计算机:可以进行编程操作
在这里插入图片描述
从计算机外部存储程序到计算机内部存储程序
当我们打开电源,第一条指令:
在这里插入图片描述
开机,PC处于实模式,将CS:IP置为0xffff:0x0000,这里对应的是bios区域,开始检测硬件,然后将0磁盘,0扇区(512字节)内容读入0x7c00位置,设置CS:IP为0x07c0:0x0000。也就是从0x07c00位置开始执行代码。
在这里插入图片描述磁盘里存放的就是操作系统的引导扇区

在这里插入图片描述

  • .s是汇编代码
  • bootsect.s的作用:
    • 将ds:si置为0x07c0:0000,将es:di置为0x9000:0000
    • 跳到0x9000:go位置继续执行
      • 这里的go是一个偏移地址,也就是相对于代码段的开始位置的偏移,所以这一句执行完后,跳到移动后的代码往下执行。

在这里插入图片描述

  • 作用:
    • 首先将ds,es,ss置为0x9000,将sp置为0xff00
    • 使用13号中断,读0号驱动器,0柱面,2扇区,0磁头下的内容到es:bx=0x9000:0x0200的位置
      • 也就是将磁盘上的boot扇区后面的4个扇区内容读入内存中的这一段代码后面的位置(因为第一个扇区占用了0x200(512)字节)

在这里插入图片描述

  • 作用:
    • 具体可以见10号中断,这一段代码的功能就是将msgl中的字符读入到屏幕上。
    • 0x1000就是读入字节数。
    • 调用read_it函数

在这里插入图片描述

  • 作用:继续读磁盘,再将控制权交到磁盘的第2扇区的代码处

操作系统启动:

在这里插入图片描述

  • 作用:
    • 使用15号中断,获得内存大小放入ax,再放入0x9000:0002位置
    • es:di=0x0000:0x0000 ds:si=0x1000:0x0000
    • 将操作系统读入到低地址处
    • 将0x1000:0000开始到0x8fff:0000位置的内容读到低地址处

在这里插入图片描述

  • 作用:
    • 切换到保护模式 cr0为1

在这里插入图片描述

  • cs选择子去GDT表的下标,取出基址,和ip组成物理内存地址
  • int n选择中断,其中的n需要去idt找对应的中断处理函数的入口地址

在这里插入图片描述

  • 作用:
    • 这时做完移动后的操作,设置idt和gdt表项位置

在这里插入图片描述
这条指令的意思是:将去gdt表的第八项寻找对于的段基址,然后将段基址取出作为基址,从基址的第0个字节开始执行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
去执行main函数,当main函数返回,会执行的是jmp L6,发生死机

在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值