专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
开机后的第一条指令
2019-04-14 21:10
发布
生成海报
站内文章
/
模拟电子
14094
0
1338
关于电脑加电后的第一条指令,有很多人在网络上问过,但解答并不是那么的清晰,csdn论坛上也有很多这类的讨论帖,
例如:
CPU在RSET后的第一条执行指令的地址问题
、
请教x86的启动过程,cpu如何自举第一条指令?
、
开机第一条指令是如何取到和执行的?
存在问题的地方大概是这么几点:
1.第一条指令的地址是什么
2.第一条指令的地址为什么是0xFFFFFFF0
3.
第一条指令存储在什么地方
4.
BIOS代码块映射在什么位置
5.
第一条指令的内容是什么
然后挨个解答。。。。。。。
----------------------------------------------------------------------------------------------------------------------------------------------------------
一、第一条指令的地址是什么
这个问题网上有两种解答,0xFFFFFFF0,0xFFFF0。当然第一种是对的,这个在intel手册第三卷第9章有详细说明,第一条指令的地址为
0xFFFFFFF0
这个地址自从intel发布80386后就延续下来
第二种地址在早年间也是对的,在intel还在使用16位cpu的时候,8086,8088,地址空间为1M,第一条指令的地址就是
0xFFFF0了,回答这种地址的应该看的是早年的书,现在pc机已经不再使用了
这是加电后寄存器的初始值
又或者是拿16位实模式说事,PC刚开机时确是16位实模式,这种模式的地址计算方式是使用CS和EIP寄存器中的值(Selector*16+EIP),
这么算下来确实是
0xFFFF0。但是刚开机时并不是使用这种计算方式,虽然还在16位模式。但intel规定的是当CS中的初始值被改变后才使用这种一般的地址计算方式。未改变之前用Base+EIP来生成地址,所以还是
0xFFFFFFF0
原文:
----------------------------------------------------------------------------------------------------------------------------------------------------------
二、第一条指令的地址为什么是0xFFFFFFF0
这个也没为什么,当初就这么设定了,人为规定
----------------------------------------------------------------------------------------------------------------------------------------------------------
三、
第一条指令存储在什么地方
也有很多人问这个问题,指令肯定是在EPROM中了,刚开机时内存中什么都没。
----------------------------------------------------------------------------------------------------------------------------------------------------------
四、
BIOS代码块映射在什么位置
BIOS代码肯定是储存在
EPROM中的,这时cpu如何访问?靠地址映射,硬件会把
EPROM映
射在两个地方,一个是从0xFFFFFFFF(4GB)处向下扩展,一个是从0xFFFFF(1MB)处向下扩
展
第一个映射是因为第一条指令在
0xFFFFFFF0,所以
EPROM必须在那个位置。第二个映射是为了兼容,在16位时代就有了。
另外
地址映射是占据地址空间,所以纵使你的pc机只有2G内存也没事,因为并没用内存,
使用的只是地址空间,只是把那块地址分配给了
EPROM。
这也就是为什么32位系统只
能使用4G内存,因为32位下只有4G的地址空间,内存再大就没地址分配了,所以读
取不到了。
另外好多人会碰到这个
占用过大,这也是地址空间的问题。网上好多人发
帖用
什么系统32位换64位,一会又设置msconfig,只能说
Go play with your balls。。。
如果
系统
本来
就是
64位呢,还要换128位么
。这就是硬件厂家把显卡或是别的什么rom,ram区给映射到了常用的地址
空间,地址空间一占,内存就没得用了,所以就保留了,至于占用过大还是换电脑把。
----------------------------------------------------------------------------------------------------------------------------------------------------------
五、第一条指令的内容是什么
这个也是比较容易混乱的地方,大多数人说第一条指令是个长跳转(long jmp),跳转到0~0xFFFFF(0~1MB)这一段,然后再执行BIOS剩余的指令。然而又有一部分人看到intel手册第3卷的9.1.4节有这么一段话
这里又说不让有长跳转。其实两种都对,intel手册上说的是让BIOS在高地址空间运行,期间一直不修改CS寄存器,也就一直使用Base+EIP的方式生成地址,这种新式做法应该是UEFI的
那种刚开始就长跳转的属于老式做法,
在qemu中导出的第一条汇编指令是这个样子0xfffffff0: ljmp $0xf000,$0xe05b
Ta的文章
更多
>>
DM642开发与应用
0 个评论
开机后的第一条指令
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮