0xffff0 и BIOS - PullRequest
       86

0xffff0 и BIOS

8 голосов
/ 18 июля 2010

Когда компьютер впервые загружается, он начинает работать по физическому адресу 0xffff0.Этот адрес содержит инструкцию jmp для BIOS.

Теперь для моего вопроса я всегда предполагаю, что физические адреса сопоставлены с RAM.Если RAM изначально содержит значения мусора, что именно помещает инструкцию jmp в 0xffff0?Инструкция jmp всегда одна и та же или она разная для разных BIOS?Тогда сопоставляет ли 0xffff0 из ОЗУ в BIOS (что означает «жесткое отображение»)?

Ответы [ 4 ]

20 голосов
/ 18 июля 2010

Верхние 64 КБ или около того отображаются в ПЗУ BIOS, а не в ОЗУ.

6 голосов
/ 18 июля 2010

Взгляните на последовательность загрузки ПК .Как уже ответил Игнасио, он «жестко сопоставлен» с доступной только для чтения памятью BIOS.

5 голосов
/ 20 февраля 2012

Ознакомьтесь с этим руководством Intel:

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf

Перейдите на страницу 9-6 и последующие страницы, все они описывают начальный режим запуска ЦП. Первая извлеченная инструкция от ffffff00 (которая встроена в ПЗУ BIOS):

The first instruction that is fetched and executed following a hardware reset is
located at physical address FFFFFFF0H. This address is 16 bytes below the
processor’s uppermost physical address. The EPROM containing the software-
initialization code must be located at this address.

И помня на этом этапе, он все еще в реальном режиме:

The CS register has two parts: the visible segment selector part and the
hidden base address part. In real-address mode, the base address is normally
formed by shifting the 16-bit segment selector value 4 bits to the left to produce a
20-bit base address. However, during a hardware reset, the segment selector in the
CS register is loaded with F000H and the base address is loaded with FFFF0000H. The
starting address is thus formed by adding the base address to the value in the EIP
register (that is, FFFF0000 + FFF0H = FFFFFFF0H).

А затем посмотрите на рис. 9-3, где находится память 64 КБ - от ffffffff до ffff0000 и указано, что есть EPROM, или системная биография, и, следовательно, не RAM.

enter image description here

См. Рисунок 8.4: http://www.iakovlev.org/index.html?p=946

4 голосов
/ 18 июля 2010

На самом деле, это немного сложнее, чем это.Во-первых, на любом процессоре, начиная с 386, он фактически начинается с fffffff0 (т. Е. 16 байтов меньше верхней части 32-битного адресного пространства).До тех пор, пока процессор сначала не выполнит команду дальнего перехода, он выполняет какое-то специальное отображение, чтобы сделать видимым все 32-битное адресное пространство, даже если он выполняется в реальном режиме.После выполнения дальнего перехода запускается «нормальная» работа в реальном режиме.

В любом случае на аппаратной стороне обычно (Flash) ПЗУ отображается в это место, поэтому, когда он начинает выполняться, он выполняеткод в ПЗУ.То, что запускается для запуска, на самом деле не BIOS, а просто код для распаковки реального BIOS из ПЗУ в ОЗУ, а затем повторного сопоставления ОЗУ с диапазоном адресов BIOS.

...