计算机开机第一条指令地址

本文探讨了x86处理器启动时的第一条指令地址,从8086到80386的变化,以及地址布局和映射机制。在80386中,第一条指令位于0xFFFFFFF0,实际指向BIOS。CPU通过地址映射访问ROM,之后将BIOS内容复制到1M以下的RAM空间,执行长跳转。文章还提及了地址映射的可能实现方式和内存初始化的几种猜想。
摘要由CSDN通过智能技术生成

前提

本文针对x86架构的处理器。在正式开始之前,首先需要明确一些基本概念。
cs寄存器:代码段寄存器,这个寄存器其实是告诉CPU在这个位置是代码还是数据的。在实模式下,CPU的寻址方式是代码段寄存器左移4位然后加上ip寄存器,作为地址去取内容,写作cs:ip。
reset vector:就是CPU执行的第一条指令的位置

地址构成

其实随着x86的发展,第一条指令的地址并不是一成不变的
8086:CPU reset之后cs寄存器的值是0xFFFF,ip寄存器的值是0x0,所以形成的物理地址是0xFFFF0,这个地址就是1M往下16字节的位置
80286:CPU reset之后cs寄存器的值是0xF000,ip寄存器的值是0xFFF0,所以形成的物理地址也是0xFFFF0
80386:到了386时代一切都变了,此时在CPU reset之后cs寄存器的值仍然是0xF000,但是cs除了段选择子之外还有一个隐藏的基址寄存器,这个寄存器的值是0xFFFF0000,ip寄存器的值仍然是0xFFF0。此时的地址不在是0xF000左移4位加上0xFFF0了,而是0xFFFF0000 + 0xFFF0 = 0xFFFFFFF0。所以第一条指令是在一个很高的地址,是4G往下16字节的位置。

地址布局与映射

经过地址构成这一说,可能大家会有一些疑问。CPU怎么能一上来就去0xFFFFFFF0取指呢?因为此时内存都还没初始化呢,那里什么都没有啊。而且第一条指令毫无疑问是在BIOS里啊,现在用来烧写BIOS的flash芯片有256KB的,1MB的,4MB的

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值