Д8 Программа распечатки

Программа найдена на кассете. Раскодировка программы сделана. Работает в имитаторе Д3-28. Имеется дизассемблированный исходный текст программы.
Руководство оператора И5М1.419.001 здесь.

Работа с программой

− Включить Д3-28 и ТПУ. (Для работы с имитатором Д3-28 – запустить exe-файл имитатора. И нажать клавишу <Home> для включения имитации ТПУ; при этом txt-файл с распечаткой будет сохраняться в папке с exe-файлом имитатора; см. руководство к имитатору.)
− Загрузить в Д3-28 ту программу, которую требуется распечатать.
− В свободную область ОЗУ Д3-28 загрузить данную версию «Программы распечатки». Для этого, после того, как в НМЛ поставлена кассета с «Программой распечатки», в регистре Х набираем в десятичной форме начальный адрес её загрузки, и кнопками прямого кодирования на пульте машины подаём команду 1202 (в имитаторе – в режиме «View Machine» с прижатой <Ctrl> нажимаем поочерёдно <1> <2> <0> <2>).
− В регистре Х набираем десятичное число, равное указанному начальному адресу плюс 50, и подаём команду 1213 (в имитаторе – с прижатой <Ctrl> нажимаем поочерёдно клавиши <1> <2> <1> <3>). Число 50 приходится прибавлять к адресу загрузки «Программы
распечатки» потому, что начальный запуск должен начинаться с её 50-го шага.
− Нажимаем S на пульте машины (в имитаторе – нажимаем <S>). Происходит запуск «Программы распечатки», в регистре Х появляется цифра 2, и программа останавливается.
− В регистр Y вводим начальный номер шага, а в регистр Х вводим конечный номер шага (увеличив его на пару единиц) для распечатывания.
− Подаём команду 0013, это вызов подпрограммы дизассемблера, начинающей выполнять распечатку номеров шагов, байт-кодов и мнемокода. В регистре Х появляется число 55. Нажимаем S. Если снова появляется 55, то нажимаем S ещё раз. И так далее, пока на табло Х не появится конечный номер шага. (Дело в том, что программа распечатывает 55 шагов и останавливается, поэтому приходится нажимать S для продолжения распечатки.)
Варианты:
− Если вместо вызова подпрограммы 0013 подать команду 0011, то будут распечатываться только номера шагов и байт-коды, по одному байт-коду в строке, без ассемблерных мнемокодов. (Этот вариант хорош для распечатывания возникающих при работе сложных программ таблиц адресов вызова подпрограмм по командам JSTT и JSTF.)
− Если вместо 0013 или 0011 подать команду 0012, то будут распечатываться номера шагов, байт-коды по одному в строке, и соответствующие им символы. (Этот вариант хорош для распечатывания текстовой информации из программ).
− Если номера шагов требуется распечатывать с заданным смещением, то можно после запуска «Программы распечатки» (когда машина остановится с индикацией 2 в регистре Х), ввести в Х желаемое значение смещения и подать двухбайтовую команду 0413 1202 (она заносит значение из Х в регистр R2).
− Для выхода из «Программы распечатки» после окончания печати можно подать команду 0015.

В начале «Программы распечатки» встречаются команды из расширенной системы команд для машин Д3-28 (с ОЗУ 128Кбайт), выпускавшихся после 1983 года. По-видимому, это результат некоей доработки исходной версии программы. Однако основная часть программы (дизассемблер) в данной версии не доработана – «не понимает» команд из расширенной системы и печатает вместо их мнемокодов сообщение PROGRAMMING ERROR. Но это не страшно: расширенных команд очень мало, так что не составляет труда при необходимости вручную заменять слова PROGRAMMING ERROR мнемокодами по «Справочнику программиста»; вот коды этих команд с их мнемокодами:
0412 1503 – DIV R
0412 1504 – MOV BL
0412 1512 – MOV BR
0412 1500 – ADD BL
0412 1508 – ADD BR
0412 1506 – ONSEGM

Вот так выглядит распечатка программой Д-8 мнемокодов самой Д-8 (начальный фрагмент кода):
00000 11 04 15 09 MOV R15,R09
00002 13 10 07 13 MOV #07 13,S10
00004 13 11 00 00 MOV #00 00,S11
00006 13 04 00 11 MOV #00 11,S04
00008 13 05 11 07 MOV #11 07,S05
00010 11 01 10 09 SUB R10,R09
00012 13 04 07 12 MOV #07 12,S04
00014 13 05 00 00 MOV #00 00,S05
00016 13 08 00 03 MOV #00 03,S08
00018 13 09 00 00 MOV #00 00,S09
00020 04 12 15 12 PROGRAMMING ERROR
00022 04 13 10 14 CLR R14
00024 05 15 STOP

Sinus
05.06.2019