Самостоятельный переезд
В компьютерном программировании самоперемещающаяся свои собственные зависящие от адреса инструкции и данные и, следовательно , программа — это программа, которая при запуске перемещает может быть загружена в память по любому адресу. [1] [2] Во многих случаях самоперемещающийся код также является формой самомодифицирующегося кода .
Обзор
[ редактировать ]Самостоятельное перемещение аналогично процессу перемещения , используемому компоновщиком - загрузчиком при копировании программы из внешнего хранилища в основную память; разница в том, что сама загруженная программа, а не загрузчик операционной системы или оболочки перемещение выполняет .
Одна из форм самоперемещения происходит, когда программа копирует код своих инструкций из одной последовательности ячеек в другую последовательность ячеек в основной памяти одного компьютера, а затем передает управление процессору от инструкций, найденных в исходных ячейках памяти. инструкциям, найденным в местах назначения памяти. Таким образом, данные, с которыми работает алгоритм программы, представляют собой последовательность байтов, определяющих программу.
Статическое самостоятельное перемещение обычно происходит во время загрузки (после того, как операционная система загрузила программное обеспечение и передала ему управление, но еще до завершения его инициализации), иногда также при изменении конфигурации программы на более позднем этапе во время выполнения . [3] [4]
Примеры
[ редактировать ]Загрузчики
[ редактировать ]Например, самоперемещение часто используется на ранних стадиях начальной загрузки операционных систем в таких архитектурах, как IBM PC-совместимые системы цепочки нижнего уровня , где загрузчики (такие как главная загрузочная запись (MBR), загрузочная запись тома (VBR) и начальная загрузочная запись) этапы загрузки операционных систем, таких как DOS ), смещаются с места, чтобы загрузить следующий этап в память.
Расширения CP/M
[ редактировать ]В CP/M отладчика динамической отладки (DDT) динамически перемещался инструмент в верхнюю часть доступной памяти посредством перемещения границ страницы , чтобы максимизировать временную программную область (TPA) для запуска программ. [5] [6]
В 1988 году альтернативный процессор командной строки ZCPR 3.4 для Z-System представил так называемые программы типа 4 , которые также можно было самостоятельно перемещать через встроенную заглушку. [7] [8] [9] [10] [11]
Драйверы для x86 DOS
[ редактировать ]В DOS самоперемещение иногда также используется более продвинутыми драйверами и резидентными системными расширениями (RSX) или резидентными программами завершения и пребывания (TSR), которые загружают себя «высоко» в верхнюю память более эффективно, чем это возможно для внешних «высоких» модулей. "-загрузчики (например, LOADHIGH / HILOAD , INSTALLHIGH / HIINSTALL или DEVICEHIGH / HIDEVICE и т. д.). [12] начиная с DOS 5), чтобы максимально увеличить объем памяти, доступной для приложений. Это связано с тем, что операционная система не знает внутренней работы загружаемого драйвера и поэтому должна загружать его в свободную область памяти, достаточно большую, чтобы хранить весь драйвер в виде блока, включая его код инициализации, даже если бы он был освобожден после инициализации. Для TSR операционная система также должна выделить префикс программного сегмента (PSP) и сегмент среды . [13] Это может привести к тому, что драйвер не будет загружен в наиболее подходящую свободную область памяти или даже вообще не позволит ему загрузиться на высоком уровне. В отличие от этого, самоперемещающийся драйвер можно загрузить куда угодно (в том числе в обычную память ), а затем переместить только его (обычно гораздо меньшую) резидентную часть в подходящую свободную область верхней памяти. Кроме того, усовершенствованные самоперемещающиеся TSR (даже если они уже загружены в верхнюю память операционной системой) могут перемещаться по большей части своего собственного сегмента PSP и буфера командной строки и освобождать свой сегмент среды, чтобы еще больше уменьшить занимаемый в результате объем памяти и избежать фрагментация . [14] Некоторые самоперемещающиеся TSR также могут динамически менять свою «природу» и превращаться в драйверы устройств, даже если они изначально загружены как TSR, тем самым обычно также освобождая некоторую память. [4] Наконец, внешнему загрузчику технически невозможно переместить драйверы в расширенную память (EMS), область высокой памяти (HMA) или расширенную память (через DPMS или CLOAKING ), поскольку эти методы требуют, чтобы небольшие заглушки , специфичные для драйвера, оставались в обычных или верхнюю память для координации доступа к целевой области перемещения, [15] [номер 1] [номер 2] а в случае с драйверами устройств еще и потому, что заголовок драйвера всегда должен оставаться в первом мегабайте. [15] [13] Чтобы добиться этого, драйверы должны быть специально разработаны для поддержки самостоятельного перемещения в эти области. [15]
Некоторые расширенные драйверы DOS также содержат как драйвер устройства (который загружается операционной системой по смещению +0000h), так и TSR (загружается по смещению +0100h), разделяющие общую часть кода внутри в виде толстого двоичного файла . [13] Если общий код не спроектирован так, чтобы быть независимым от позиции , он требует некоторой формы исправления внутреннего адреса, аналогичной тому, что в противном случае уже было бы выполнено перемещающимся загрузчиком ; это похоже на этап исправления самостоятельного перемещения, но код уже загружается в целевое место загрузчиком операционной системы (а не самим драйвером).
Программы IBM DOS/360 и OS/360
[ редактировать ]IBM DOS/360 не имела возможности перемещать программы во время загрузки. Иногда поддерживалось несколько версий программы, каждая из которых была создана для разных адресов загрузки ( разделов ). Особый класс программ, называемый самоперемещающимися программами, был запрограммирован так, чтобы перемещаться после загрузки. [16] IBM OS/360 перемещала исполняемые программы при их загрузке в память. Требовалась только одна копия программы, но после загрузки программу нельзя было переместить (так называемый одноразовый позиционно-независимый код ).
Другие примеры
[ редактировать ]В качестве крайнего примера (многократного) самоперемещения, также называемого динамическим самоперемещением, можно создать компьютерную программу так, чтобы она не оставалась по фиксированному адресу в памяти даже во время выполнения, как, например, используется в тестах памяти червей . [17] [18] [19] [20] Apple Worm также является динамическим самоперемещающимся устройством. [21]
См. также
[ редактировать ]- Динамическое устранение мертвого кода
- RPLOADER — API DR-DOS, помогающий удаленному/сетевому загрузочному коду перемещаться во время загрузки DOS.
- Сбор мусора
- Самовоспроизведение
- Самоссылка
- Куайн (вычисления)
Примечания
[ редактировать ]- ^ Исключением из требования для заглушки является случай, когда расширенная память преобразуется в постоянную верхнюю память диспетчером памяти через EMSUMB , и, таким образом, к ней фактически осуществляется доступ как к верхней памяти , а не через EMS .
- ^ Есть два исключения из требования к заглушке для загрузки драйвера в HMA : заглушка не требуется, когда большая память постоянно включена на машинах без логики шлюза A20 , однако, поскольку это условие в целом не соблюдается, стандартная DOS драйверы не могут этим воспользоваться (если только они заранее не проверят это условие). В противном случае заглушка также не требуется в DR DOS 6.0 и выше, когда резидентные системные расширения (например, SHARE и NLSFUNC ) перехватывают только мультиплексное прерывание INT 2Fh, поскольку затем они могут использовать бэкдор-интерфейс для подключения к цепочке прерываний в пространстве ядра. так что обработчик шлюза A20 ядра будет обеспечивать функциональность заглушки. [а] Тем не менее, для правильной работы в HMA драйвер должен выполнить самостоятельное перемещение.
Ссылки
[ редактировать ]- ^ Дхамдере, Дхананджай М. (1999). Системное программирование и операционные системы . Образование. Нью-Дели, Индия: Тата МакГроу-Хилл . п. 232. ИСБН 0-07-463579-4 . ISBN 978-0-07-463579-7 . Архивировано из оригинала 01 февраля 2020 г. Проверено 8 ноября 2011 г. (658 страниц)
- ^ Дхамдере, Дхананджай М. (2006). Операционные системы: концептуальный подход . Образование. Нью-Дели, Индия: Тата МакГроу-Хилл . п. 231. ИСБН 0-07-061194-7 . ISBN 978-0-07-061194-8 . Архивировано из оригинала 20 февраля 2020 г. Проверено 20 февраля 2020 г. (799 страниц)
- ^ Пол, Матиас Р.; Фринке, Аксель К. (13 октября 1997 г.) [1991], FreeKEYB - Расширенный драйвер клавиатуры и консоли для DOS (Руководство пользователя) (изд. 6.5) [1] (Примечание. FreeKEYB - это Unicode динамически настраиваемый драйвер на основе , поддерживающий большинство раскладки клавиатуры , кодовые страницы и коды стран . Использование готового ассемблера макросов , а также системы инструментов автоматического анализа предварительной и последующей обработки для генерации зависимостей и морфинга кода метаданных встраиваются в исполняемый файл. , которые затем двоичный код и самоудаляющийся, расслабляющий и перемещающийся загрузчик , драйвер поддерживает различную загрузку и установку как TSR или драйвер устройства , а также реализует передовые методы самостоятельного перемещения (в том числе в обычную память DOS , UMB , неиспользуемую видеопамять , или необработанная память, также использующая префикса программного сегмента перегрузку и рекомбинацию сегментов среды на уровне байтов ) и детализированное динамическое устранение мертвого кода во время загрузки, а также самомодифицирующийся код и возможность реконфигурации во время выполнения, чтобы минимизировать его объем памяти в зависимости от оборудования, конфигурацию операционной системы и драйвера, а также выбранный набор функций и языковой стандарт.)
- ^ Jump up to: а б Пол, Матиас Р.; Фринке, Аксель К. (16 января 2006 г.), FreeKEYB - Расширенный международный драйвер клавиатуры и консоли для DOS (Руководство пользователя) (7 (предварительное) изд.)
- ^ Килдалл, Гэри Арлен (февраль 1978 г.) [1976]. «Простой метод статического перемещения абсолютного машинного кода» . Журнал доктора Добба по компьютерной гимнастике и ортодонтии . 3 (2). Народная компьютерная компания : 10–13 (66–69). ISBN 0-8104-5490-4 . #22 ковчег:/13960/t8hf1g21p . Проверено 19 августа 2017 г. [2] [3] [4] . Первоначально представлено по адресу: Килдалл, Гэри Арлен (1977) [22–24 ноября 1976 г.]. «Простой метод статического перемещения абсолютного машинного кода». Написано в Военно-морской аспирантуре , Монтерей, Калифорния, США. В Титусе, Гарольд А. (ред.). Отчет конференции: Десятая ежегодная конференция Asilomar по схемам, системам и компьютерам: доклады представлены 22–24 ноября 1976 г. Отель и конференц-центр Asilomar, Пасифик-Гроув, Калифорния, США: Western Periodicals Company. стр. 420–424. ISSN 1058-6393 . Проверено 6 декабря 2021 г. (609 страниц). (Этот метод «изменения размера», называемый перемещением границ страницы , можно было применить статически к CP/M-80 образу диска с помощью MOVCPM для того, чтобы максимизировать TPA для запуска программ. Он также использовался динамически CP/ отладчика M Инструмент динамической отладки (DDT) для перемещения в верхнюю память. Тот же подход был независимо разработан Брюсом Х. Ван Наттой из IMS Associates для создания перемещаемого PL/M кода . В качестве перемещения границ абзаца позже был использован другой вариант этого метода. динамически HMA Самоперемещающиеся TSR , такие как KEYB , SHARE и NLSFUNC, в DR DOS 6.0 и выше. Гораздо более сложный и гранулированный метод перемещения смещения на уровне байтов , основанный на похожем подходе, был независимо задуман и реализован Маттиасом Р. Полом и Акселем К. Фринке для их динамического устранения мертвого кода , чтобы динамически минимизировать влияние резидентных драйверов во время выполнения и TSR (например, FreeKEYB).)
- ^ Хюитт, Роберт; Юбэнкс, Гордон ; Роландер, Томас «Том» Алан ; Лоус, Дэвид; Мишель, Ховард Э.; Халла, Брайан; Уортон, Джон Харрисон ; Берг, Брайан; Су, Вейлянь; Килдалл, Скотт ; Кампе, Билл (25 апреля 2014 г.). Лоус, Дэвид (ред.). «Наследие Гэри Килдалла: посвящение вехе CP / M IEEE» (PDF) (видеотранскрипция). Пасифик-Гроув, Калифорния, США: Музей истории компьютеров . Справочный номер CHM: X7170.2014. Архивировано (PDF) из оригинала 27 декабря 2014 г. Проверено 19 января 2020 г.
[…] Законы: […] « динамическое перемещение » ОС. Можете ли вы рассказать нам, что это такое и почему это важно? […] Юбэнкс : […] то, что сделал Гэри […] было […] ошеломляющим. […] Я помню тот день, когда в школе он прибежал в лабораторию и сказал: «Я придумал, как переехать ». Он воспользовался тем фактом, что единственным байтом всегда был байт старшего порядка . И поэтому он создал растровое изображение . […] не имело значения, сколько памяти было у компьютера, операционную систему всегда можно было переместить в верхнюю память. Следовательно, вы можете коммерциализировать это […] на машинах с разным объемом памяти. […] вы не можете продавать 64K CP/M и 47K CP/M. Было бы просто смешно проводить жесткую компиляцию адресов. Итак, Гэри понял это однажды ночью, возможно, посреди ночи, думая о каком-то кодировании, и это действительно сделало возможным коммерциализацию CP/M. Я действительно думаю, что без этого переезда это была бы очень сложная проблема. Им показалось бы сложным заставить людей покупать его, и если бы вы добавили больше памяти, вам пришлось бы покупать другую операционную систему. […] Intel […] поменяла местами байты , верно, для адресов памяти. Но они всегда находились в одном и том же месте, поэтому можно было переместить его на границу в 256 байт , если быть точным. Таким образом, вы всегда можете переместить его, используя лишь растровое изображение того, где эти […] Законы: Определенно, самое красноречивое объяснение динамического перемещения, которое я когда-либо получал […]
[5] [6] (33 страницы) - ^ Сейдж, Джей (май – июнь 1988 г.). Карлсон, Арт (ред.). «ZCPR 3.4 — Программы типа 4» . Компьютерный журнал (TCJ) — Программирование, поддержка пользователей, приложения . ЗЦПР3 Уголок (32). Водопад Колумбия, Монтана, США: 10–17 . ISSN 0748-9331 . ковчег:/13960/t1wd4v943 . Проверено 29 ноября 2021 г. [7] [8]
- ^ Митчелл, Бриджер (июль – август 1988 г.). Карлсон, Арт (ред.). «Z3PLUS и перемещение — информация о ZCPR3PLUS и о том, как написать самоперемещающийся код Z80» . Компьютерный журнал (TCJ) — Программирование, поддержка пользователей, приложения . Продвинутый CP/M (33). Водопад Колумбия, Монтана, США: 9–15 . ISSN 0748-9331 . ковчег:/13960/t36121780 . Проверено 9 февраля 2020 г. [9] [10]
- ^ Сейдж, Джей (сентябрь – октябрь 1988 г.). Карлсон, Арт (ред.). «Подробнее о перемещаемом коде, файлах PRL, ZCPR34 и программах типа 4» . Компьютерный журнал (TCJ) — Программирование, поддержка пользователей, приложения . ЗЦПР3 Уголок (34). Водопад Колумбия, Монтана, США: 20–25 . ISSN 0748-9331 . ковчег:/13960/t0ks7pc39 . Проверено 9 февраля 2020 г. [11] [12] [13]
- ^ Сейдж, Джей (январь – февраль 1992 г.). Карлсон, Арт; МакИвен, Крис (ред.). «Десять лет ЗКПР» . Компьютерный журнал (TCJ) — Программирование, поддержка пользователей, приложения . Уголок Z-системы (54). С. Плейнфилд, Нью-Джерси, США: Socrates Press: 3–7 . ISSN 0748-9331 . ковчег:/13960/t89g6n689 . Проверено 29 ноября 2021 г. [14] [15] [16]
- ^ Сейдж, Джей (май – июнь 1992 г.) [март – июнь 1992 г.]. Карлсон, Арт; МакИвен, Крис (ред.). «Программы типа 3 и типа 4» . Компьютерный журнал (TCJ) — Программирование, поддержка пользователей, приложения . Уголок Z-системы - Некоторые новые применения программ типа 4 (55). С. Плейнфилд, Нью-Джерси, США: Socrates Press: 13–19 . ISSN 0748-9331 . ковчег:/13960/t4dn54d22 . Проверено 29 ноября 2021 г. [17] [18]
- ^ «Глава 10 Управление памятью» . Руководство пользователя Caldera DR-DOS 7.02 . Caldera, Inc. , 1998 г. [1993, 1997]. Архивировано из оригинала 30 августа 2017 г. Проверено 30 августа 2017 г.
- ^ Jump up to: а б с Пол, Матиас Р. (6 апреля 2002 г.). «Re: [fd-dev] АНОНС: CuteMouse 2.0 альфа 1» . freedos-dev . Архивировано из оригинала 07 февраля 2020 г. Проверено 7 февраля 2020 г.
[…] Добавьте в драйвер заголовок устройства SYS, чтобы CTMOUSE мог быть одновременно обычным TSR и драйвером устройства — аналогично нашему расширенному драйверу клавиатуры FreeKEYB. это на самом деле не требуется, […] В DR DOS поскольку INSTALL = поддерживается, начиная с DR DOS 3.41+ и DR DOS, сохраняя порядок директив [D]CONFIG.SYS […], но это […] улучшит […] гибкость в системах MS-DOS / PC DOS , которые […] всегда выполняют директивы DEVICE = перед любыми инструкциями INSTALL=, независимо от их порядка в файле. […] программное обеспечение может потребовать, чтобы драйвер мыши присутствовал в качестве драйвера устройства, поскольку в старые времена драйверы мыши всегда были драйверами устройств. Эти драйверы мыши имели определенные имена драйверов устройств в зависимости от того, какой протокол они использовали (« PC$MOUSE » для режима системы мыши , например), и некоторые программы могут искать эти драйверы, чтобы определить правильный тип используемой мыши. . […] Еще одним преимуществом является то, что драйверы устройств обычно потребляют меньше памяти (нет Environment , нет PSP ) […] По сути, это сложный заголовок файла, другой код для анализа командной строки, другая точка входа и строка выхода, а также некоторая магия сегментов для преодоления разницы ORG 0 / ORG 100h. Самостоятельная загрузка драйвера устройства немного сложнее, так как вам придется оставить заголовок драйвера там, где он есть, и переместить только оставшуюся часть драйвера […]
- ^ Пол, Матиас Р. (18 августа 2001 г.). «Re: [fd-dev] О GRAFTABL и DISPLAY.SYS (было: Изменение кодовых страниц в FreeDOS)» . freedos-dev . Архивировано из оригинала 4 сентября 2017 г. Проверено 4 сентября 2017 г.
[…] По крайней мере, MS-DOS 6.0 + GRAFTABL перемещается по частям своего сегмента PSP (смещение +60h и выше), чтобы минимизировать свой резидентный размер. […]
(Примечание. GRAFTABL 2.00+ после DR-DOS 7.03 также поддерживает динамическое самостоятельное перемещение.) - ^ Jump up to: а б с Пол, Матиас Р. (2 февраля 2002 г.). «Treiber dynamisch nachladen» [Динамическая загрузка драйверов] (на немецком языке). Группа новостей : de.comp.os.msdos . Архивировано из оригинала 9 сентября 2017 г. Проверено 2 июля 2017 г. (Примечание. Дается обзор методов высокой нагрузки в DOS, включая использование команд LOADHIGH и т. д., а также методов самостоятельного перемещения в UMB с использованием API XMSUMB . Также обсуждаются более сложные методы, необходимые TSR для перемещения в HMA с использованием внутреннего -перемещение смещения сегмента .)
- ^ Системы управления Бутом (1 ноября 1972 г.). «Пропускная способность – Вы получаете все, что заслуживаете? – ДОСРЕЛО» . Computerworld — еженедельник новостей для компьютерного сообщества (реклама). Том. ВИ, нет. 44. Сан-Франциско, Калифорния, США: Computerworld, Inc. с. 9. Архивировано из оригинала 06 февраля 2020 г. Проверено 7 февраля 2020 г.
[…] DOSRELO предоставляет метод DOS самостоятельного перемещения проблемных программ . DOSRELO обеспечивает возможность самостоятельного перемещения для всех программ, независимо от языка, путем добавления логики точки входа в объектный код программы до того, как редактор связей каталогизирует ее в базовой библиотеке изображений . […]
- ^ Тест памяти червей (PDF) . Векторная графика . 21 октября 2015 г. Архивировано (PDF) из оригинала 15 мая 2019 г. Проверено 13 декабря 2021 г. (3 страницы) (Примечание. Из руководства по эксплуатации Vector Graphic 3. )
- ^ Уилкинсон, Уильям «Билл» Альберт (2003) [1996, 1984]. «Червь H89: тестирование памяти H89» . Страница компании Билла Уилкинсона Heath . Архивировано из оригинала 13 декабря 2021 г. Проверено 13 декабря 2021 г.
[…] Помимо получения инструкции, Z80 использует половину цикла для обновления динамического ОЗУ . […] поскольку Z80 должен тратить половину каждого цикла выборки инструкций на выполнение других задач, у него не так много времени для выборки байта инструкции , как для байта данных. Если одна из микросхем ОЗУ в той области памяти, к которой осуществляется доступ, работает немного медленно, Z80 может получить неверную битовую комбинацию при получении инструкции, но получить правильную при чтении данных. […] встроенный тест памяти не выявляет проблемы такого типа […] это строго тест чтения/записи данных. Во время теста все инструкции извлекаются из ПЗУ , а не из ОЗУ […], в результате чего H89 проходит тест памяти, но все еще работает хаотично в некоторых программах. […] Это программа, которая проверяет память, перемещаясь по ОЗУ. При этом ЦП печатает текущий адрес программы на CRT , а затем извлекает инструкцию по этому адресу. Если микросхемы ОЗУ по этому адресу в порядке, ЦП перемещает тестовую программу в следующую ячейку памяти, печатает новый адрес и повторяет процедуру. Но если одна из микросхем ОЗУ достаточно медленная, чтобы возвращать неверную битовую комбинацию, ЦП неправильно интерпретирует инструкцию и ведет себя непредсказуемо. Однако вполне вероятно, что дисплей заблокируется, показывая адрес неисправной микросхемы. Это сужает проблему до восьми микросхем, что является улучшением по сравнению с необходимостью проверять целых 32. […] Программа […] выполнит проверку на наличие червей , отправив инструкцию RST 7 (RESTART 7) из нижнего конца памяти. до последнего рабочего адреса. Остальная часть программы остается неподвижной и занимается отображением текущего местоположения команды RST 7 и ее перемещением . Кстати, программа называется тестом на червяков, потому что по мере продвижения инструкции RST 7 по памяти она оставляет после себя след NOP скользкий (НЕТ ОПЕРАЦИИ). […]
- ^ Штайнман, Ян В. (1 сентября 1986 г.). Написано в Вест-Линне, штат Орегон, США. «Тест памяти червя» . Право на собрания (TRTA). Журнал доктора Добба о программных инструментах для профессионального программиста . 11 (9). Редвуд-Сити, Калифорния, США: M&T Publishing, Inc. / The People's Computer Company : 114–115 (662–663). ISSN 1044-789X . № 119. ковчег:/13960/t74v34p9p КОДЕН ДДЖОЕБ . Проверено 13 декабря 2021 г. [19] (2 страницы)
- ^ Штайнман, Ян В. (1986). «III. 68000 полезных процедур и методов, 16. Тест на память червя» (PDF) . Написано в Вест-Линне, штат Орегон, США. Справочник доктора Добба по программированию 68000 . Нью-Йорк, США: Brady Book / Prentice Hall Press / Simon & Schuster, Inc. , стр. 341–350. ISBN 0-13-216649-6 . LCCN 86-25308 . Архивировано (PDF) из оригинала 13 декабря 2021 г. Проверено 13 декабря 2021 г. (1+5+10+1 стр.)
- ^ Дьюдни, Александр Киватин (март 1985 г.). «Компьютерные развлечения — бестиарий вирусов, червей и других угроз компьютерной памяти» . Научный американец . 285 : 38–39. Архивировано из оригинала 4 июля 2017 г. Проверено 4 июля 2017 г.
Дальнейшее чтение
[ редактировать ]- Харрелл III, Джон Б. (октябрь 1983 г.). «ДОСПЛЮС 3.5» . 80 микро . Обзор (45). 1001001, Inc .: 160, 162, 164–168, 170. ISSN 0744-7868 . ковчег:/13960/t8z906r42 . Проверено 6 февраля 2020 г. [20] [21]
- Смит, Ли; Хейнс, Лайонел (2 февраля 1989 г.) [14 августа 1987 г.]. Формат образа приложения ОС RISC (ранее — формат изображения Arthur) (Технический меморандум) (изд. 1.00). Кембридж, Великобритания: Acorn Computers Limited , Группа языков программирования. ПЛГ-АИФ. Архивировано из оригинала 30 августа 2017 г. Проверено 30 августа 2017 г.
- Свойства формата изображения ARM . 1993. Архивировано из оригинала 31 августа 2017 г. Проверено 31 августа 2017 г.
- Хак, Алекс (14 августа 2016 г.). "Начало работы с CP/M - PRL2COM" . Домашний компьютер DDR (на немецком языке). Архивировано из оригинала 21 февраля 2020 г. Проверено 21 февраля 2020 г. ; Полерс, Волкер (24 апреля 2017 г.) [20 февраля 2012 г., 2009, 2002 г., 26 июля 1988 г., 11 октября 1987 г.]. «ПРЛ2КОМ» . Домашний компьютер DDR (на немецком языке). Архивировано из оригинала 21 февраля 2020 г. Проверено 21 февраля 2020 г.