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

Область верхней памяти доступна в реальном режиме только на процессорах 80286, если включен шлюз A20.

А20 или строка адреса 20 , является одним из электрических линий , которые составляют системную шину в качестве x86 на основе компьютера системы. В частности, линия A20 используется для передачи 21-го бита по адресной шине .

Микропроцессор обычно имеет количество адресных строк, равное логарифму по основанию два его физического адресного пространства . Например, процессору с 4 ГБ физического пространства с байтовой адресацией требуется 32 строки, которые имеют имена от A0 до A31. Строки названы в честь отсчитываемого от нуля номера бита в адресе, который они передают. Самый младший бит является первым и поэтому нумеруется как бит 0 и сигнализируется в строке A0. A20 передает бит 20 (21-й бит) и становится активным, когда адрес достигает 1 МБ или 2 20 .

Обзор [ править ]

Процессоры Intel 8086 , Intel 8088 и Intel 80186 имели 20 адресных линий, пронумерованных от A0 до A19; с ними процессор может получить доступ к 2 20 байтам или 1 МБ. Регистры внутреннего адреса таких процессоров имели всего 16 бит. Для доступа к 20-битному адресному пространству ссылка на внешнюю память была составлена ​​из 16-битного адреса смещения, добавленного к 16-битному номеру сегмента , сдвинутого на 4 бита, чтобы получить 20-битный физический адрес. Результирующий адрес равен сегменту × 16 + смещение . [1]Существует множество комбинаций сегмента и смещения, которые дают один и тот же 20-битный физический адрес. Следовательно, существовали различные способы адресации одного и того же байта в памяти. [2] Например, вот четыре из 4096 различных комбинаций сегмент: смещение, все из которых ссылаются на байт, физический адрес которого равен 0x000FFFFF (последний байт в пространстве памяти 1 МБ):

F000: FFFF
FFFF: 000F
F555: AAAF
F800: 7FFF

В последнем случае увеличение смещения на единицу дает F800: 8000, который является правильным адресом для процессора, но поскольку он преобразуется в физический адрес 0x00100000 (первый байт размером более 1 МБ), процессору потребуется другой адрес. строка для фактического доступа к этому байту. Поскольку в линейке процессоров 8086 такой строки нет, 21-й бит выше, когда он установлен, сбрасывается, в результате чего адрес F800: 8000 «оборачивается» [1] и фактически указывает на физический адрес 0x00000000.

Когда IBM проектировала машину IBM PC AT (1984), она решила использовать новый высокопроизводительный микропроцессор Intel 80286 . 80286 может адресовать до 16 МБ системной памяти в защищенном режиме . Однако ЦП должен был имитировать поведение 8086 в реальном режиме., его режим запуска, чтобы он мог запускать операционные системы и программы, которые не были написаны для защищенного режима. Однако 80286 не обнулял линию A20 в реальном режиме. Следовательно, комбинация F800: 8000 больше не будет указывать на физический адрес 0x00000000, а на адрес 0x00100000. В результате программы, использующие перенос адреса, больше не будут работать. Чтобы сохранить совместимость с такими программами, IBM решила исправить проблему на материнской плате .

Это было достигнуто путем установки логического элемента на линии A20 между процессором и системной шиной, получившей название Gate-A20 . Gate-A20 может быть включен или отключен программно, чтобы разрешить или запретить адресной шине получать сигнал от A20. Он настроен на непередачу для выполнения старых программ, которые полагаются на циклическую передачу. Во время загрузки BIOS сначала включает Gate-A20, когда он подсчитывает и проверяет всю системную память, а затем отключает его перед передачей управления операционной системе.

Первоначально логический вентиль был вентилем, подключенным к контроллеру клавиатуры Intel 8042 . [1] Контроль над этим был относительно медленным процессом. С тех пор были добавлены другие методы, позволяющие более эффективно выполнять многозадачность программ, которым требуется этот цикл с программами, которые обращаются ко всей системной памяти. Есть несколько методов управления линией A20. [3]

Отключение A20 не закроет все обращения к памяти более 1 МБ, только те, которые находятся в диапазонах 1–2 МБ, 3–4 МБ, 5–6 МБ и т. Д. Программное обеспечение реального режима заботилось только о площади чуть выше 1 МБ, поэтому линейки Gate-A20 было достаточно.

Включение линии Gate-A20 - один из первых шагов, которые операционная система x86 в защищенном режиме выполняет в процессе загрузки, часто до того, как управление будет передано ядру из начальной загрузки (например, в случае Linux).

Режим Virtual 8086 , представленный в Intel 80386 , позволяет моделировать циклический переход A20 с использованием средств виртуальной памяти процессора; физическая память может быть отображена на несколько виртуальных адресов. Таким образом, память, отображенная в первый мегабайт виртуальной памяти, может быть снова отображена во втором мегабайте виртуальной памяти. Операционная система может перехватывать изменения в шлюзе A20 и вносить соответствующие изменения в адресное пространство виртуальной памяти, что также делает несущественным эффективность переключения линий шлюза-A20.

Ворота A20 [ править ]

Управление линией A20 было важной функцией на одном из этапов развития архитектуры IBM PC, поскольку она добавляла доступ к дополнительным 65 520 байтам (64 КБ - 16 байтов) памяти в реальном режиме без значительных изменений программного обеспечения.

В том, что, возможно, было «взломом», гейт A20 изначально был частью контроллера клавиатуры на материнской плате, который мог открывать или закрывать его в зависимости от желаемого поведения. [4]

Затвор A20 по-прежнему присутствует на многих современных ПК, и он изначально закрывается сразу после загрузки. Современные операционные системы с защищенным режимом обычно открывают шлюз A20 на ранней стадии процесса загрузки и никогда не закрывают его снова. Такие операционные системы не имеют причин совместимости, чтобы держать его закрытым, и они получают доступ ко всему диапазону доступных физических адресов, открывая его.

Intel 80486 и Pentium добавлен специальный контактный названный A20m # , который , когда утверждал низкие силы бит 20 физического адреса , чтобы быть равным нулю для всех на чипе cache- или внешнего доступа к памяти. Это было необходимо, поскольку 80486 представил кеш-память на кристалле, и поэтому маскирование этого бита во внешней логике было невозможно. Программное обеспечение по-прежнему должно управлять воротами и для этого должно иметь дело с внешними периферийными устройствами ( чипсетом ). [5]

В микроархитектуре Nehalem изменена поддержка шлюза A20 (некоторые источники ошибочно утверждают, что поддержка A20 была удалена). Вместо того, чтобы ЦП имел выделенный вывод A20M #, который принимает сигнал, следует ли маскировать бит A20, он был виртуализирован, так что информация отправляется с периферийного оборудования на ЦП с использованием специальных циклов шины. [ необходима цитата ] С точки зрения программного обеспечения механизм работает точно так же, как и раньше, и операционная система должна по-прежнему программировать внешнее оборудование (которое, в свою очередь, отправляет вышеупомянутые циклы шины в ЦП), чтобы отключить маскировку A20. [ необходима цитата ]

Intel больше не поддерживает шлюз A20, начиная с Haswell . Страница 271 Руководства Intel по системному программированию, том. 3A от июня 2013 г. гласит: «Функциональность A20M # используется в основном более старыми операционными системами и не используется в современных операционных системах. На новых процессорах Intel 64 A20M # может отсутствовать». [6]

Обработчик A20 [ править ]

Обработчик A20 является IBM PC менеджер памяти программное обеспечение , которое контролирует доступ к области верхней памяти (HMA). Эту функциональность обычно предоставляют менеджеры расширенной памяти . Обработчики A20 названы в честь 21-й адресной строки микропроцессора, строки A20.

В DOS у менеджеров HMA, таких как HIMEM.SYS, есть «дополнительная задача» - управлять A20. HIMEM.SYS предоставил API для открытия / закрытия A20. Сама DOS могла бы использовать эту область для некоторых своих потребностей в хранилище, тем самым освобождая более обычную память для программ. Эта функция была включена директивами DOS=HIGHили HIDOS=ONв файле конфигурации CONFIG.SYS .

Затронутые программы [ править ]

С 1980 года обертывание адресов использовалось внутри 86-DOS и MS-DOS для реализации точки входа CALL 5 в стиле CP / M в префиксе программного сегмента (PSP) (который частично напоминает нулевую страницу CP / M ). [7] [8] Это было, в частности, используются программами машины переведенный с CP / M-80 с помощью языка ассемблера переводчиков [7] , как Сиэтл Computer Products " TRANS86 . [9]Обработчик CALL 5, на который ссылается эта точка входа, находится по физическому адресу 0x000000C0 (перекрывая запись для INT 30h и первый байт INT 31h в таблице векторов прерываний реального режима ). [10] [11] [12] Однако, согласно конструкции CP / M-80, 16-битный целевой адрес 8080 / Z80, хранящийся по смещению 6 на нулевой странице, может также сознательно интерпретироваться как размер памяти сегмента. [7] Чтобы эмулировать это в DOS с его схемой адресации сегмент: смещение 8086, 16-битное смещение точки входа удаленного вызова должно соответствовать этому размеру сегмента (например, 0xFEF0), который хранится по смещению 6 в PSP, перекрываясь части ВЫЗОВА 5. [11] [12]Единственный способ согласовать эти требования состоял в том, чтобы выбрать значение сегмента, которое при добавлении к 0xFEF0 дает адрес 0x001000C0, который на 8086 оборачивается до 0x000000C0. [13] [10] [12]

A20 должен был быть отключен, чтобы произошел цикл, и программы DOS, использующие этот интерфейс, работали. Более новые версии DOS, которые могут перемещать части себя в HMA, обычно создают копию точки входа в FFFF: 00D0 в HMA (которая снова разрешается в физический 0x001000C0), так что интерфейс может работать безотносительно к состоянию A20. . [12] [14]

Известно, что одна программа, использующая интерфейс CALL 5, - это DOS-версия компилятора Small-C . [15] Кроме того, служебная программа SPELL в Microsoft Word 3.0 (1987) является одной из программ, для которых требуется настроить соответствующий интерфейс CALL 5. [16] Sun Microsystems " PC-NFS (1993) требует ВЫЗОВ 5 фикс-вверх , а также. [14]

Кроме того, для экономии места в программе [1] некоторые программисты BIOS и DOS использовали уловку , например, чтобы иметь один сегмент, имеющий доступ к данным программы (например, от F800: 0000 до F800: 7FFF, указывающий на физический адреса 0x000F8000–0x000FFFFF), а также данные ввода-вывода (например, буфер клавиатуры), которые были расположены в первом сегменте памяти (с адресами от F800: 8000 до F800: FFFF, указывающими на физические адреса от 0x00000000 до 0x00007FFF).

Этот трюк работает до тех пор, пока код не выполняется в нехватке памяти , первых 64 КБ ОЗУ, условие, которое всегда выполнялось в старых версиях DOS без возможности высокой загрузки.

Когда ядро ​​DOS было перемещено в области более высокой памяти, для программ все больше стала доступна меньшая память, что привело к сбою программ, зависящих от цикла. [17] Исполняемые загрузчики в новых версиях DOS пытаются обнаружить некоторые распространенные типы затронутых программ и либо исправлять их на лету, чтобы они работали также в малой памяти [18], либо загружают их выше первых 64 КБ перед передачей выполнения на им. [18] Для программ, которые не обнаруживаются автоматически, можно использовать LOADFIX [19] или MEMMAX  -L [19] для принудительной загрузки программ выше первых 64 КБ.

Уловка использовалась самим IBM / Microsoft Pascal , а также программами, скомпилированными с его помощью [20] [21] [8] [15], включая Microsoft MASM . [15] Другими часто используемыми утилитами разработки, использующими это, были исполняемые компрессоры, такие как Spacemaker от Realia [18] (написанный Робертом Б.К. Дьюаром в 1982 году и используемый для сжатия ранних версий Norton Utilities [22] [23] [24] [25] ). и Microsoft EXEPACK [17] [18] [1] [26] [15] (написаноРубен Борман в 1985 г.), а также эквивалентную опцию / E [XEPACK] в Microsoft LINK 3.02 и более поздних версиях. [17] [1] [26] [24] Программы, обработанные с помощью EXEPACK, отображали бы сообщение об ошибке «Упакованный файл поврежден». [1] [26]

Существуют различные сторонние утилиты для изменения сжатых исполняемых файлов, либо заменяя проблемные процедуры распаковки, либо пытаясь расширить и восстановить исходный файл.

Современные загрузчики старых версий BIOS (например, GNU GRUB ) используют строку A20. [27] Загрузчики UEFI используют 32-битный защищенный режим или 64-битный длинный режим .

См. Также [ править ]

  • Совместимость ошибок [18]
  • Компьютерное хранилище
  • Область верхней памяти (HMA)
  • LOADFIX (директива CONFIG.SYS) (PTS-DOS)
  • Загрузчики

Ссылки [ править ]

  1. ^ a b c d e f g Пол, Маттиас Р. (02.02.2002). «Treiber Dynamisch nachladen (Внутрисегментное смещение-перемещение из загруженных TSR в HMA)» [Динамическая загрузка драйверов (перемещение внутрисегментного смещения для загрузки TSR в HMA)] (на немецком языке). Группа новостей :  de.comp.os.msdos . Архивировано 9 сентября 2017 года . Проверено 2 июля 2017 .(NB. Дается исчерпывающий обзор истории и «природы» HMA, а также неочевидных конструктивных ограничений, которые необходимо соблюдать при разработке расширений резидентной системы, загружаемых в HMA, некоторые из которых вызваны шлюзом A20. Это также описывает, как решить эти проблемы, используя заглушки , бэкдоры и перемещение внутрисегментного смещения , метод, используемый драйверами DR-DOS, способными перемещаться в HMA, и аналогичный (более сложному) методу, используемому в качестве основы для динамических мертвых исключение кода в авторском драйвере FreeKEYB.)
  2. ^ Пол, Матиас Р. (2002-04-11). «Re: [fd-dev] ОБЪЯВЛЕНИЕ: CuteMouse 2.0 alpha 1» . freedos-dev . Архивировано 21 февраля 2020 года . Проверено 21 февраля 2020 .
  3. ^ «Линия A20» . OSDev Wiki .
  4. ^ Шэнли, Том; Андерсон, Дон (1995). Мошенничество, Джон (ред.). Системная архитектура ISA (3-е изд.). Mindshare, Inc. / Издательская компания Аддисон-Уэсли . стр.  79 -80. ISBN 0-201-40996-8. ISBN 978-0-201-40996-3 .  [1]
  5. ^ Shanley, Том (1996). Архитектура программного обеспечения защищенного режима . Тейлор и Фрэнсис . п. 60. ISBN 0-201-55447-X.
  6. ^ Руководство системного программиста Intel Vol. 3A с июня 2013 года .
  7. ^ a b c 86-DOS - Дисковая операционная система для 8086 - Руководство программиста (PDF) . Версия 0.3 (Предварительная ред.). Сиэтл, Вашингтон, США: Seattle Computer Products, Inc. 1980. стр. 7, 17. Архивировано из оригинала (PDF) 23.06.2019 . Проверено 13 сентября 2011 . […] Эта форма предназначена для упрощения перевода программ 8080 / Z80 в код 8086 и не рекомендуется для новых программ. […] Объем памяти. Это количество байтов, доступных в сегменте программы. […] (41 стр.)
  8. ^ a b Летвин, Джеймс (1985-04-10). «Способ и операционная система для выполнения программ в многомодовом микропроцессоре» . Microsoft . US06722052, US4779187A. Архивировано 18 февраля 2020 года . Проверено 23 сентября 2018 . […] Некоторые программы, написанные для 8086, полагаются на [перенос адреса] для правильной работы. К сожалению, в реальном режиме 80286 ячейки памяти превышают 1 мегабайт и не привязаны к ячейкам с низким объемом памяти. Следовательно, программы, в том числе написанные на MicroSoft PASCAL, и программы, использующие функцию «Вызов 5» MS-DOS, не будут работать в стандартной системе 80286. […] Например, программы PASCAL не загружаются впамять меньше 64 КБ , а специальная инструкция размещается в нижних ячейках памяти выше 1 мегабайта, например, по адресу 100000h или 100010h. […] [2]
  9. ^ Тейлор, Роджер; Леммонс, Фил (июнь 1982 г.). «Переход вверх - Часть 1: Переводчики - Использование программ перевода для переноса программ CP / M-86 в CP / M и MS-DOS» (PDF) . БАЙТ . Vol. 7 нет. 6. BYTE Publications Inc., стр. 321–322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344 [342, 344]. ISSN 0360-5280 . CODEN BYTEDJ . Архивировано (PDF) из оригинала на 2020-01-16 . Проверено 15 января 2020 . […] Получение доступа к CP / M-86    […] Получение доступа к CP / M-86 требует помещения кода функции в регистр CL, помещения параметра байта в регистр DL или помещения параметра слова в регистр DX, помещения сегмента данных в регистр DS (данные сегмент обычно не изменяется для преобразованной программы), и выполнение программного прерывания INT # 224 . Результат возвращается в регистр AL, если это байтовое значение; если результатом является значение слова, оно возвращается в регистры AX и BX. Значения двойного слова возвращаются со смещением в регистрах BX и сегментом в регистре ES. Таким образом, преобразование программ из CP / M-80 в CP / M-86 требует замены вызова в ячейку 5 программным прерыванием INT # 224. Еще одно необходимое изменение связано с теплой загрузкой.. В CP / M-80 доступ к горячей перезагрузке можно получить с помощью системного вызова с кодом функции 0 для перехода к местоположению 0. CP / M-86, однако, не поддерживает переход к местоположению 0. В результате , вы должны изменить эту программу выхода в переведенной программе, чтобы программа работала правильно. При условии, что вызов местоположения 5 заменен на INT # 224, что выполнено изменение горячей загрузки и что регистры отображаются правильно, не должно возникнуть особых проблем с получением транслированной программы для доступа к системным функциям CP / M-86. . […] Получение доступа к MS-DOS […] Хотя MS-DOS имеет «предпочтительный» механизм с помощью программного прерывания, INT # 33для доступа к системе предусмотрен дополнительный механизм для «уже существующих» программ, который совместим с соглашениями о вызовах CP / M-80, по крайней мере, для функций в диапазоне 0-36. Что касается системных вызовов в допустимом диапазоне функций, программисту не нужно ничего делать с транслированными программами, чтобы заставить их работать под MS-DOS, кроме как правильно отображать регистры. MS-DOS также поддерживает функцию горячей загрузки CP / M-80. Переход к позиции 0 в MS-DOS выполняет программное прерывание INT # 32 , которое функционально является концом программы и нормальным способом выхода из программы. […] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] » (13 страниц)»
  10. ^ а б Шеперс, Арне (1991). «Kapitel 5: EXEC im Detail - Program Segment Prefix (PSP)». DOS 5 für Programmierer: Die endgültige Referenz (на немецком языке) (1-е изд.). Addison Wesley (Deutschland) GmbH . С. 148–151, 971–972 [149, 971–972]. ISBN 3-89319-350-2. (1123 + V страниц, складной, 5,25 "-флоппи)
  11. ^ a b «Формат префикса сегмента программы (PSP)» . INTER61 . 2000. Архивировано 17 февраля 2020 года . Проверено 19 декабря 2019 .
  12. ^ a b c d Necasek, Михал (13 сентября 2011 г.). "Кому вообще нужен перенос адреса?" . OS / 2 Музей . Архивировано 19 февраля 2020 года . Проверено 19 февраля 2020 . […] 86-DOS и, следовательно, PC DOS / MS-DOS , использовали хитрый трюк. Байт по смещению 5 PSPсодержит код операции дальнего вызова (9Ah); слово со смещением 6 PSP содержало соответствующее значение, указывающее размер сегмента программы, а также смещение части дальнего вызова. Слово со смещением 8, которое служило сегментной частью удаленного вызова, было создано таким образом, что в сочетании со смещением оно могло быть циклическим (хорошо понятная особенность 8086CPU) и укажите адрес 0: C0h, который содержит вектор прерывания 30h. […] Проблема с интерфейсом совместимости возникает, когда загруженная программа фактически имеет менее 64 КБ. Если это произойдет, слово со смещением PSP 6 может не содержать правильного значения, но интерфейс CALL 5 все равно будет работать; команда со смещением 5 будет CALL 0: C0h, что сделает сообщаемый размер программного сегмента C0h. Непонятно, зачем DOS это делает; это кажется ошибкой в ​​DOS 5.0 и более поздних версиях, так как DOS 4.0 и более ранние версии просто корректируют часть сегмента так, чтобы она оборачивалась до 0: C0h. Это работает, пока размер сегмента программы выровнен по абзацу, и так оно и будет. […]
  13. ^ Нортон, Питер . Слишком сложно и странно объяснять. Отсутствует или пусто |title=( справка )
  14. ^ a b OpenDOS 7.01 MRS: IBMBIO \ BIOSINIT.A86 SetupHMA . Caldera, Inc. 16 апреля 1997 г. DOSSRC.ZIP. […] BIOSINIT.A86 1.40 93/11/11 12:25:29 […] Изменения заголовка VDISK […] BIOSINIT.A86 1.39 93/11/08 23:19:22 […] SetupHMA выполняет инициализацию CALL5 […] теперь исправлен JMPF в hi-памяти для ссылки CALL5 для PC-NFS […]
  15. ^ a b c d Necasek, Михал (2018-03-16). «Ворота A20: это не было WordStar» . OS / 2 Музей . Архивировано 23 сентября 2018 года . Проверено 23 сентября 2018 .
  16. ^ Парсонс, Джефф (2018-05-27) [1987-12-01, 1987-08-02]. "Кто-то заклинание на меня" . PCjs . Архивировано 29 января 2019 года . Проверено 21 апреля 2019 .
  17. ^ a b c Шульман, Эндрю; Браун, Ральф Д .; Макси, Дэвид; Michels, Raymond J .; Кайл, Джим (1994) [ноябрь 1993]. Уильямс, Эндрю (ред.). Недокументированная DOS: Руководство программиста по зарезервированным функциям и структурам данных MS-DOS - расширено и включает MS-DOS 6, Novell DOS и Windows 3.1 . Серия программирования Эндрю Шульман (1-е издание, 2-е изд.). Ридинг, Массачусетс, США: издательство Addison Wesley Publishing Company . стр.  349 -350. ISBN 0-201-63287-X. ISBN 978-0-201-63287-3 . […] Если оставить строку A20 включенной, это вызовет проблемы с программами, которые ожидают циклического перехода […] Одной из таких программ была подпрограмма распаковки собственного компоновщика Microsoft, изначально включенная в любой файл, который был расширен EXEPACK для уменьшения его размера! По словам Филиппа Гарднера, автора условно-бесплатного программного обеспечения DOSMAX UMB и ветеранов в области разборки DOS, печально известное сообщение об ошибке «Packed File Corrupt», которое начало появляться повсюду вскоре после появления DOS 5.0, напрямую связано с тем, что ошибка Линия A20 включена, и исходная процедура распаковки зависела от эффекта зацикливания сегментов для правильного расширения сжатых файлов. […] (xviii + 856 + vi страниц, 3,5-дюймовый диск [17] ). Исправление: [18] [19] (NB. На странице 350 в книге есть подробное описание внутренней работы проблемной процедуры распаковки EXEPACK.)
  18. ^ a b c d e Пол, Маттиас Р. (2002-10-07) [2000]. «Re: masm .com (PSP), связанная с проблемой» . Группа новостейalt.lang.asm . Архивировано 3 сентября 2017 года . Проверено 3 сентября 2017 . […] DR Concurrent DOS 386 (с 1988-07-08) будет загружать EXEPACKed программы выше отметки 64 КБ , то есть вне « самой низкой памяти », путем расширения блока памяти, содержащего среду программы […] DR DOS 5.0 + всегда загружает программы в формате .EXE без каких-либо исправлений, а также (с 1990-05-25).COM -форматирование программ, сжатых с помощью SpaceMaker - и, следовательно, начинающихся с 9Ch 55h (PUSHF / PUSH BP) - выше отметки 64 КБ, чтобы избежать ошибки зацикливания EXEPACK. Он делает это путем расширения блока памяти, содержащего среду программы, с 14 декабря 1989 г. он даже при необходимости выделяет несколько заполнителей. Этот код расширения среды отключается , если имя родительской программы, которые хранятся в MCB является «WIN» для повышения производительности при WIN.COM начинается KERNEL.EXE (0 переезд пунктов). […] Ядро MS-DOS / PC DOS 5.0 + […] сканирует различные последовательности кода в исполняемых файлах формата .EXE и применяет исправления для различных версий файлов EXEPACK, чтобы позволить им работать в самой низкой памяти (когда DOS вHMA ), то есть сегмент нагрузки <64 Кб. В противном случае они будут отображать «Упакованный файл поврежден». Код проверяет, что точка входа кода […] не <0002h […], а затем читает СЛОВО, непосредственно предшествующее точке входа […]. Если это СЛОВО читается как 5242h («RB»), предполагается, что файл EXEPACKED. Затем код ищет одну из нескольких комбинаций кодовых последовательностей на смещениях от этой сигнатуры "RB". […] Ядро MS-DOS 5.0+ […] сканирует неизвестный класс .COMисполняемые файлы. Если их подписи найдены в файле, переменная обратного отсчета A20 по смещению 18h в таблице информации о дисковом буфере (см. Таблицу «Информация о дисковом буфере DOS 5.0-6.0») будет установлена ​​на 10, что приведет к отключению A20 после INT. 21h вызывает это количество вызовов INT 21h. Предположительно, этот класс программ требует, чтобы A20 был отключен на некоторое время после его начала выполнения. (Аналогичные действия происходят при входе в INT 21h / AH = 25h и AH = 49h.) […]
  19. ^ a b Пол, Маттиас Р. (30 июля 1997 г.) [18 июня 1996 г., 01 мая 1994 г.]. "V.4. Bessere Speicherausnutzung mit selbsthochladenden Programmen". NWDOS-TIPs - Советы и приемы для Novell DOS 7, с подробным описанием, ошибками и обходными путями . MPDOSTIP . Выпуск 157 (на немецком языке) (3-е изд.). Архивировано 4 ноября 2016 года . Проверено 6 августа 2014 .(NB. Приведенная ссылка указывает на HTML-конвертированную версию NWDOSTIP.TXT, которая является частью MPDOSTIP.ZIPколлекции.) [20]
  20. ^ Компилятор Паскаля (PDF) . Серия языков персонального компьютера (1-е изд.). Международная корпорация бизнес-машин . Август 1981 г. Архивировано (PDF) из оригинала 29 мая 2020 года . Проверено 23 сентября 2018 .
  21. ^ «NAME ENTX - Microsoft MS-DOS Computer Pascal runtime system control» . Версия 1.00. Microsoft Corp. 1981. Архивировано 23 февраля 2020 года . Проверено 23 февраля 2020 . […] DX - окончательный DS (может быть отрицательным) […] окончательное значение DS (может быть отрицательным) […]
  22. ^ «Экспертный отчет Роберта Б.К. Дьюара в ответ на отчет Кеннета Д. Крюса». Cambridge University Press и др. Против Паттона и др., Filing 124, Supplemental Initial Disclosures by Cambridge University Press, Oxford University Press, Inc., Sage Publications, Inc. - Cambridge University Press, Oxfort University Press, Inc. и Sage Publications, Inc. против Марка П. Беккера, президента Университета штата Джорджия, и др., Гражданский иск № 1: 08-CV-1425-ODE (судебный документ). Окружной суд США Северного округа Джорджии, Атланта. п. 18. Приложение A. Архивировано 1 мая 2018 года . Проверено 23 апреля 2019 . […] SPACEMAKER и TERMULATOR, стандартное программное обеспечение для IBM PC (Утилита сжатия файлов PC DOS и эмулятор VT-100 ), продаваемая Realia, Inc., RBK Dewar (1982-1983), язык ассемблера 8088, 8000 строк […]
  23. ^ Realia, Inc. (январь 1983). «Если вы используете DOS, вам нужна эта программа» . Журнал ПК (реклама). Издательство Ziff-Davis . 2 (9): 417. Архивировано 22 апреля 2019 года . Проверено 22 апреля 2019 .
  24. ^ a b Дьюар, Роберт Берридейл Кейт (1984-03-13). «DOS 3.1 ASMB (еще одна глупая ошибка Microsoft)» . [email protected] . Архивировано 01 мая 2018 года . Проверено 23 апреля 2019 .[…] Параметр / E компоновщика должен генерировать EXE-файл, который логически эквивалентен несжатому EXE-файлу. Текущая версия […] приводит к затиранию AX. AX при входе в EXE-файл имеет определенное значение (он указывает правильность диска для параметров), поэтому он должен быть передан в несжатый образ. Учитывая это одно очень очевидное нарушение правил интерфейса, могут быть и другие, я не удосужился исследовать его дальше […] Я написал программу Realia SpaceMaker, которая делает то же самое, что и опция EXEPACK (но, разумеется, делает нет этого конкретного […]
  25. ^ Necasek, Михал (2018-04-30). "Realia SpaceMaker" . OS / 2 Музей . Архивировано 27 января 2019 года . Проверено 22 февраля 2019 .
  26. ^ a b c Necasek, Михал (23.03.2018). "EXEPACK и ворота A20" . OS / 2 Музей . Архивировано 13 ноября 2018 года . Проверено 20 апреля 2019 .
  27. ^ "Линия A20 - OSDev Wiki" . wiki.osdev.org . Проверено 10 сентября 2020 .

Дальнейшее чтение [ править ]

  • Брауэр, Андрис Эверт . «А20 - боль из прошлого» . Архивировано 9 сентября 2017 года . Проверено 9 сентября 2017 .
  • Коллинз, Роберт Р. (2001). «A20 / Сбросить аномалии» . Архивировано 9 сентября 2017 года . Проверено 9 сентября 2017 .
  • Некасек, Михал (30.01.2018) [28.01.2018, 26.01.2018]. "WordStar Again" . OS / 2 Музей . Архивировано 28 июля 2019 года . Проверено 28 июля 2019 .