Описание ПрофПЗУ Scorpion 256 1996 г.

Анализатор - работа анализатора. Команды монитора для работы с анализатором. Базовые слова форт-системы анализатора.


Анализатор

Анализатор представляет собой расширение отладочной части монитора. Суть метода использования анализатора состоит в том, что при выполнении ручной (клавиши CS/3 и CS/4) или автоматической (команда SLOW) трассировки, а также при остановке выполнения отлаживаемой программы по ловушке может быть выполнена некоторая программа. Эту программу пишете Вы сами на встроенном в монитор Форт-подобном языке. «Родные» слова и слова специально введённые в словарь языка позволяют анализировать состояние отлаживаемой программы и, в зависимости от результатов анализа, выполнять какие-либо действия (например, остановку трассировки, изменение содержимого памяти или что-то ещё).

Поскольку работа с анализатором не возможна без знания хотя бы основ языка Форт, мы настоятельно рекомендуем изучить этот язык, например, по замечательной книге Л. Броуди «Начальный курс программирования на языке Форт» (пер. с англ. — М.: Финансы и статистика, 1990).

Анализатор теневого монитора состоит из двух частей: инструментальных средств обслуживающих форт-систему (например, редактор словаря) и собственно словаря встроенной форт-системы. Инструментальные средства интегрированы в систему команд монитора. Словарь же, в свою очередь, состоит из базового словаря, «зашитого» в ПЗУ, и рабочего словаря, другими словами, форт-программы, которую пишите Вы сами, в дальнейшем рабочий словарь будем называть программой анализатора или словарём анализатора.

Работа анализатора

При включённом анализаторе после выполнения очередной трассируемой команды отлаживаемой программы монитором будет предпринята попытка выполнить несколько, специально для этого предназначенных, зарезервированных слов форт-программы. Таких слов десять, их имена st0, st1, st2, ..., st9. Если определено несколько слов, то они будут выполнены последовательно (наивысший приоритет имеет st0, далее st1 и так до st9). Существует ещё одна группа зарезервированных слов, они выполняются при срабатывании какой-либо ловушки. Здесь, каждой из восьми, возможных в мониторе, ловушек соответствует одно из восьми слов: br1, br2, ..., br8. Напомним, что Вы сами должны определить содержимое (программу) зарезервированных слов.

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

Команды монитора для работы с анализатором

ANalyser on|off

включить (ON) или выключить (OFF) режим выполнения зарезервированных слов форт-системы. Далее мы будем просто говорить о включённом или выключенном анализаторе.

CLear

очистить рабочий словарь анализатора.

DEFLoad filespec

DEFSave filespec

загрузить с диска (Defload) или записать на диск (Defsave) рабочий словарь анализатора.

WORD word[:] program

определить (или переопределить) слово (словарную статью) в рабочем словаре анализатора. Вместо ключевого слова WORD возможно использование символа $. Имя определяемого слова (word) не должно совпадать со словами из базового словаря. Обратите внимание, что в имени допустимо использовать символы как верхнего, так и нижнего регистра, и при этом, в отличии, скажем, от Бейсика, они не совпадают. Далее в строке должны располагаться слова, составляющие содержание определяемой словарной статьи. Все слова в словарной статье должны быть ранее определены. Наравне со словами здесь же могут присутствовать числа (числовые константы) и односимвольные стринги (на правах числовых констант). В отличие от стандартного Форта в данной реализации слово, дублирующие уже существующее слово, не маскирует последнее, а полностью переопределяет его содержимое.

EDit word

отредактировать словарную статью word. Текст словарной статьи появляется в окне строчного редактора. После редактирования новое содержание словарной статьи записывается в рабочий словарь.

EVal word

выполнить слово word. Команда Eval используется при отладке форт-программ. На экран выдается информация о состоянии стека на момент окончания выполнения слова, а в случае ошибок со стеком — список выполняющихся слов на момент ошибки. Необходимо отметить, что при отладке состояние большинства флагов реассемблера (информирующих о выполненной команде) не определено.

LDEFinition

PDEFinition

показать на экране (Ldefinition) или распечатать на принтере (Pdefinition) форт-программу, т. е. содержимое рабочего словаря. Кроме этого, выдаётся информация о размере свободной памяти. Эта память используется и для записи вновь определяемых слов и для стека данных при работе форт-программы.

Vlist

выдать на экран список слов базового словаря.

Базовые слова форт-системы анализатора

Поскольку данная реализация форт-системы различает прописные и строчные символы, при наборе базовых слов необходимо следить за соблюдением верного регистра. Базовые слова набираются только прописными символами. Для описании каждого слова показано состояние числового стека до выполнения слова (слева от стрелки) и после выполнения (справа от стрелки).

NOP                                                                       ®

нет операции.

DUP                                                                 n®n n

дублировать содержимое вершины стека. На стеке создаётся копия верхнего элемента.

SWAP                                                     n1 n2 ® n2 n1

перестановка двух элементов на вершине стека.

OVER                                                n1 n2 ® n1 n2 n1

копирование второго от вершины элемента стека. Копия помещается на вершину стека.

ROT                                              n1 n2 n3 ® n2 n3 n1

циклический сдвиг трёх верхних элементов стека. Третий от вершины стека элемент помещается на вершину стека.

DROP                                                                   n ®

удаление верхнего элемента стека.

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

+                                                              n1 n2 ® n3

получить значение суммы двух верхних элементов стека.

-                                                               n1 n2 ® n3

получить значение разности двух верхних элементов стека (n1-n2).

/                                                               n1 n2 ® n3

получить значение частного от целочисленного деления двух верхних элементов стека (n1/n2).

*                                                              n1 n2 ® n3

получить значение произведения двух верхних элементов стека.

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

AND                                                          n1 n2 ® n3

получить значение операции поразрядного логического «И» над двумя верхними элементами стека.

XOR                                                          n1 n2 ® n3

получить значение операции поразрядного логического «Исключающее ИЛИ» над двумя верхними элементами стека.

OR                                                            n1 n2 ® n3

получить значение операции поразрядного логического «ИЛИ» над двумя верхними элементами стека.

NOT                                                               n1 ® n2

инвертировать значение находящееся на вершине стека.

Следующие шесть слов размещают на вершине стека результат сравнения двух верхних элементов стека, при этом сами элементы из стека удаляются. Если условие выполняется на стек заносится значение Истина (1), в противном случае — значение Ложь (0).

=                                                              n1 n2 ® n3

Истина при равенстве элементов, в противном случае Ложь.

<                                                              n1 n2 ® n3

Истина, если n1 меньше чем n2, в противном случае Ложь.

>                                                              n1 n2 ® n3

Истина, если n1 больше чем n2, в противном случае Ложь.

<=                                                             n1 n2 ® n3

Истина, если n1 меньше или равно n2, в противном случае Ложь.

>=                                                             n1 n2 ® n3

Истина, если n1 больше или равно n2, в противном случае Ложь.

<>                                                             n1 n2 ® n3

Истина, если n1 не равно n2, в противном случае Ложь.

Следующие три слова размещают на вершине стека результат сравнения верхнего элемента стека с нулём, при этом сам элемент из стека удаляется.

0=                                                             n1 n2 ® n3

Истина, если элемент равен нулю, в противном случае Ложь.

0>                                                             n1 n2 ® n3

Истина, если элемент положителен (больше нуля), в противном случае Ложь.

<0                                                             n1 n2 ® n3

Истина, если элемент отрицателен (меньше нуля), в противном случае Ложь.

&                                                              n1 n2 ® n3

поместить на вершину стека значение операции логическое «И» над двумя верхними элементами стека, сами элементы при этом удаляются. В отличие от слова AND, слово & работает с логическими величинами (Истина и Ложь).

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

C@                                                                n1 ® n2

разместить на вершине стека байт, считанный по адресу n1.

@                                                                  n1 ® n2

разместить на вершине стека слово (два байта), считанное по адресу n1.

C!                                                                 n1 n2 ®

байт n1 поместить в ячейку памяти, адресуемую n2.

!                                                                   n1 n2 ®

слово (два смежных байта) n1 поместить в память по адресу n2.

BIT                                                           n1 n2 ® n3

разместить на вершине стека значение бита с номером n1 в элементе n2.

ADDR                                                                  ® n

разместить на вершине стека значение адреса на который ссылаются команды работающие с ячейками памяти, такие как LD ( ),reg или SET b,(IX+d). Для других команд на стек помещается значение 0.

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

RD                                                                      ® n

истина, если команда считывает из памяти, и Ложь, если считывания не происходит.

WR                                                                      ® n

истина, если команда производит запись в память,  и Ложь, если запись не выполняется.

ACF                                                                     ® n

помещает на вершину стека значение Истина, если команда использует доступ к ячейке памяти, для других команд -- помещается значение Ложь.

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

CF                                                                      ® n

значение флага переноса.

NF                                                                      ® n

значение флага команды вычитания.

PVF                                                                     ® n

значение флага чётности/переполнения.

HF                                                                      ® n

значения флага двоично-десятичного переноса.

ZF                                                                       ® n

значение флага нулевого результата.

SF                                                                       ® n

значение флага отрицательного результата.

REG                                                               n1 ® n2

размещает на вершине стека значение регистровой пары, соответствующей коду n1.

рег.

n1

рег.

n1

рег.

n1

рег.

n1

рег.

n1

рег.

n1

PC

2

IX

6

HL

10

DE

12

BC

14

AF

22

SP

4

IY

8

HL’

16

DE’

18

BC’

20

AF’

24

CREG                                                             n1 ® n2

размещает на вершине стека значение регистра,  выбираемого кодом n1.

рег.

n1

рег.

n1

рег.

n1

рег.

n1

рег.

n1

рег.

n1

IXn

7

H

11

B

15

D

13

A

23

R

27

IXl

6

L

10

C

14

E

12

F

22

I

28

IYh

9

H’

17

B’

21

D’

19

A’

25

IFF2

26

IYl

8

L’

16

C’

20

E’

18

F’

24

 

 

Следующие шестнадцать слов размещают на вершине стека значения соответствующих регистров. Эти слова введены исключительно для удобства.

SP PC IX IY BC DE HL AF C B E D L H F A                 ® n

Следующие два слова позволяют управлять адресом текущей ячейки монитора.

MEM                                                                    ® n

поместить на вершину стека значение текущей ячейки монитора.

MFM!                                                                   n ®

установить адрес текущей ячейкой монитора n1.

CALL                                                                   n ®

выполнить подпрограмму, расположенную по адресу n1.

IF                                                                       n ®

если верхний элемент стека имеет значение Ложь (равен нулю), то выполнение слова, содержащего IF, прекращается. Управление передаётся вызвавшему слову (либо происходит окончание выполнения форт-программы, если слово является первым). В противном случае (верхний элемент — Истина) продолжается выполнение текущего слова.

?PAUSE                                                                n ®

ожидание нажатия на любую клавишу, если верхний элемент стека имеет значение Истина (не равен нулю). После нажатия на клавишу выполнение программы продолжается. Если во-время ожидания ввести комбинацию EDIT/C, то выполнение форт-программы будет прервано, а управление передано монитору.

KEY                                                                    ® n

ожидание нажатия на какую-либо клавишу, код клавиш будет помещён на вершину стека.

?MEM                                                                     ®

обновить (перевывести) вывести дамп памяти на экран (используется экран дампа памяти теневого монитора).

?REG                                                                      ®

обновить (перевывести) информацию о содержимом регистров на экране монитора.

?DIS                                                                      ®

вывести реассемблер трассируемых команд (в правый верхний угол экрана). Реассемблер выводится по содержимому регистра PC.

?SCR                                                                      ®

полностью перевывести экран теневого монитора.

Следующие четыре слова позволяют работать с системными регистрами компьютера скорпион. Работать с этими регистрами «напрямую» из форт-программы нельзя, так как при этом регистры отражают не состояния отлаживаемой программы, а состояния работы теневого монитора.

SYS1                                                                   ® n

на вершину стека помещается значение системного регистра 7FFDh.

SYS2                                                                   ® n

на вершину стека помещается значение системного регистра 1FFDh

!SYS1                                                                  n ®

значение верхнего элемента стека устанавливается в системном регистре 7FFDh.

!SYS2                                                                  n ®

значение верхнего элемента стека устанавливается в системном регистре 1FFDh.

IFF                                                                     ® n

на вершину стека помещается состояние флага разрешения прерываний в отлаживаемой программе.

Следующие два слова позволяют изменять номер банка ОЗУ установленного в адресах 0C000h-0FFFFh, не прибегая к изменению системных регистров (однако, при установке другого банка, их содержимое тоже будет изменено).

RAM                                                                    ® n

поместить на вершину стека номер установленного банка.

!RAM                                                                   n ®

изменить номер установленного банка на банк, указываемый верхним элементом стека.

Следующие два слова позволяют работать из форт-программы с портами ввода/вывода.

IN                                                                 n1 ® n2

поместить на вершину стека данные, считанные из порта ввода, адресуемого значением верхнего элемента стека.

OUT                                                               n1 n2 ®

вывести в порт вывода с адресом n2 данное n1.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Интервью - интервью с Алексеем Ивановым (координатор ZXNet) об уходе из ZXNet.
Мнение - новый супер Спектрум: Sprinter, для чего он нужен?
Ликбез - Ассемблер: Взгляд издалека (продолжение).
Intro - Оболочка/Help.
Авторы - Редакция газеты.

В этот день...   16 апреля