|
发表于 2006-3-31 17:22:03
|
显示全部楼层
关于ROM的问题,上述讨论的焦点是以下几点:
1:ROM能不能执行程序,我可以很明确的以实践告诉大家,代码的确可以放在ROM里执行(我曾在TI的54xDSP上作过),对于需要Write的数据可以放入RAM,仅此而已。
2:关于启动时代码映不映射我对386不太懂,但是我在用DSP时发现,映不映射是与CPU配置有关。
3:对于8086讲,不管映不映射,执行的第一条代码的地址是由CS和IP的值决定(其实对于8086,不仅仅是启动的时候才是这样,在运行时也是这样,这是因为8086的寄存器是16位的,而地址线是20位的),所以CPU执行的第一条指令在0xFFFF0,然后再跳转。
4:如果(假如)是我来设计BIOS我会将BIOS分成两部分,Bootloader和硬件初始化程序,并按下面的过程
org 0xFFFF0
jump BootLoader
org 0xF0000 //假设BIOS的ROM地址的开始
BootLoader:/*以下代码完成硬件初始化程序向RAM的搬移*/
/*为什么要搬移,原因有两点,1:加快运行速度,2,开发者为了节省ROM,
往往都把程序压缩放入ROM,那么压缩的是什么呢?是程序的未初始化段 (UNINITIALIZED Section),也就是只需要分配空间不要付初值的段,这样只需要在RAM 中分配这些段,不必把它们放入ROM,呵呵我在做6XDSP加载的时候就是这样做的*/
...............
..............
/*假设初始化程序的入口为_C_int*/
jump _C_int
end;
顺便,关于统一编址的问题关键是CPU怎样来看地址线,以及地址线上设备是怎样挂的。
以上只是我个人的理解,请大虾排砖 |
|