+ -
当前位置:首页 → 问答吧 → 各位高手,小弟请教一个问题。。。

各位高手,小弟请教一个问题。。。

时间:2004-09-09

来源:互联网

1、据我所知,在计算机复位后,CPU会在 FFFFO:0000 处执行第一条指令。书上说这是BIOS的入口。我想知道,既然这是BIOS的入口地址,那么是不是就是说从这开始有一段地址空间是分配在ROM-BIOS上,而在内存RAM上却留下相应的一段空洞,不能访问RAM上的这一段存储区?如果那位知道的话,麻烦请你告诉我。顺便详细的说一下ROM-BIOS和RAM的地址是怎样分配的?
2、大家都知道,LINUX是支持页式内存管理的,但是却绕过了段式内存管理。我记得有一本书说这也是GCC的一个特性,也就是说GCC不支持分段的内存管理。大家都知道,TURBO C也能编译C程序。但是据我所知,它是支持分段的。我想知道,如果我想写一个象LINXU一样的支持页式内存管理,却绕过INTEL的段式内存管理,能不能用TURBO C写。
3、TURBO C能不能在保护模式下编译C程序,也就是说它能不能用到EAX、EBX、……、CR0、CR1……、GDTR、LDTR、TR等寄存器?

作者: cxh_nuaa_2001   发布时间: 2004-09-09

1.根据IBM开机协议,开机时从CMOS ROM上把BIOS数据拷贝到RAM的前64KB区域。实模式程序可以访问这块区域。

2.不要把一些过时的咚咚和先进事物纠缠起来!
Turbo C是十年前的产品了,它的主打平台就是实模式DOS!且不要说它是否能开发如Linux般的先进功能,就算是它的依附平台DOS就早已经是昨日黄花了!
我们能仅用双足走路到月球吗?不言而喻。

作者: home_king   发布时间: 2004-09-09

楼上的大哥教训的是。
不过我还有些东西不明白。开机后内存都是清零的,然而要执行程序,或者说第一条指令,这条指令必须在ROM中。大家都知道这就是ROM-BIOS。所以CPU开始执行指令的那个地址也就必须在ROM上,而不在RAM上,对不对?某些书还说了从640KB--->1024KB的区域就是保留给ROM-BIOS、EGA/VGA等用的。所以这段区域,至少是这段区域的部分地址空间应该是在ROM上的,对不对?既然是在ROM上,那么这段地址空间的访问就不能象访问RAM那样了。这段地址空间就要特殊对待,因为ROM和RAM毕竟不同。我上面的理解不知对不对,还清高手指正。
还有,楼上的大哥说实模式可以访问这块区域。那么我想知道,在保护模式下,能不能把线形地址映射到这块区域呢?

作者: cxh_nuaa_2001   发布时间: 2004-09-10

对于i386体系结构来说,事实上第一条指令的位置是在0xFFFFFFF0处,这是由RST后的CPU状态(EIP的值)决定的,这里一般是一条跳转指令。执行完这条JMP指令后,CPU真正进入实模式,即用CS:IP方式取指。

对于BIOS中的地址映,据我了解,系统会把BIOS中的ROM直接用硬件同时映射到地址空间:0x000A0000~0x000FFFFF以及0xFFFA0000~0xFFFFFFFF。即第一条JMP指令取自地址空间0xFFFFFFF0,JMP以后取自0x000A0000~0x000FFFFF。

不当之处,请多指正。

作者: seeker007   发布时间: 2004-09-10