stringtranslate.com

ЗАГРУЗИТЬ

LOADALL — это общее название для двух разных недокументированных машинных инструкций процессоров Intel 80286 и Intel 80386 , которые обеспечивают доступ к областям внутреннего состояния процессора, которые обычно находятся за пределами области действия API IA-32 , например, к регистрам кэша дескрипторов . LOADALL для процессоров 286 имеет кодировку 0Fh 05h, [1] , а LOADALL для процессоров 386 — 0Fh 07h. [2]

Оба варианта, как следует из названия, загружают все внутренние регистры ЦП за одну операцию. LOADALL обладал уникальной способностью настраивать видимую часть сегментных регистров (селектор) независимо от их соответствующей кэшированной части, что позволяло программисту переводить ЦП в состояния, не разрешенные официальной моделью программирования.

Применение

В качестве примера полезности этих методов можно отметить, что LOADALL может настроить ЦП на разрешение доступа ко всей памяти из реального режима без необходимости переключения его в нереальный режим (который требует переключения в защищенный режим , доступа к памяти и, наконец, переключения обратно в реальный режим). режим). Такие программы, как версии RAMDRIVE.SYS (1985) до XMS , [3] [1] [4] SMARTDRV.SYS (1986) [4] , а также HIMEM.SYS (2.03, 1988-08-04; 2.04). , 17 августа 1988 г.) [4] драйверы в MS-DOS , The Extender (1985) и The Connector (1985) Uniform Software Systems для Lotus 1-2-3 , Upper Disk (1986) [5] ( LIMulator компанией Upper Software (ранее Tele-Ware West, также известной как Los Angeles Securities Group), которая преобразовывала пространство на жестком диске или расширенную память в расширенную память ), а OS/2 1.0 [3] [1] и 1.1 [6] использовали инструкцию 286 LOADALL. DOS 3.3 и 4.0 зарезервировали 102-байтовый буфер по адресу 0070:0100h (который обычно был занят данными DOS BIOS ), так что не было необходимости сохранять и восстанавливать его для LOADALL. Microsoft EMM386.EXE использует в своем обработчике недопустимого кода операции инструкции LOADALL 286 и 386 . [7] Исследование кода монитора виртуальной машины в Windows/386 2.10 показывает, что он использует как 286 [ нужна цитата ] , так и ещё менее известный вариант 386 [ нужна цитата ] . Microsoft HIMEM.SYS версии 2.06 [8] также использовала LOADALL для быстрого копирования в расширенную память и из нее в 286 системах.

Еще одно интересное использование LOADALL, изложенное в книге « Проектирование OS/2» [ 9], могло бы заключаться в том, чтобы позволить запускать бывшие программы реального режима в 16-битном защищенном режиме, который использовался в Concurrent DOS 286 компании Digital Research с тех пор . 1985, [10] [11] [12] , а также ОС FlexOS 286 [13] и IBM 4680 [14] [15] с 1986 года. Пометка всех кешей дескрипторов в GDT и LDT как «отсутствующие» позволила бы работать система для перехвата перезагрузок регистров сегментов, а также попыток выполнения «арифметики сегментов», специфичной для реального режима, и эмуляции желаемого поведения путем обновления дескрипторов сегментов (снова LOADALL). Однако этот « режим эмуляции 8086 » для 80286 был слишком медленным, чтобы быть практичным. Более того, от этой идеи пришлось отказаться из-за ошибок в некоторых ранних процессорах Intel 80286 до перехода на степпинг E-2 . [10] [11] [13] В результате OS/2 1.x – а также Windows в «стандартном» режиме – должны были запускать программы DOS в реальном режиме. Тем не менее идея не пропала; это привело к тому, что Intel представила виртуальный режим 8086 для 80386, что позволило наконец реализовать « коробки DOS » относительно эффективным и документированным способом.

Поскольку LOADALL не выполнял никаких проверок достоверности данных, загружаемых в регистры процессора, можно было загрузить состояние процессора, в которое невозможно было нормально войти, например, используя реальный режим (PE=0) вместе с подкачкой (PG=1). ) на процессорах класса 386. [2]

Внутрисхемный эмулятор (ICE) — это инструмент, используемый для низкоуровневой отладки. В Intel 80386 установка недокументированного контакта в позиции B6 приводит к тому, что микропроцессор останавливает выполнение и переходит в режим ICE. Микропроцессор сохраняет все свое состояние в области памяти, изолированной от обычной системной памяти. Расположение этой области подходит для инструкции LOADALL, и эта инструкция используется кодом ICE для возврата к нормальному выполнению.

В более поздних процессорах это превратилось в режим управления системой (SMM). В SMM инструкция RSM используется для загрузки полного состояния ЦП из области памяти. Структура этой области памяти аналогична той, которая используется инструкцией LOADALL. [16] Инструкция LOADALL в стиле 386 также может быть выполнена на 486, но только в режиме SMM. В более поздних процессорах ее роль взяла на себя инструкция RSM, с другой кодировкой.

Codeview 3.0 от Microsoft и Turbo Debugger 2.0 от Borland правильно декодируют инструкции LOADALL 286 и 386. [1]

Поскольку две инструкции LOADALL никогда не документировались и не существуют в более поздних процессорах, коды операций были повторно использованы в архитектуре AMD64 . [17] Код операции для инструкции 286 LOADALL, 0F05, стал инструкцией AMD64 SYSCALL; инструкция 386 LOADALL, 0F07, стала инструкцией SYSRET. Эти определения были реализованы даже на процессорах Intel с появлением реализации AMD64 в Intel 64 . [18]

80286

Код операции 0F05. Инструкция считывает данные с адресов 0x00800–0x00866 независимо от содержимого регистров сегмента.

Инструкцию 80286 LOADALL нельзя использовать для переключения из защищенного обратно в реальный режим [19] (она не может очистить бит PE в MSW). Однако использование инструкции LOADALL позволяет вообще избежать необходимости переключения в защищенный режим.

80386

Код операции 0F07. Инструкция загружает данные с адреса ES:EDI. На самом деле он использует ES, а не дескриптор ES.

Смотрите также

Рекомендации

  1. ^ abcd Шульман, Эндрю; Михелс, Раймонд Дж.; Кайл, Джим; Патерсон, Тим ; Макси, Дэвид; Браун, Ральф Д. (1990). Недокументированная DOS: Руководство программиста по зарезервированным функциям и структурам данных MS-DOS (1-е изд.). Аддисон-Уэсли . стр. 14–15. ISBN 978-0-201-57064-9.(xviii+694+viii страницы, 2 дискеты размером 5,25 дюйма [1]) Ошибки: [2][3]
  2. ^ аб Ван Гиллуве, Фрэнк (1994). Недокументированный ПК (1-е изд.). Аддисон-Уэсли . стр. 62–70. ISBN 0-201-62277-7.[4]
  3. ^ аб Дункан, Рэй; Петцольд, Чарльз ; Бейкер, М. Стивен; Шульман, Эндрю; Дэвис, Стивен Р.; Нельсон, Росс П.; Мут, Роберт (1990). Расширение DOS (1-е изд.). Ридинг, Массачусетс, США: Addison-Wesley Publishing Company, Inc., стр. 100–103. ISBN 0-20155053-9.
  4. ^ abc Necasek, Михал (27 октября 2013 г.). «Подробнее о LOADALL и OS/2». Музей OS/2 . Архивировано из оригинала 17 октября 2018 г. Проверено 17 октября 2018 г.
  5. ^ Коллинз, Роберт Р. (октябрь 1991 г.). «Инструкция LOADALL». TECH Specialist — журнал для продвинутых разработчиков ПК . 2 (10). Лоуренс, Канзас, США: R&D Publications, Inc. ISSN  1049-913X. Архивировано из оригинала 20 февраля 2020 г. Проверено 17 октября 2018 г.[5] (Примечание. Вскоре журнал был переименован в «Журнал разработчиков DOS», а затем и в «Журнал разработчиков Windows/DOS» (ISSN 1059-2407).)
  6. ^ Некасек, Михал (18 марта 2011 г.). «HIMEM.SYS, нереальный режим и LOADALL». Музей OS/2 . Архивировано из оригинала 3 января 2017 г. Проверено 03 января 2017 г.
  7. ^ Шульман, Эндрю; Браун, Ральф Д .; Макси, Дэвид; Михелс, Раймонд Дж.; Кайл, Джим (1994) [ноябрь 1993 г.]. Уильямс, Эндрю (ред.). Недокументированная DOS: Руководство программиста по зарезервированным функциям и структурам данных MS-DOS, расширенное за счет включения MS-DOS 6, Novell DOS и Windows 3.1 . Серия программ Эндрю Шульмана (1-е издание, 2-е изд.). Ридинг, Массачусетс, США: Издательство Addison Wesley Publishing Company . п. 42. ИСБН 0-201-63287-Х.(xviii+856+vi страниц, 3,5-дюймовая дискета [6]) Ошибки: [7][8]
  8. ^ «Исходный код Microsoft HIMEM.SYS 2.06» .
  9. ^ Дейтел, Харви М.; Коган, Майкл С. (1992). Проект OS/2 . Аддисон-Уэсли . ISBN 0-201-54889-5.
  10. ^ Аб Фостер, Эдвард (13 мая 1985 г.). «Super DOS ждет новый 80286 - Concurrent DOS 286 - отложен до тех пор, пока Intel не обновит чип - предлагает мощность Xenix и совместимость с IBM PC». Инфомир . 7 (19). Медиа-группа InfoWorld : 17–18. ISSN  0199-6649. Архивировано из оригинала 21 апреля 2019 г. Проверено 21 апреля 2019 г.
  11. ^ Аб Фостер, Эдвард (26 августа 1985 г.). «Intel демонстрирует новый чип 80286 — будущее Concurrent DOS 286 от DRI все еще неясно после исправления процессора». Инфомир . 7 (34). InfoWorld Media Group : 21. ISSN  0199-6649. Архивировано из оригинала 21 апреля 2019 г. Проверено 21 апреля 2019 г.
  12. ^ «Конкурентная DOS 68K 1.2 — Комплект разработчика для Motorola VME/10 — Диск 2» . 6 августа 1986 г. [8 апреля 1986 г.]. Архивировано из оригинала 3 апреля 2019 г. Проверено 13 сентября 2018 г.(Примечание. Этот пакет также включает в себя некоторые заголовочные файлы из Concurrent DOS 286 , включая STRUCT.H, в котором явно упоминается LOADALL для «эмуляции 8086».)
  13. ^ ab Дополнение FlexOS для компьютеров на базе Intel iAPX 286 (PDF) . 1.3 (1-е изд.). Digital Research, Inc., ноябрь 1986 г. Архивировано (PDF) из оригинала 21 апреля 2019 г. Проверено 14 августа 2018 г.
  14. ^ Кальво, Мелисса; Форбс, Джим (10 февраля 1986 г.). «IBM будет использовать операционную систему DRI». Инфомир . Медиа-группа InfoWorld . Архивировано из оригинала 21 апреля 2019 г. Проверено 6 сентября 2011 г.
  15. ^ «IBM выбирает Concurrent DOS-286 для розничной системы PC AT» (PDF) . Европейское обозрение (18). Цифровые исследования : 1 марта 1986 г. Архивировано (PDF) из оригинала 03 апреля 2019 г. Проверено 15 сентября 2018 г.
  16. ^ Коллинз, Роберт Р. (январь 1997 г.). «Режим управления системой Intel». Архивировано из оригинала 3 января 2017 г. Проверено 03 января 2017 г.
  17. ^ Некасек, Михал (18 октября 2013 г.). «LOADALL снова наносит удар». Музей OS/2 . Архивировано из оригинала 3 января 2017 г. Проверено 27 января 2016 г.
  18. ^ «Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 2B» (PDF) . Корпорация Интел . Декабрь 2015 г. Архивировано (PDF) из оригинала 21 апреля 2019 г. Проверено 27 января 2016 г.
  19. ^ Слейтер, Майкл (октябрь 1987 г.). «Секретная инструкция 286 LOADALL позволяет получить доступ к расширенной памяти в реальном режиме». Отчет микропроцессора .

дальнейшее чтение