关于机器上电后执行的第一条指令问题

JerKii 2008-09-04 10:08:45
看过Intel的技术文档,说机器上电后CPU内部的EIP寄存器被置为0xFFFFFFFE,我所不能理解的是,这个是个什么地址?很显然他不是一个有效的物理地址啊,既然不是物理地址那么它又是如何读取要被执行的指令的呢?另外,由于机器上电后处于实模式,这这个模式下,0xFFFFFFFE这样的地址为什么是合法的啊?
...全文
795 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
bxhzct 2008-12-08
  • 打赏
  • 举报
回复
CMOS
youxizhizuo 2008-12-08
  • 打赏
  • 举报
回复
只听过BIOS自启动引导读盘。
xiaopoy 2008-12-08
  • 打赏
  • 举报
回复
(that is, FFFF0000 + FFF0H = FFFFFFF0H).
LZ你发的文章已经完美的解释了原因
e_sharp 2008-12-07
  • 打赏
  • 举报
回复
UP
JerKii 2008-12-07
  • 打赏
  • 举报
回复
经过一段时间的学习,我总结如下,也算是对这个主题的结束语吧!

我们知道,Intel的CPU在上电后CS:EIP被设置成F000:FFFFFFF0,由于是刚上电,因此系统的主存储器还处于不可用状态,也就是说此时CPU执行的指令肯定不会来自主存储器中。并且我们知道,在初始情况下CPU的A20地址线是处于disabled状态的,因此F000:FFFFFFF0也就会变成F000:FFF0,也就是实模式下的FFFF0。因为CPU与主存储器之间不是直接进行连接的,而是要通过一个北桥芯片(如E7505 MCH, 855PM等等),通常北桥芯片中决定了当前系统所能支持的最大物理内存,如855GM只能支持2G的物理内存,但是对于32bit地址线的CPU,他有4G的物理地址空间,MCH会对当前的物理地址空间进行分区域(region)进行管理,这些区域可以由系统软件如BIOS或OS系统进行配置,MCH会将CPU的地址访问forward到不同的物理设备中。但是有一些物理地址空间区域的映射是固定的(即一些缺省的设置),如0F0000H - 0FFFFFH就是被直接映射到位于扩展总线上的BIOS中的ROM芯片的!因此,在上电后,我们的BIOS会被首次访问。然后CPU将按照在BIOS的ROM中存储的指令运行(当然,通常这些指令为系统初始化指令,如POST程序等)。

在通常的BIOS的实现中,都会在0FFFF0 - 0FFFFF出存放一条far jmp指令,该指令直接跳转到POST程序的入口处(当然,这个POST程序也位于F0000 - FFFFF中,它是BIOS的一部分),POST需要做的事通常包括芯片组初始化、CPU初始化、主存储器初始化、实模式下的中断服务例程初始化(如我们常用到的10h,13h,19h等等),在一些列初始化操作完成后,我们的主存储器、硬盘等都可用了(一般通过BIOS提供的中断例程对这些设备进行访问),然后就进行OS的引导了!在OS的引导过程中,BIOS直接将引导扇区中的512字节装载到7c000处,然后直接从该处开始就将CPU的控制权交给OS的引导程序了。

另外,我们常听说BIOS会将自己搬移(shadow)到主存储中,为什么需要这样做呢?我们刚才说过,在上电之后,虽然CPU对物理地址FFFF0进行访问,但我们知道,因为此时主存储器尚处在不可用状态,因此,MCH根据自身的设置(对F0000 - FFFFF这段区域的设置)会将给访问forward给ICH,由于BIOS位于扩展总线上(如ISA等总线),因此ICH可以很容易地对BIOS中的ROM进行寻址!但是,当我们的主存储器初始化完成后,为了加快对BIOS中的中断服务例程的访问,因此我们需要将BIOS自身搬移至主存储器中,那么,搬移到哪里呢?为了简单期间,BIOS将其自身搬移到主内存中的F0000 - FFFFF,并对F0000 - FFFFF这段区域的读写重新进行设置,以至于后续对该段的访问不会再被MCH forward到位于扩展总线上的BIOS中!
用户 昵称 2008-09-07
  • 打赏
  • 举报
回复
甭说这个地址是否有效,就是开机跳到88888888888888888888,也只是说明开机时有一条固定指令而已。
JerKii 2008-09-07
  • 打赏
  • 举报
回复
也就是说0xFFFFFFF0这个地址被“映射”到EPROM,事实上是由于在系统初始化间A20-A31之间的地址信号线被置1,从而使0xFFFF0变成0xFFFFFFF0了。而不是通过桥片来映射的了?

另外,这种地址是不是跟CPU的设计有关?比如说intel的cpu就要求将EPROM的地址映射到0xFFFFFFF0,而其他CPU可能会使用其他地址?
johnelf 2008-09-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 bshawk 的回复:]
在 FFFFFFF0H位置是一条跳转指令,会跳转到bios所在的物理位置开始执行!
[/Quote]
这就是我想说的
guolisen 2008-09-06
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 aca_jingru 的回复:]
这个地址有效..虽然开机运行在实模式,寻址范围为1m,但是cpu强制a20以后的线为1,得到物理地址是ffff fff0,但是还没有转到保护模式,所以只能折回到ffff0这里地址,imb pc规定1m内存高地址端存放bios程序,bios本身是固化的rom,所以随时可以寻址到.
里面是一个jmp语句,跳到bios的引导程序,然后post,int 19h完成操作系统引导

我汗一下这段英文
The first instruction that is fetched and executed following a hardware reset…
[/Quote]

This address is 16 bytes below the processor’s uppermost physical
address

这段地址是处理器最高地址以下的16字节(即0xFFFFFFF0)

bytes是“字节”~~~不是“位”
zwspider 2008-09-06
  • 打赏
  • 举报
回复
学习~
babanake 2008-09-06
  • 打赏
  • 举报
回复
跳转到 内存的最高位置,执行一个跳转指令。
K行天下 2008-09-06
  • 打赏
  • 举报
回复
跳转指令
过去的我 2008-09-06
  • 打赏
  • 举报
回复
FFFFFFF0H 得到的物里地址是不假,但是实模式a20以后的线还没接通,所以只能折回到ffff0这个地址
过去的我 2008-09-06
  • 打赏
  • 举报
回复
这个地址有效..虽然开机运行在实模式,寻址范围为1m,但是cpu强制a20以后的线为1,得到物理地址是ffff fff0,但是还没有转到保护模式,所以只能折回到ffff0这里地址,imb pc规定1m内存高地址端存放bios程序,bios本身是固化的rom,所以随时可以寻址到.
里面是一个jmp语句,跳到bios的引导程序,然后post,int 19h完成操作系统引导

我汗一下这段英文
The first instruction that is fetched and executed following a hardware reset is located at physical
address FFFFFFF0H. This address is 16 bytes below the processor’s uppermost physical
address


FFFFFFF0H 是16位? 他怎么算的..4*8=32位,里面描述的也不对,这段英文我觉得是错的

而且
(that is, FFFF0000 + FFF0H = FFFFFFF0H).
我觉得应该是 ffff0 +fff0 0000 得出的

realdragon2 2008-09-06
  • 打赏
  • 举报
回复
mark~ 学习.
ChamPagneZ 2008-09-06
  • 打赏
  • 举报
回复

//UP
色郎中 2008-09-06
  • 打赏
  • 举报
回复
FFF0 处是一个JMP指令,将跳转到BIOS的实际地址,然后就是BIOS查找各种硬件资源,找到硬盘之后,读取MBR
硬盘头512个字节,通过MBR(主引导目录)完成BIOS-》操作系统
mifeixq 2008-09-05
  • 打赏
  • 举报
回复
FFF0 处是一个JMP指令,将跳转到BIOS的实际地址,然后就是BIOS查找各种硬件资源,找到硬盘之后,读取MBR
硬盘头512个字节,通过MBR(主引导目录)完成BIOS-》操作系统

大体上就是这么个过程……
lunarfan 2008-09-05
  • 打赏
  • 举报
回复
up
zenny_chen 2008-09-05
  • 打赏
  • 举报
回复
如果像楼上几位所说的0xfffffff0就是BIOS的地址的话,那么第一条指令就是在BIOS中被获取的。
加载更多回复(14)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧