gpt4 book ai didi

assembly - x86 从哪个地址开始执行?

转载 作者:行者123 更新时间:2023-12-04 17:58:19 26 4
gpt4 key购买 nike

当 8086 或 8088 首次通电时,处理器从哪个地址开始执行?我知道 Z80 从 0 开始,而 6809 查找 FFFF 以寻找起始地址,但我经常想知道 x86 是如何开始的。

编辑:

这是假设没有 BIOS 干预。 IE。如果我有自己的 EEPROM 启动,它应该位于 RAM 中的哪个位置来启动机器运行?

最佳答案

这确实是一个比您可能意识到的要复杂得多的问题。在 8086 上,它非常简单——它从 FFFF:0000(内存结束前的 16 字节)开始。

棘手的部分是 286 或更高版本(即任何远程现代的东西)。在这些情况下,它仍然在内存结束前 16 字节开始,但是当然对于 24 位寻址 (286) 或 32 位寻址 (386+),物理地址是不同的。许多看起来并不复杂,但它确实如此。复杂性源于处理器开始以实模式执行,但该地址(以及所有附近的地址)在实模式下对处理器不可见。因此,它最初以一种相当奇怪的模式执行,从大多数角度来看它处于实模式,但是您似乎执行的地址的一些高位被忽略,而是基本上硬连接到 1,因此物理地址的顶部空间对处理器可见。然后,当您执行远跳转时,处理器会静默切换到“正常”实模式。

BIOS 以实模式启动,但在设置(最小)保护模式环境并切换到保护模式之前,通常只会以这种方式执行一小段时间。从那里,BIOS 执行正常的开机自检,解压 BIOS 并将其复制到实际位于 FFFF:0000 的 RAM 中,切换回实模式并执行附加外围 ROM 中的代码(如果它们被标记)自动执行(通常在进程中切换回保护模式,但在完成后返回实模式)。其中之一通常是硬盘 Controller ,它具有自动从磁盘读取引导块的代码,并执行它以开始加载操作系统等。

关于assembly - x86 从哪个地址开始执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4004493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com