一直以来都说,电脑开机后,将CS设置为,IP设置为,这样形成的地址就是,这就是BIOS的入口地址。 之后CPU读取该地址的代码,然后开始执行。

现在我想知道这个地址是在主板上还是在内存中。 我以为如果是统一寻址的话,可能是读取主板上的ROM,但是看书上的图片,好像是在RAM中。 如果在内存中,什么时候、哪个程序会读取ROM? 程序中的程序将其读入内存。 如果你猜想,这个过程应该是由固定硬件来实现的。 ROM中的所有内容都被复制到存储器的更高位。 之后,它必须引用内存中的地址。

百度了一下,有一篇文章是讲这个的。

640KB~1MB上位内存(该区域的地址分配给ROM,对应的384KB RAM被分块。所谓影子内存技术就是将ROM内容读入对应地址的RAM中,然后系统将从RAM数据中读取而不是从原始ROM中读取数据,从而提高速度。)

1MB~扩展内存

笔记:

RAM,也称为“影子内存”,是一种用于提高计算机系统效率的专门技术。 使用的物理芯片仍然是CMOS DRAM(动态随机存取存储器,见本书后面的内容)芯片。 RAM 占据系统主存地址空间的一部分。 其寻址范围为C0000~FFFFF,即1MB主存中的768KB~区域。 该区域通常也称为内存保留区域,不能被用户程序直接访问。 RAM的作用是存储各种ROM BIOS的内容。 它是复制的ROM BIOS内容,因此也称为ROM,与RAM的意思相同,指的是ROM BIOS的“影子”。 当今的计算机系统,一开机,BIOS信息就会被加载到RAM中的指定区域。 由于RAM的物理地址与对应的ROM的物理地址相同,因此当需要访问BIOS时,只需访问RAM即可,而不需要访问ROM,这样可以大大加快计算机系统的运算时间。 通常访问ROM的时间约为200ns,访问DRAM的时间小于100ns、60ns,甚至更短。

在计算机系统运行过程中,读取BIOS中的数据或者调用BIOS中的程序模块的操作会非常频繁。 RAM技术的使用无疑将大大提高工作效率。

386之前和386之后这个地址是不同的,但都在系统内存的更高地址段。 386下,由于CS段是16位,EIP是32位,所以为了获得32位地址,386在CS段中添加了几个字段。 这些是隐藏字段。 系统可以通过GDT和IDT改变段选择器的字段。 ,此时地址转换的不是段地址左移4位+偏移地址,而是CS的Base字段+偏移地址。

下面是一个例子

当系统上电时,系统将重置。 此时,在386之前的系统中,CS=F000H,IP=FFF0H,Bios地址为左移4位的段地址+偏移地址+FFF0H=

在386之前,系统的可寻址范围是1MB,即~

386下CS=F000H,IP=FFF0H,这个是不变的,但是此时CScs中的内容是:

= F000H(这是你可以看到的部分)

此时隐藏部分无法使用,因为是实地址模式,所以Bios地址与386之前的地址相同。

然而386的可寻址范围是4GB。 也就是说,如果用这个地址()作为Bios地址,系统内存就不连续了。 因此,386采用硬件设置的方式,将A20~A31地址线设置为1,就变成了使用这个作为Bios地址。

这样设置的结果是隐藏部分的一个字段是Base=。 这个操作不是通过改变描述符表来实现的,因为还没有进入保护模式,描述符表还没有建立。 这是用硬件实现的,当进行段间跳转时,设置1的结果无法保存,因为硬件设计永远不会将其设置为0,所以当指令执行结束时jmp时,Base =,那么,Bios使用的内存不到1M。

关于入口地址的形成,有的文章说是CS和IP的组合,有的文章说是CS和IP的组合。 我猜测可能是不同硬件的初始化不同,只要形成的最终入口地址是一样的。 如果不是我猜的,稍后我会补充。

未经允许不得转载! 作者:admin,转载或复制请以超链接形式并注明出处天心神途传奇手游发布网

原文地址:《BIOS入口地址0xFFFF0简介(BIOS端口设置)》发布于:2024-02-25

发表评论

表情:
验证码
评论列表 (暂无评论,52人围观)

还没有评论,来说两句吧...