bios是加电完成后执行的指令,boot是BIOS执行完成后的指令(算是操作系统内部指令)
即BIOS 加电到 选择系统,  boot是选择系统之后(装了多个系统的师傅应该了解,开机到一半有个选择操作系统)
想去了解系统加电过程,于是安装了一个qemu进行调试
boot bios傻傻分不清
不能单步执行,n,s都不行
系统停在了0xFFFF FFF0  //可以通过断点知道
通过dump 内存 0x0000 0000 - 0x000F FFFF
和 0xFFF0 0000 - 0xFFFF FFFF 发现大部分是一致的

0x0000 0000 – 0x000D FFFF 全0                  //boot 在0x7c00 目前是全0

0xFFF0 0000 – 0xFFFD EF8F 全0
0xFFFD EF90 – 0xFFFD FFFF 未知数据
先看初值
boot bios傻傻分不清
然后看第一条指令
0xfffffff0: ljmp   $0xf000,$0xe05b
inter 手册
To insure that the base address in the CS register remains unchanged until the EPROM based software-initialization code is completed, the code must not contain a far jump or far call or allow an interrupt to occur (which would cause the CS selector value to be changed).
bios连在南桥上,将bios映射到内存上
然后看芯片手册 EPROM应该是在加电后已经加载完毕了,所以才能进行ljmp
然后ljmp修改了cs:base值  0xFFFF 0000 -> 0x000F 0000
跳转到了0x000F E05B  //BIOS正式函数  //估摸着bios 是要在最后写ljmp   $0xf000,$0xe05b
然后bios执行硬件检查 ,并且把boot加载到0x7c00
然后执行boot指令,开启系统

总结:系统加电  芯片组至reset  等待CPU加电并稳定频率(HZ) 这时候BIOS(ROM) 芯片组(主板芯片组映射表)也完成
cs:base + EIP = 0xFFFF FFF0 长跳转至0x000F e05b执行bios程序
bios硬件检查,并将boot移动到0x0000 7c00 
然后跳转至0x0000 7c00 操作系统开始

相关文章:

  • 2021-09-07
  • 2021-12-18
  • 2021-10-09
  • 2022-12-23
  • 2021-11-19
  • 2021-10-28
  • 2021-08-17
猜你喜欢
  • 2021-07-19
  • 2021-04-29
  • 2021-08-29
  • 2021-08-03
  • 2021-09-27
  • 2021-12-20
相关资源
相似解决方案