【问题标题】:RESET procedure of 80868086的复位程序
【发布时间】:2015-11-13 09:25:28
【问题描述】:

8086 和其他处理器的复位引脚将导致 CS:IP 指向 FFFF:0000,即内存的最低 16 字节。在那个位置有一个跳转指令到内存空间中的其他地方来初始化处理器。

我的问题是,为什么指向最后一节,然后故意跳到其他地方?为什么处理器制造商不将 CS:IP 重置为 0000:0000?然后,他们可以编写一些初始指令而无需任何跳转!

这难道没有意义吗?

【问题讨论】:

  • 相关:Why does 8085 start from 00000 whilst 8086 starts from FFFF0(我发誓最近在一个姊妹网站上还有一个关于此的问题,但我不记得是哪一个了,而且这个问题是边缘题外话,所以可能已经消失了)
  • FFFF:0000 是内存的最低 16 字节?你确定这是最低的吗?在我看来,映射到 1mb 区域的 FFFF0(最后 16 个字节)。
  • 可能应该指出,大多数 386 的执行从 F000:FFF0 开始。在实模式下也映射到 FFFF0,但大多数 386 以虚模式启动,其中段 F000 与映射到基地址 FFFF0000 的描述符相关联。当添加到偏移量 FFF0 时,它会产生一个地址 FFFFFFF0,它比 4gb 标记低 16 个字节。
  • ROM 需要映射到复位地址,这样处理器才能可靠地执行启动代码。将 ROM 置于最高地址,将 RAM 置于低地址,具有许多系统设计优势。好吧,无论如何,40 年前,当芯片组的概念仍然是一个遥远的未来主义想法时。

标签: assembly x86-16


【解决方案1】:

都是旧版界面:)

在 0000:0000 处有 IVT(中断向量表)处理中断(INT xx 指令),其中数组(地址表)可能由 8086 硬件中的扩展 call dword ptr [interrupt# * 4] 指令访问,因此 int0(除以 0)=[0*4], int1..., int2(NMI Interrupt="Non maskable interrupt" 不能被 CLI 指令关闭)=[2*4],等等。

在 FFFF:0000 或 F000:FFF0(1 兆字节之前的最后 16 个字节)有(缓存的)主板 BIOS-ROM(只读)在 8086 架构中从 F000:0000 到 F000:FFFF (64 字节)。进入 BIOS 初始化例程的任意但架构固定的入口点。

请看这里:http://files.osdev.org/mirrors/geezer/osd/ram/index.htm#layout 还有这里:http://wiki.osdev.org/Memory_Map_%28x86%29#Overview

我想将 BIOS 地址设置为 0000:0000 会使 8086-CPU 中用于计算地址和访问/调用 INT/IRET 中断的电路复杂化,如果表位于零,这将非常容易。在没有 MMU 的情况下,中断=减少电路的速度似乎至关重要,因为在 386 架构中,您可以使用 LIDT 指令设置中断表的地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2015-02-24
    • 2019-08-15
    • 2012-12-22
    • 2021-04-24
    • 2014-05-03
    • 2021-12-18
    相关资源
    最近更新 更多