2015-11-13 3 views
1

Штырь сброса 8086 и другие процессоры вызовут CS: IP для указания на FFFF: 0000, который является самым низким 16 байтами памяти. В этом месте есть инструкция перехода в другое место в памяти для инициализации процессора.Процедура RESET 8086

Мой вопрос: зачем указывать на последний раздел, а затем умышленно переходить в другое место? Почему производители процессоров не перезагружают CS: IP до 0000: 0000? Затем они могут написать некоторые начальные инструкции без каких-либо прыжков!

Это не имеет смысла?

+0

Связанный: [Почему 8085 начинается с 00000, тогда как 8086 начинается с FFFF0] (http://stackoverflow.com/questions/10380388/why-does-8085-start-from-00000-while-8086-from-ffff0) (Я бы поклялся, что в последнее время на одном из сайтов-сестрах был еще один вопрос, но я не могу вспомнить, какой из них, и вопрос был пограничным вне темы, поэтому, возможно, исчезло) –

+1

_FFFF: 0000, который самые низкие 16 байт памяти_? Вы уверены, что это самое низкое. Кажется мне, что сопоставляется с FFFF0 (последние 16 байт) области 1mb. –

+1

Вероятно, следует отметить, что при выполнении большинства 386 начинается с 'F000: FFF0'. В реальном режиме, который также отображается в FFFF0, но большинство 386s запускаются в нереальном режиме, где сегмент F000 связан с дескриптором, который отображается на базовый адрес FFFF0000. При добавлении к смещению FFF0 он дает адрес FFFFFFF0, который на 16 байт ниже метки 4gb. –

ответ

6

Это все унаследованный интерфейс :)

В 0000: 0000 есть IVT (прерывание таблицы векторов), который обрабатывает прерывания (INT хх-команд) с массива (таблицы адресов), вероятно, доступ к расширенной call dword ptr [interrupt# * 4] intro (nMI Interrupt = «Non maskable interrupt», который не может быть закрыт командой CLI) = [2*4] и т. д. ,

В FFFF: 0000 или F000: FFF0 (последние 16 байт до 1 мегабайта) есть (кэшированная копия) материнской платы 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.