Передовица » Макулатура » Штатная документация » Агат-9 Книга 9 (3) » Фг.00034-01 33 01

Фг.00034-01 33 01

    УТВЕРЖДЕН

Фг.00034-01 33 01-ЛУ

МАШИНА ВЫЧИСЛИТЕЛЬНАЯ ЭЛЕКТРОННАЯ

ПЕРСОНАЛЬНАЯ "АГАТ"

(исполнение 9)

Система программирования на языке "Ассемблер"

Руководство программиста

Фг.00034-01 33 01

1991

 

* * *

АННОТАЦИЯ

В настоящем документе приведена информация о назначении и условиях применения системы программирования "Ассемблер" (СПА) для персональной электронной вычислительной машины (ПЭВМ) "АГАТ" исполнения 9, основные характеристики и обращения к программе.

Описаны входные, выходные данные и сообщения системы, а также собраны сведения, которые могут оказаться полезными при разработке сложных программ.

Для использования СПА необходимо ознакомиться с описанием языка (см. Фг.00034-01 35 01).

СОДЕРЖАНИЕ

 1. Общие сведения                                 
 2. Представление данных                             
 3. Правила записи директив                            
 4. Выдача и модификация памяти                      
 5. Копирование, сравнение, поиск                    
 6. Реассемблирование                                
 7. Запуск программ и организация контрольных точек  
 8. Переключение банков памяти                       
 9. Поблоковый обмен с диском                        
10. Работа с файлами                                 
11. Выход из системы                                     
12. Мини-ассемблер                                   
    Приложение 1

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, для ЕС-5323.01-дисководов T=A0, 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 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 * свободно

  * - можно использовать
  : - можно использовать с ограничениями

* * *

Использование материалов проекта agatcomp без получения предварительного письменного разрешения agatcomp запрещено.


Почта для обратной связи: mail@agatcomp.ru


Живое общение по теме Агата: Telegram группа Agatcomp.


Накопленные знания и проекты: тематический ФОРУМ.


© 2004-2024 agatcomp.su / agatcomp.ru

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *