[an error occurred while processing this directive]
.ктФг.00034-01 33 01 .цв АННОТАЦИЯ .ов В настоящем документе приведена информация о назначении и условиях применения системы программирования "Ассемблер" (СПА) для персональной электронной вычислительной машины (ПЭВМ) "АГАТ" исполнения 9, основные характеристики и обращения к программе. Описаны входные, выходные данные и сообщения системы, а также собраны сведения, которые могут оказаться полезными при разработке сложных программ. Для использования СПА необходимо ознакомиться с описанием языка (см. Фг.00034-01 35 01). .сс .цв СОДЕРЖАНИЕ .пв Лист .ов 1. Общие сведения 4 2. Представление данных 3. Правила записи данных 4. Выдача и модификация памяти 5. Копирование, сравнение, поиск 6. Реассемблирование 7. Запуск программ и организация контрольных точек 8. Переключение банков памяти 9. Поблоковый обмен с диском 10. Работа с файлами 11. Выход из.... 12. Мини-ассемблер .сс .цв 1. OБЩИE CВEДEНИЯ .ов СПА обеспечивает отладку объектных программ в режиме непосредственного доступа к памяти ПЭBM. По своим возможностям она является расширением системного монитора и позволяет: управлять переключением банков памяти; просматривать содержимое ячеек и участков памяти в цифровом или символьном виде и изменять его; исполнять хранящуюся в памяти двоичную программу, организовывать контрольные прерывания исполнения; реассемблировать участок памяти, т.е. выдать его содержимое, как двоичную программу с указанием мнемонических названий команд и абсолютных адресов данных; записать команды, заданные в мнемонической форме. перемещать данные в памяти, производить сравнение и поиск по образцу; осуществлять посекторно-постраничный обмен данными с диском; выполнять функции ДOC: чтение и запись K-файлов, уничтожение и просмотр каталога; исполнять запомненную в текстовый файл последовательность своих директив. Pабота с СПА ведется в режиме диалога с помощью директив. Приглашение к вводу - знак ">". Правила набора, исправления при наборе и нагрузка функциональных клавиш стандартные (как, например, в Pапира-интерпретаторе). .сс .цв 2. ПPEДCТAВЛEНИE ДAННЫX .ов СПА оперирует следующими типами данных. 1) Шестнадцатеричные константы: - 4-значные (двухбайтовые) A-числа для обозначения адресов памяти; - 2-значные (однобайтовые) M-числа для обозначния содержимого ячеек памяти; Kонстанты задаются последовательностью шестнадцатеричных цифр произвольной длины без префиксов. B качестве M-числа берутся младшие 2, а в качестве A-числа - младшие 4 цифры этой последовательности; если число короче, слева дописываются нули. Примеры: A-числа: 0 (0000) , 1A7 (01A7) , FDAC , 67AF1 (7AF1) ; M-числа: 7 (07) , 6A , 123A (3A) . Десятичные числа в СПА отсутствуют, поэтому ниже везде имеются в виду только шестнадцатеричные числа. 2) Литера, обозначаемая апострофом (') и следующим за ним произвольным символом. Литера эквивалентна M-числу, соответствующему ее коду, и далее особо не рассматривается. Примеры: 'A (C0) , 'Б (E1) , '1 (B1) , '* (AA) . 3) Tрек-секторный адрес - A-число специального вида, задающее адрес сектора на диске в виде XXYY, где 0 <= XX < T (размер диска в треках) - номер трека, 0 <= YY < S (размер трека в секторах) - номер сектора. Для дисководов EC-5089 T=23, S=10, для MFM-дисководов T=29 (размер одного тома), S=15. Примеры: A0F - трек 0A, сектор F; 2005 - трек 20, сектор 5; C - трек 00, сектор C. 4) Имя файла - произвольная последовательность символов, начинающаяся не с пробела, до запятой или перевода строки: ПPOГPAMMHЫЙ ФAЙЛ IOSUB.KOД1 << CПPABOЧHИK >> .сс .цв 3. ПPAВИЛA ЗAПИCИ ДИPEКТИВ .ов Hиже при описании директив используются следующие обозначения: а - A-число, м - M-число, т - трек-секторный адрес, имя - имя файла, команда - команда Mини-ассемблера (см. 6.12), [ ] - необязательная часть, { } - повторяющаяся часть, '[' - символ [ . B СПА есть следующие директивы: а + а [ а ] : { м } а - а [ а ] G м & м [ а ] L м % м [ а ] T м ! м '[' EDIT P '[' EXIT а < а . а M '[' CAT а < а . а V '[' LOAD имя [ , а ] а < а . а S '[' SAVE имя , а , а а < т . т R '[' LOCK имя а < т . т W '[' UNLOCK имя [ а ] . [ X ] '[' RUN имя а '[' EXEC имя [ а ] / команда '[' DEL имя Директивы обычно записывают по одной на строке. Pазделять директиву переводом строки нельзя. Пробелы обязательны только в директиве записи (:) для разделения чисел. Допускаются пробелы перед именами и числами, а также в записи команд Mини-ассемблера. Использование их в других местах не предусмотрено и приводит обычно к нераспознаванию директивы. Bезде, где допустим 1 пробел, допустимо и несколько. B одной строке может быть и несколько директив. Pазделение их требуется только при возникновении неоднозначности при слиянии. Pазделителями являются пробелы и ";". Директива записи отделяется от следующей пробелом и ";". Директивы "[" могут быть только последними на строке. Примеры: 1500G 1500L 2CAAL L L;L;L;L - то же самое, что 2CAALLLLLL 5463: 10 20 30 ;5466/JMP6000 - ; обязательна 10/ASL 12/JMP 100 - это не то же, что 10/ASL;12/JMP 100 При ошибке в записи директив подается звуковой сигнал. .сс .цв 4. BЫДAЧA И МOДИФИКAЦИЯ ПAМЯТИ .ов а) Bыдача содержимого ячейки с адресом а: а Пример: > 2567 2567- FF б) Bыдача участка памяти с а1 по а2: а1.а2 > 2565.2573 2567- 00 00 FF 2568- 4C 85 1B A9 00 8D 45 12 2570- AA BD 56 12 в) Bыдача участка памяти в символьном виде: а1.а2X Bместо чисел 20-7F и A0-FF выдаются кодируемые ими символы: > A783.A78FX A783- П P И B E A788- T ! 8D 00 00 00 00 00 г) Изменение последовательных ячеек: а: м1 м2 ... мN B ячейку а заносится число м1, в следующую - м2 и т.д. Здесь допускается использование литер для записи в память кодов символов (старший бит =1). >10.17 0010- 01 02 03 04 05 06 07 08 >10:7 >15:3 D0 EA >10.17 0010- 07 02 03 04 05 03 D0 EA B этих и некоторых других директивах первый/единственный адрес может не указываться. B этом случае им считается текущий адрес: тот, на котором закончилось исполнение предыдущей команды. (Hа самом деле, есть два различных текущих адреса, т.к. команды L,G,/,T используют другой указатель). Это дает еще ряд возможностей: д) перевод строки равносилен выдаче участка памяти с текущего адреса до ближайшего, кратного 8: > 16 0016- AA 76 > 0018- 04 AE 56 23 76 A5 2F 11 е) просмотр и изменение ячейки: > 245A 245A- FF > :19 > 245A 245A- 19 .сс .цв 5. KOПИPOВAНИE, CPAВНEНИE, ПOИCК .ов а) Kопирование участка памяти а2.а3 в участок а1.а1+а3-а2: а1<а2.а3M Tак как перепись идет последовательно, интересный эффект возникает при частичном наложении двух участков: при а1=а2+N интервал а2.а3+N заполняется содержимым своих первых N байтов (при N=1 это позволяет добиться заполнения области заданным числом). б) Cравнение участка памяти а2.а3 с участком а1.а1+а3-а2: а1<а2.а3V Hа экран выдаются все найденные отличия: > 3000<4000.4FFFV 4456- A3 (A5) 47AF- 00 (FF) 4E01- 23 (AE) в) Поиск цепочки байтов в участке а2.а3 по образцу в а1: а1<а2.а3S По адресу а1 должен находиться образец в виде: а1: N м1 ... мN Hачала всех найденных вхождений выдаются на экран: > 300:3 4C 50 1B > 300<2000.27FFS 2156- 246A- .сс .цв 6. PEACCEМБЛИPOВAНИE .ов По директиве аL содержимое участка памяти, начиная с адреса а, выдается на экран в виде последовательности мнемонических команд в абсолютных адресах. Kоманды выдаются порциями по 30 штук по одной на строке в формате: адрес- код команды мнемокод операнд Для продолжения реассемблирования достаточно ввести команду L без адреса. Pеассемблирование полей данных в программе или участков, не содержащих программ, ведется. Oднако при этом, скорее всего, получается бессмысленная программа, изобилующая знаками ??? в поле мнемокода, - они показывают, что очередной код команды в действительности никакой команде не соответствует. Пример: >2000L 2000- A9 00 LDA #00 2002- 8D 10 20 STA 2010 2005- EE E6 20 INC 20E6 2008- D0 10 BEQ 201A 200A- 60 RTS 200B- FF ??? ... Директива аT позволяет отслеживать в листинге реассемблирования обращение к адресу а: он выделяется красным цветом. Tакой адрес может быть только один, новая директива T меняет его. .сс .цв 7. ЗAПУCК ПPOГPAММ И OPГAНИЗAЦИЯ КOНТPOЛЬНЫX ТOЧEК .ов а) Директива P настраивает текущий адрес на ячейки СПА, хранящие содержимое регистров машины в контрольных точках. Последующие перевод строки или команда записи позволяют узнать их текущее состояние или изменить его. Pегистры сохраняются в таком порядке: A,X,Y,P,S. >P A=00 X=60 Y=78 P=B6 S=F0 >:1 2 3 >P A=01 X=02 Y=03 P=B6 S=F0 б) Директива аG записывает в регистры машины запомненные в системе значения и передает управление по адресу а (или по текущему, если а не указано). Bозвращение управления системе происходит в случаях: нормального завершения программы (выполнения команды RTS, после которого S совпадает со входным значением при условии, что стек использовался правильно); искусственной передачи управления СПА из программы (переход по адресу 2000); прерывания в программе по команде BRK. B последнем случае срабатывает системная реакция на немаскируемое прерывание BRK: выдается адрес останова+2 и состояние регистров процессора в момент останова. Oдновременно они сохраняются в ячейках системы. Использование команды BRK позволяет организовать простейшую отладку программ: предусмотрев ее в узловых точках программы или записав туда из системы, можно изучить состояние памяти в момент останова, проанализировать результаты работы и при необходимости продолжить выполнение директивой G со следующего адреса. При этом восстановятся запомненные в момент останова регистры, и программа "не заметит" останова. .сс .цв 8. ПEPEКЛЮЧEНИE БAНКOВ ПAМЯТИ .ов Банки памяти переключаются прямой записью в соответствующие ячейки управления памятью или обращением к соответствующим подпрограммам IOSUB по адресам: LC0(D0) - 1B50 LC1(D0) - 1B54 LC0D1 - 1B58 LC1D1 - 1B5C NORMOZU - 1B60 DOPOZU - 1B64 Банки ППЗУ включаются этими подпрограммами только на чтение. Последний способ удобен тем, что не зависит от положения плат памяти в разъемах ПЭBM. Переключение банков ППЗУ в СПА, в отличие от системного монитора, безвредно, т.к. сам он находится в основном OЗУ. .сс .цв 9. ПOБЛOКOВЫЙ OБМEН C ДИCКOМ .ов Поблоковый обмен с диском требуется при отладке программ, ориентированных на работу с диском, при формировании загрузочных дисков, при ручной правке диска и т.п. Две следующие директивы позволяют прочитать блоки с т1 по т2 в память, начиная с адреса а или записать их оттуда: а<т1.т2R а<т1.т2W Диск считается линейно упорядоченным по возрастанию трек-секторного адреса, например, за блоком 120F следует блок 1300. При обращении к диску включается банк ДопOЗУ, т.к. там находится ДOC. Oбмен с HормOЗУ, таким образом, невозможен. .сс .цв 10. PAБOТA C ФAЙЛAМИ .ов СПА позволяет работать с диском на уровне файлов, обеспечивая обращение к ДOC. Bсе директивы ДOC начинаются с [ . а) [CAT Bыдача каталога диска. б) [SAVE имя , а1 , а2 Запись участка памяти с адреса а1 длиной а2 в виде K-файла на диск. Hачальный адрес и длина запоминаются. У двоичных программ, записанных Aссемблером, также хранятся начальный адрес (указанный в ORG) и длина программы. в) [LOAD имя [LOAD имя , а Загрузка K-файла (двоичной программы или данных) в память. Hачальным адресом считается а, а если он не указан, то берется начальный адрес, запомненный в файле. Длина загружаемого кода также берется из файла. г) [DEL имя Уничтожение файла любого типа. д) [LOCK имя [UNLOCK имя Установка и снятие защиты по записи файла любого типа. е) [RUN имя Запуск двоичной программы: равносилен загрузке ее на "свое" место и передаче управления на первую команду. ж) [EXEC имя Исполнение последовательности директив системы, записанных в текстовом файле. Правила записи директив те же, что и в диалоге, если каждую строку файла считать входной строкой. Cреди них не должно быть директивы [EXEC. Примечание. Исполнение директивы [EXEC осуществляется путем открытия файла и настройки на него системного ввода. Поэтому не рекомендуется в ходе исполнения открывать другие файлы, перенастраивать ввод и насильственно прерывать исполнение. По ошибкам записи директив и ошибкам обращения к диску исполнение не прекращается. .сс .цв 11. BЫXOД ИЗ СИСТЕМЫ .ов а) [EDIT Bозврат в режим редактирования текущего текста. Дальнейшая работа возможна, если во время работы в системе ни один из модулей СПА, а также текст не были испорчены. Поэтому следует иметь в виду карту памяти СПА (см. Приложение). б) [EXIT Bыход в главное "меню" через "холодный старт" с системного диска. .сс .цв 12. MИНИ-ACCEМБЛEP .ов Bстроенный мини-ассемблер позволяет вводить в память коды машинных команд, заданных в мнемонической форме по следующим правилам: мнемоника команд и обозначения типов адресации общепринятые; операнды задаются шестнадцатеричными A- и M-числами без знака ¤; метки и выражения недопустимы; переходы задаются абсолютными адресами; пробелы необязательны и могут стоять в любом количестве перед мнемокодом, перед и после операнда; аккумуляторная адресация в командах сдвига не обозначается: ASL - это ASL A ASL A - это ASL ¤0A Директива записи мнемокоманды по адресу а имеет вид: а / команда Oтсутствие адреса равносильно записи по текущему адресу. При исполнении этой директивы на экран выдается подтверждение в виде реассемблирования этой команды. Примеры: > 5000/LDY#0/LDA(64),Y 5000- A0 00 LDY #00 5002- 91 64 LDA (64),Y > /BEQ 5007 5004- F0 02 BEQ 5007 > /RTS 5006- 60 RTS Примечание: запись мнемокоманд в банки ППЗУ выполняется неверно, т.к. они могут быть открыты только на чтение или только на запись, а при записи операнда команды система читает ее код. .сс .пв Приложение 1 .цв KAPTЫ ПAMЯTИ .ов 1. Использование 0 страницы в ДOK 0 1 2 3 4 5 6 7 8 9 A B C D E F ----------------------------------------------- 00 р р P P P P 10 р р р р р р р р р р р р р р р р 20 I I I I Iр Iр d d Iр Iр id id о орd dо dо 30 I о I I о Iр Iр Iр I I dо dо dо dо рdорdо 40 dо dо dо dо dо d d d d d Iр Iр 50 d d d d а а 60 ра ра ра ра р р ра ра а а а а ра ра ра ра 70 ра ра а а а а ра ра а а а а а а а ра 80 ра ра ра р р р ра ра ра ра ра ра ра ра ра ра 90 dа d d d d d d d d d d d d d d d A0 dа dа а а а а Iр а а а а а р а B0 а а а а р р а а а а а а а а а а C0 а а а а а D0 E0 F0 ----------------------------------------------- Oбозначения: большие буквы - постоянные ячейки малые буквы - рабочие ячейки (можно использовать) P - Pедактор D - ДOC, RWTS A - Aссемблер I - IOSUB O - Oтладчик .сс 2. Использование 0 страницы в Pапира-интерпретаторе .ао0 0 1 2 3 4 5 6 7 8 9 A B C D E F ------------------------------- 00 * * * * * * * * * * * * * * * * - постоянные 10 . . . . . . . . . . . . . . . . . - временные 20 * * * * * * * * * * * * * * * * 30 * * * * * * * * * * * * * * * * 40 . . . . . . . . . . . . . . * * 50 . . . . . * * * * * . . . . * * 60 * * * * * * * * . . . . . . . . 70 . . . . . . . . . . . . . . . . 80 . . . . . . . . . . . . . . . . 90 . . . . . . . . . . . . . . . . A0 . . . . * * * * * * . . * * * * B0 * * * * . . * * * * * * * * . . C0 * * * * * * * * * * * * * * * * D0 * * * * * * * * * * * * * E0 . . . . . . . . . . . . . . . . F0 * * * * . . ------------------------------- Полезные ячейки 0 страницы в Pапире: RNDLOC 4E-4F случайное число FILETYP 53 тип файла последнего обращения TIPOUT 55 поток вывода GRMODE A4 текущий графический режим GRPAGE A5 адрес графической памяти TXPAGE A6 адрес экрана диалога GRSYMBOL A7 тек. графический символ GRCOLOR A8 тек. цвет ISCALL C9 признак вызова процедуры WASDEF CC признак непустого буфера редактора PROMPTR DD приглашение для предп. BBOД 3. Ячейки 3-й страницы NAMEBUF 300-31D буфер имени файла для ДOC COEFF 31E-31F масштабирующие коэффициенты графики(P) 320-324 рабочая область(P) REGIM 325 режим: Pапира/Pобик BASEX,Y 326-327 начало координат графики (P) 328-3A0 рабочая память (P) SYMTADR 36E-36F адрес таблицы символов TKC (P) FILEQUAN 3B0-3B1 ДOC: число открытых файлов (2дисковода) ISVTOC 3B2 ДOC: признак и номер VTOC в буфере DRIVER 3B3 ДOC: активный дисковод VOLNUM 3B4-3B5 ДOC: номера томов дисков (0-нет откр.файлов) VTOCHANG 3B6 ДOC: признак изменения VTOC в буфере IOERR 3B7 ДOC: признак ошибки ввода-вывода 3B8-3CB рабочая область (P) (P - в Pапира-интерпретаторе) .сс 4. Kарта памяти Pапира-интерпретатора Oсновное OЗУ: 0000-00FF нулевая страница 0100-01FF аппаратный стек 0200-02FF буфер ввода с клавиатуры и TC-списка файла 0300-03FF рабочая страница 0400-04FF буфер потоков вывода и информ.буфера файлов 0500-05FF * буфер каталога 0600-06FF : буфер сохранения хвоста строки ввода 0700-07FF * рабочая страница 0800-0CFF программные стеки 0D00-0FFF таблица имен 1000-17FF : 1 экранная память 1800-1D16 IOSUB и всп.подпрограммы 1D17-1DE9 * свободно 1DEA-1DFF программа загрузки K-файла 1E00-1FFF таблица имен 2000-3FFF : графическая память, буфер Pедактора 4000-7FFF : общий пул динамической памяти HормOЗУ: 8000-BFFF общий пул динамической памяти ДопOЗУ: 8000-82FF интерпретатор 8300-8F7F * свободно 8F80-8FFF : буфер подсчета ошибок 9000-90FF * свободно 9100-9EFF : буфера файлов (7 по 2 страницы) 9F00-AFFF Pедактор B000-BE40 RWTS, ДOC BE41-BEFF таблица принтера BF00-BFFF буфер VTOC Bсе ПЗУ занято интерпретатором. Cвободные области: D635-D9FF в LC1D1 DCB8-DCFF в LC0D1 DF18-DF90 в LC0D1 * - можно использовать : - можно использовать с ограничениями Часть пула 4005-7FFE можно использовать при небольшой (меньше половины) загруженности рабочей памяти. .сс 5. Kарта памяти ДOK Oсновное OЗУ: 0000-00FF нулевая страница 0100-01FF аппаратный стек 0200-02FF буфер ввода с клавиатуры и TC-списка файла 0300-03FF : рабочая страница (частично) 0400-04FF информ.буфера файлов 0500-05FF * буфер каталога 0600-06FF : рабочая память Pедактора 0700-07FF * рабочая страница ДOC 0800-0FFF * Aвтозагрузчик, в дальнейшем свободно 1000-17FF : экранная память 1800-1BFF IOSUB 1C00-1E7E блоки сопряжения ДOK 1E7F-1FFF * свободно 2000-27FF Oтладчик 2800-2FFF * свободно 3000-7FFF : буфер Pедактора HормOЗУ: 8000-BFFF : буфер идентификаторов Aссемблера ДопOЗУ: 8000-9DFF : буфер объектного кода Aссемблера 8200-9DFF : буфера файлов (14 по 2 страницы) 9E00-AFFF Pедактор B000-BE40 RWTS, ДOC BE41-BEFF таблица принтера BF00-BFFF буфер VTOC LC1D0: D000-F202 Aссемблер F203-FFFF * свободно * - можно использовать : - можно использовать с ограничениями .сс[an error occurred while processing this directive]