中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 问:电脑是怎么从ROM启动的...
« [1] [2] [3] »
作者:
标题: 问:电脑是怎么从ROM启动的... 上一主题 | 下一主题
aria
高级用户




积分 924
发帖 243
注册 2003-7-9
状态 离线
『第 16 楼』:  

想问一下:既然不能用ram那么ss段是怎么设的呢?不能用call了吗?

2004-10-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yzz163
中级用户




积分 335
发帖 96
注册 2004-5-7
状态 离线
『第 17 楼』:  

1。提供rom里面程序的相关资料和教程。------------------好象写BIOS的公司永远也不会提供的吧。2。一部分程序在ROM中运行,不能用ram---------------------------这样说,好象不妥吧?ROM是只读的,这句“一部分程序在ROM中运行”应改成“CPU将读取ROM中的代码”。



Freebsd网站架设\局域网维护管理\硬件维修\电路图纸
欢迎到 振兴电子
http://zxdz.8800.org
2004-10-5 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
aria
高级用户




积分 924
发帖 243
注册 2003-7-9
状态 离线
『第 18 楼』:  

1.我觉得不对.例如AMI就提供了一套sis芯片组的bios源码另外还有freebios,openbios等2.没有理解你的意思

2004-10-5 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yzz163
中级用户




积分 335
发帖 96
注册 2004-5-7
状态 离线
『第 19 楼』:  



  Quote:
CPU马上就从地址FFFF0H处开始执行指令

关于此句我有些疑问,地址的概念似乎是针对RAM(内存)来说的,而BIOS代码指令在ROM(无论是否可擦写)中。而这个地址FFFF:0,据我所知,是ROM“映射”到RAM中的起始地址,而这个“映射”的过程肯定是在POST过程之后的,因为必须首先检测RAM的有效,才可能映射。也就是说,在POST之前地址FFFF:0应该是不存在的,那么CPU又怎么从此处开始执行呢?。
    关于显卡的BIOS也存在类似的问题,而且C0000也似乎并非“显卡BIOS”,我只知道早期的PC机中曾把它用作彩色显示器的屏幕缓冲区(640*480*16),而现在的显卡已不再如此使用。
-----------------------
以INTEL586为例,在复位信号结束后,南/北(具体要看芯片组)桥将使CPU发出读指令(第一条开机指令的第一总线周期),即CPU在自己的地址引脚上放:FFFF0。然后通过南/北、I/O芯片在BIOS的地址引脚上产生FFFF:0信号,BIOS的地址引脚A0-A7为低电平,BIOS被选中。BIOS将在自己的数据线引脚上放代码5B3AH(Award BIOS),I/O芯片、南/北将该数据传到CPU地址线上,最后由CPU读取并执行。
(通过短路ISA槽的A10 IO CHRDY和B10 GND脚可使CPU始终处于上述的“第一条读指令”状态,——其实就是读主板BIOS ROM里存放的第一条指令。这时你可测一下ISA的地址线A0-A19应全为高电平:1,即十六进制的FFFF)
这是我对CPU上电后如何读取BIOS指令的理解,也是我维修“致命故障”主板的理论依据。希望大家共同探讨。
“地址的概念似乎是针对RAM(内存)来说的”这不对吧?不管ROM、RAM对CPU来说都是一样的,即:通过地址线、数据线来访问他们的每个存储单元的。同样CPU访问其他设备也是一样的吧。当然ROM的“映射”要在后面来实现。
另外POST里好象要检查前64K内存吧?

[此贴子已经被作者于2004-10-6 12:23:20编辑过]






Freebsd网站架设\局域网维护管理\硬件维修\电路图纸
欢迎到 振兴电子
http://zxdz.8800.org
2004-10-6 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
yzz163
中级用户




积分 335
发帖 96
注册 2004-5-7
状态 离线
『第 20 楼』:  

aria:
1、你的BIOS原码是那个型号的主板上的,是实用的吗?能E-MAIL我吗?
2、ROM会运行程序???!!! 那CPU干什么?
所有的程序代码都是由CPU来执行的,RAM、ROM、只是放程序代码或数据的“容器”。

[此贴子已经被作者于2004-10-6 0:55:05编辑过]






Freebsd网站架设\局域网维护管理\硬件维修\电路图纸
欢迎到 振兴电子
http://zxdz.8800.org
2004-10-6 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
aria
高级用户




积分 924
发帖 243
注册 2003-7-9
状态 离线
『第 21 楼』:  

呵呵又学到了很多谢谢关于源码:那个是一本叫<<BIOS研发技术剖析>>里面的压缩后有6M多

[此贴子已经被作者于2004-10-6 12:29:01编辑过]




2004-10-6 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cdl
中级用户

bbpc


积分 340
发帖 107
注册 2004-4-11
状态 离线
『第 22 楼』:  



  Quote:
以下是引用aria在2004-10-3 16:16:20的发言:

想问一下:既然不能用ram
那么ss段是怎么设的呢?
不能用call了吗?

在对ram进行有效测试之前,不可以用ram。堆栈段是哪里并不重要因为不会用到,当然call是不能用的。可以使用所有的寄存器,寄存器默认是好的。



x86!dos!
爱你就象老鼠爱大米
http://www.baby-pc.com/
2004-10-7 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
cdl
中级用户

bbpc


积分 340
发帖 107
注册 2004-4-11
状态 离线
『第 23 楼』:  

关键点:bios空间不在1M空间之内,光用20根地址线是无法访问的。正常情况下在实模式中是读不到bios的,就算你用ffff段也好。其实问题并不难,自己做个试验,把bios读出来看看不就知道了。如果能正确读出bios,fffffff0处一定是编码为EAH的转移指令。



x86!dos!
爱你就象老鼠爱大米
http://www.baby-pc.com/
2004-10-7 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
yzz163
中级用户




积分 335
发帖 96
注册 2004-5-7
状态 离线
『第 24 楼』:  

关键点:bios空间不在1M空间之内,光用20根地址线是无法访问的。正常情况下在实模式中是读不到bios的,就算你用ffff段也好。其实问题并不难,自己做个试验,把bios读出来看看不就知道了。如果能正确读出bios,fffffff0处一定是编码为EAH的转移指令。--------------------------"自己做个试验,把bios读出来看看不就知道了。"  你是在计算机正常启动后用程序读的?还是在CPU通电复位后用"专用硬件"(这时计算机还没完成自检)对BIOS进行单步跟踪的?



Freebsd网站架设\局域网维护管理\硬件维修\电路图纸
欢迎到 振兴电子
http://zxdz.8800.org
2004-10-7 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
cdl
中级用户

bbpc


积分 340
发帖 107
注册 2004-4-11
状态 离线
『第 25 楼』:  



  Quote:
以下是引用yzz163在2004-10-7 15:42:55的发言:

关键点:bios空间不在1M空间之内,光用20根地址线是无法访问的。正常情况下在实模式中是读不到bios的,就算你用ffff段也好。其实问题并不难,自己做个试验,把bios读出来看看不就知道了。如果能正确读出bios,fffffff0处一定是编码为EAH的转移指令。
--------------------------
"自己做个试验,把bios读出来看看不就知道了。"  你是在计算机正常启动后用程序读的?还是在CPU通电复位后用"专用硬件"(这时计算机还没完成自检)对BIOS进行单步跟踪的?

我是编程把整个flash全读出来了。“专用硬件”我没用过。



x86!dos!
爱你就象老鼠爱大米
http://www.baby-pc.com/
2004-10-7 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
cdl
中级用户

bbpc


积分 340
发帖 107
注册 2004-4-11
状态 离线
『第 26 楼』:  

关于bios映射到ram:bios映射到ram不是必须的,只是在rom中运行速度太慢。为了让执行速度更快而映射的,如果应用程序不是经常调用bios的话,没必要映射到ram空间,这样可以节省ram资源。特别是用windows操作系统的用户根本就没必要映射,因为bios的基本功能都是实模式代码,保护模式无法使用,windows下的硬件驱动都是重新加载的,不会使用bios的功能。



x86!dos!
爱你就象老鼠爱大米
http://www.baby-pc.com/
2004-10-7 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
yzz163
中级用户




积分 335
发帖 96
注册 2004-5-7
状态 离线
『第 27 楼』:  

我是编程把整个flash全读出来了。------------------你是在计算机启动后在用程序读BIOS的吧?这时BIOS应该是被映射到内存里了把,不同的操作系统可能被映射的地址不同吧?但现在我们讨论的是在CPU复位后的第一条指令:即如何读取BIOS的.



Freebsd网站架设\局域网维护管理\硬件维修\电路图纸
欢迎到 振兴电子
http://zxdz.8800.org
2004-10-12 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
yzz163
中级用户




积分 335
发帖 96
注册 2004-5-7
状态 离线
『第 28 楼』:  

bios空间不在1M空间之内,光用20根地址线是无法访问的。-----------------------------对于X86系列的CPU,在复位后,就工作在X086模式即"实模式",这时它只能用20根地址线.当然对于其他类型的CPU可能不同.



Freebsd网站架设\局域网维护管理\硬件维修\电路图纸
欢迎到 振兴电子
http://zxdz.8800.org
2004-10-12 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
cdl
中级用户

bbpc


积分 340
发帖 107
注册 2004-4-11
状态 离线
『第 29 楼』:  

在286之前地址空间是20位的,只需要16位的段寄存器和16位的IP就够了,而286的地址空间是24位的,386的地址空间是32位的,地址产生方式与286之前的CPU有很大的区别。在386以后的计算机中,BIOS是放在最高地址空间的64K处,第一条指令是在FFFFFFF0处,CPU复位后第一条指令并不是由CS左移4位+IP计算地址的,虽然复位之后cs=FFFFH,但是CPU产生的第一条指令的地址和它毫无关系。基址是由另外一个寄存器(该寄存器无法直接访问)产生,CPU复位后该寄存器的值是确定的并保证由该基址和EIP=0000FFF0H,寻址到FFFFFFF0H处,第一条指令是长跳转指令,执行第一条指令后cs重新装入,同时基址寄存器也重新装入。



x86!dos!
爱你就象老鼠爱大米
http://www.baby-pc.com/
2004-10-12 00:00
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
beiyuly
初级用户





积分 95
发帖 40
注册 2006-10-8
状态 离线
『第 30 楼』:  



  Quote:
Originally posted by willsort at 2004-10-2 00:00:
Re All:
   
    关于此句我有些疑问,地址的概念似乎是针对RAM(内存)来说的,而BIOS代码指令在ROM(无论是否可擦写)中。而这个地址FFFF:0,据我栮..

bios在进行ram shadow之前,cpu的指令是从bios om中拿到的,那个时候没有ram,也就是说机器还不知道有ram,只有在进行ram shadow之后,才会在ram中放入印象,这才从ram中的指令执行.



http://beiyu.bokee.com
2006-10-13 20:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: