LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 637|回复: 3

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

[复制链接]
发表于 2004-9-9 11:49:58 | 显示全部楼层 |阅读模式
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等寄存器?
发表于 2004-9-9 17:03:30 | 显示全部楼层
1.根据IBM开机协议,开机时从CMOS ROM上把BIOS数据拷贝到RAM的前64KB区域。实模式程序可以访问这块区域。

2.不要把一些过时的咚咚和先进事物纠缠起来!
Turbo C是十年前的产品了,它的主打平台就是实模式DOS!且不要说它是否能开发如Linux般的先进功能,就算是它的依附平台DOS就早已经是昨日黄花了!
我们能仅用双足走路到月球吗?不言而喻。
 楼主| 发表于 2004-9-10 10:55:16 | 显示全部楼层
楼上的大哥教训的是。
不过我还有些东西不明白。开机后内存都是清零的,然而要执行程序,或者说第一条指令,这条指令必须在ROM中。大家都知道这就是ROM-BIOS。所以CPU开始执行指令的那个地址也就必须在ROM上,而不在RAM上,对不对?某些书还说了从640KB--->1024KB的区域就是保留给ROM-BIOS、EGA/VGA等用的。所以这段区域,至少是这段区域的部分地址空间应该是在ROM上的,对不对?既然是在ROM上,那么这段地址空间的访问就不能象访问RAM那样了。这段地址空间就要特殊对待,因为ROM和RAM毕竟不同。我上面的理解不知对不对,还清高手指正。
还有,楼上的大哥说实模式可以访问这块区域。那么我想知道,在保护模式下,能不能把线形地址映射到这块区域呢?
发表于 2004-9-10 10:55:46 | 显示全部楼层
对于i386体系结构来说,事实上第一条指令的位置是在0xFFFFFFF0处,这是由RST后的CPU状态(EIP的值)决定的,这里一般是一条跳转指令。执行完这条JMP指令后,CPU真正进入实模式,即用CS:IP方式取指。

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

不当之处,请多指正。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表