ЗАГРУЗИТЬ


Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Loadall это общее название для двух различных недокументированных машинных инструкций от Intel 80286 и Intel 80386 процессоров, которые позволяют получать доступ к областям внутреннего состояния процессора, которые обычно вне IA-32 API сферы, как регистры кэша дескрипторов . 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) , 1988-08-17) [4] драйверы в MS-DOS , Uniform Software Systems ' The Extender (1985) и The Connector (1985) для Lotus 1-2-3 , Above Disk (1986) [5] ( LIMulator от Above Software (ранее Tele-Ware West aka Los Angeles Securities Group ), который преобразовывал пространство на жестком диске или увеличивал память в расширенную ), а OS / 2 1.0 [3] [1] и 1.1 [6] использовали инструкцию 286 LOADALL. DOS 3.3 и 4.0 зарезервировали 102-байтовый буфер в 0070: 0100h (который обычно был занят DOS BIOSdata), чтобы не было необходимости сохранять и восстанавливать его для LOADALL. EMM386.EXE от Microsoft обрабатывает инструкции 286 и 386 LOADALL в своем обработчике недопустимого кода операции. [7] Изучение кода монитора виртуальной машины в Windows / 386 2.10 показывает, что он использует как 286 [ необходима цитата ], так и еще менее известный вариант 386 [ необходима цитата ] . Microsoft HIMEM.SYS версии 2.06 [8] также использовал LOADALL для быстрого копирования в расширенную память и из нее на 286 системах.

Еще одно интересное применение Loadall, изложенных в книге Дизайн OS / 2 , [9] было бы разрешить запуск прежних программ реального режима в защищенном режиме 16-битной, так как используются Digital Research «s Параллельная DOS 286 , так как 1985, [10] [11] [12], а также FlexOS 286 [13] и IBM 4680 OS [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 с введением Intel 64 реализации AMD64. [18]

80286

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

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

80386

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

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

  • Параллельный DOS 286
  • FlexOS 286
  • ОС IBM 4680

использованная литература

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

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

  • IBM Operating System / 2 Технический справочник - Семейство программирования (PDF) . 1 (1-е изд.). IBM . Сентябрь 1987 [1986]. Архивировано (PDF) из оригинала 03.01.2017.
  • Чаппелл, Джефф (январь 1994). Шульман, Эндрю; Педерсен, Аморетта (ред.). Внутреннее устройство DOS . Серия программирования Эндрю Шульман (1-е издание, 1-е изд.). Издательство Эддисон Уэсли . С. 4, 21, 100–106, 127–129. ISBN 978-0-201-60835-9.(xxvi + 738 + iv страниц, 3,5 дюйма [9] [10] ) Исправления: [11] [12] [13]
  • Чаппелл, Джефф (2008-10-03) [1997-03-18]. «Странные вещи, которые LINK знает о процессорах 80x86» . Архивировано 21 апреля 2019 года . Проверено 21 апреля 2019 .
  • Некасек, Михал (13 декабря 2014 г.). «Любопытные инструкции» . OS / 2 Музей . Архивировано 21 апреля 2019 года . Проверено 21 апреля 2019 .
  • Стиллер, Андреас (1990). "Bitter für 32-Bitter". c't - магазин компьютерной техники (на немецком языке). Vol. 1990 г. 8. п. 202.
  • Джуффа, Норберт; Сиринг, Питер (1990). «Wege über die Mauer. Loadall - Расширенная память в реальном режиме для 80286». c't - магазин компьютерной техники (на немецком языке). Vol. 1990 г. 11. С. 362–366.
Источник « https://en.wikipedia.org/w/index.php?title=LOADALL&oldid=1013481509 »