Системные программы для «ZX-Spectrum» 1993 г.

BLAST - директивы компилятора. Как взять максимум возможного. Карта памяти. Таблица кодов для входа.


17. ДИРЕКТИВЫ КОМПИЛЯТОРА

BLAST предоставляет определенные возможности выбора при компиляции. Они реализуются посредством директив компиля­тора. Выполняется это специальными выражениями REM в фор­ме:

REM! ДИРЕКТИВА

Восклицательный знак предоставляет для BLAST'a простой способ распознавания, надо ли игнорировать дальнейшее сооб­щение.

Существуют также две дополнительные формы инструкции REM:

REM% — обеспечивает передачу текста или комментария интерпретатору во время работы программы;

REM& — применяется для открывания дополнительных инструкций Бейсика, предусмотренных blast'om. Они будут рассмотрены в соответствующем разделе.

ДИРЕКТИВЫ:

REM! PCODE — по этой директиве BLAST компилирует программу в пи-коды.

REM! MACHINE CODE —генерация в машинные коды.

REM! INT 1,J,K — объявляет переменные I, J, К как целые.

REM! AUTORUN — обеспечивает автоматический запуск откомпилированной программы после загрузки. Эта директива должна быть первой строкой программы.

Ниже приводится список дополнений к Бейсику, которые рас­познаются blast'ом. Они вводятся инструкцией REM&:

1. Включение и выключение клавиши BREAK:

REM& BREAK ON REM& BREAK OFF По умолчанию эта клавиша включена.

2. WHILE'.. WEND. ФОРМА:

REM& WHILE УСЛОВИЕ

REM& WEND

По этим командам блок операторов, замыкаемый REM& WEND, выполняется многократно, пока УСЛОВИЕ истинно (не ноль). Если УСЛОВИЕ ложно, операторы пропускаются.

3. REPEAT .. UNTIL. ФОРМА:

REM& REPEAT

REM& UNTIL <УСЛОВИЕ>

Блок операторов между REM& REPEAT и REM& UNTIL вы­полняется многократно, пока УСЛОВИЕ имеет ненулевое зна­чение. Независимо от УСЛОВИЯ этот блок выполняется хотя бы один раз.

4. DOKE. ФОРМА:                              REM& DOKE ADR,                             Параметры — числовые выражения. Все это — 16-битная инструкция POKE. Результат второго выражения помещается в адрес, на который указывает первое выражение.

5. DEEK — 16-битная PEEK. Форма записи аналогична пре­дыдущей.

6. CALL ФОРМА:

REM& CALL ADR, [СПИСОК ПАРАМЕТРОВ]

Эта команда вызывает процедуру в машинных кодах, содер­жащуюся по адресу, задаваемому выражением ADR. Параметры разделяются запятыми; они могут быть либо числовыми пере­менными в диапазоне от 0 до 65535, либо адресами числовых переменных, тогда они записываются так:

ИМЯ ПЕРЕМЕННОЙ

Эти параметры хранятся в таком порядке, что первый из них находится по адресу, на который указывает регистр IX. Пример:

REM& CALL 50000. X. Y

При входе в процедуру, хранящуюся по адресу 50000, пара­метр Х будет храниться в (IX+0) и в (IX+1), а адрес переменной Y будет храниться в (IX+2), (IX+3).

7. ELSE. ФОРМА:

REM& ELSE СПИСОК ИНСТРУКЦИЙ

Это дополнительное расширение к инструкции IF .. ELSE, которое разрешено во многих версиях Бейсика. Например:

IF   X=0   THEN   GOSUB    100:    REM&   ELSE GOSUB   200

Здесь выполняется переход к строке 100, если ХО, а в про­тивном случае — к строке 200.

Помните, что инструкции IF .. THEN .. ELSE не могут быть вложенными. После ELSE всегда должно стоять двоеточие.

8. МНОГОСТРОЧНЫЕ ИНСТРУКЦИИ

В Бейсике Spectrum'a есть возможность задавать и вызывать функции, определяемые пользователем. Их главным ограниче­нием является только то, что они могут содержать только одну инструкцию, которая должна быть выражением. BLAST расши­ряет эту возможность. Рассмотрим пример инструкции по опре­делению большего из его параметров:

1000 REM& DEF М(А.В)

1010   IF  А   >   В  THEN  LET  M=A:   REM.S ELSE  LET  M=B

1020 REM& ENDPROC

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

 

18. ОПТИМИЗАЦИЯ

BLAST не просто переводит Бейсиковские инструкции в их машиннокодовые аналоги. Он также применяет ряд методов, на­правленных на повышение скорости работы и компактирование объектной программы. Авторы BLAST'a широко пользовались старым принципом программирования: "никогда не откладывай на рабочий прогон то, что можно сделать при компиляции".

Это относится в первую очередь к обработке массивов и стрин-говых переменных. Например, если, скажем, массив А(10,10) был назначен как массив с постоянными границами, BLAST бу­дет знать адреса каждого его заданного элемента, например А(1,2), уже на этапе компиляции. Более того, даже если одна из границ постоянная, например A(l,2), BLAST также улучшит объектный код путем проведения некоторых расчетов индексов переменной во время компиляции. Если в программе имеется много работы с массивами, это даст большой выигрыш в повы­шении скорости вычисления.

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

BLAST различает повторяющиеся места при расчетах слож­ных выражений. В этих случаях он рассчитывает их один раз и далее пользуется результатами.

Если позволяет объем памяти, BLAST формирует область пе­ременных во время компиляции, не оставляя это на прогон. В отличие от Бейсика Spectrum'a, BLAST сначала использует всю доступную память для хранения переменных, а только потом занимается "уборкой мусора" (вычищением ненужных более данных).

Во многих случаях BLAST способен улучшить скорость цик­лов FOR .. NEXT путем предварительного подсчета необходимо­го количества повторов и использования специального счетчика итераций.

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

 

19. КАК ВЗЯТЬ ОТ BLASTa МАКСИМУМ ВОЗМОЖНОГО.

В отличие от Бейсик-интерпретатора, BLAST не тратит время при прогоне программы на поиск строк, данных, определений функций. Он знает их адреса и обращается напрямую.

Чтобы помочь BLAST'y и добиться реализации максимума его возможностей, есть несколько простых принципов, которым надо следовать, дабы переложить как можно больше работы на / процесс компиляции, оставив минимум на рабочий прогон прог­раммы. Возможности, имеющиеся в прилагаемой программе TOOLKIT, позволяют это делать.

Например, избегайте инструкций типа

GOTO выражение

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

Несмотря на то, что переходы из циклов FOR..NEXT и входы в них разрешены, старайтесь этого не делать. Если это сделать, BLAST не сможет заранее предвидеть последовательность опе­раций и тем самым не использует свои наиболее мощные воз­можности по оптимизации.

Пользуйтесь добавленными расширениями к Бейсику. Они компилируются в более быстрые процедуры, чем их аналоги. Старайтесь не объявлять один массив дважды, пользуйтесь пос­тоянными границами.

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

 

20. ПРОГРАММА TOOLKIT

К BLAST'y прилагается довольно обширный набор средств для облегчения разработки программ TOOLKIT.

TOOLKIT автостартует после загрузки и выдает на экран со­общение:

BLAST TOOLKIT 1985

Как и компилятор BLAST, TOOLKIT загружается в верхнюю часть RAM и устанавливает RAMTOP ниже себя. При этом объем доступной памяти снижается примерно на 2К.

TOOLKIT не может находиться в памяти компьютера однов­ременно с blast'om.

Ниже приведен список команд TOOLKIT. Они начинаются со знака "*", обозначаются одной буквой, за ней идут параметры. N1, N2, N3 — обозначает целые числа;

N1 — N2обозначает от строки N1 до строки N2;

N1 -— обозначает от строки N1 до конца программы;

N2 — обозначает от начала программы до конца строки N2. Если номера строк не даны, предполагается, что речь идет о всей программе.

21. КОМАНДЫ ОБРАБОТКИ СТРОК

1) Редактировать строку N1: *'E Nl;

2) Копировать строку N1 в N2: *С N1, N2;

3) Убрать строку N1: *D N1;

4) Перенос строки N1 в N2 (строка N1 уничтожается): *М N1, N2.

 

22. Команды обработки блоков

1) Копирование: *С диапазон, N

По этой команде копируются все строки из заданного диапа­зона в строки, начиная с N.

2) Стирание: *D диапазон.

3) Перенос строк: *М диапазон, N.

4) Перенумерация: *R диапазон, N 1, N2.

Строки из заданного интервала перенумеровываются, им присваиваются номера от N1 с шагом через N2. По умолчанию N2 равно 10.

23. КОМАНДЫ ОБРАБОТКИ СТРИНГОВ

1) Поиск: *F диапазон, N

По этой команде в заданном диапазоне строк разыскивается заданный стринг. По умолчанию программа будет искать^ пос­ледний введенный стринг.

2) Поиск с заменой: *S диапазон N1, N2 Отыскивается первый стринг и заменяется на второй. Новая строка проверяется на синтаксис. Если ошибка есть, то первая же строка, в которой есть ошибка, будет изображена на экране. Все предыдущие строки, где поиск и замена прошли нормально останутся измененными.

 

24. ПРОЧИЕ КОМАНДЫ

1) Трассировка: Т* N

По этой команде на экране печатается номер выполняемой в данный момент инструкции, начиная со строки N. Замедлить вычисления можно клавишей ПРОБЕЛ, а остановить — кла-вишей ENTER.

2) Устранение всех строк REM, кроме тех, которые начина­ются с "!","%", "&": *К.

3) Запись на магнитофон блока программы: *W диапазон, имя файла.

4) Запись на ленту в формате, удобном для компиляции blast'ом с ленты. Программа будет выгружена блоками, сов­местно с информацией, необходимой для компиляции: *В имя файла.

5) Конец работы: *Q.

ПРИЛОЖЕНИЕ 1

КАРТА ПАМЯТИ БЛАСТА

Графика пользователя

 

PRAMT

 

BLAST

 

UDG

 

Стеки GOSUB, машинный стек, свободная область RAM

 

RAMTOP

 

Стек калькулятора

 

STKEND

 

Рабочее пространство

 

STKBOT

 

Область редактирования

 

WORKSP

 

Переменные Бейсика

 

ELINE

 

Программа на Бейсике

 

VARS

 

Информация о каналах

 

PROG

 

Карты микродрайва Системные переменные интерфейса 1 Системные переменные Буфер принтера Атрибуты Экранная память ROM (ПЗУ)

 

CHANS

 

 

ПРИЛОЖЕНИЕ 2

КАРТА ПАМЯТИ ВО ВРЕМЯ РАБОЧЕГО ПРОГОНА ПРОГРАММЫ

Графика пользователя

 

PRAMT

 

a BLAST

 

UDG

 

Стеки GOSUB, машинный стек, свободная область RAM

 

RAMTOP

 

Стек калькулятора

 

STKEND

 

Рабочее пространство

 

STKBOT

 

Область редактирования ^

 

WORKSP

 

Переменные

 

ELINE

 

Откомпилированная программа

 

VARS

 

Информация о каналах

 

PROG

 

Карты микродрайва Рабочие процедуры Системные переменные интерфейса 1 Системные переменные Буфер принтера Атрибуты Экранная память ROM (ПЗУ)

 

CHANS

 

 


ПРИЛОЖЕНИЕ 3

ТАБЛИЦА КОДОВ ДЛЯ ВХОДА В БЛАСТ

 

 

АВС

 

DEF

 

GHI

 

JK

 

LMN

 

OPQ

 

RST

 

UVW

 

XYZ

 

40

 

RYG

 

RYG

 

GRY

 

GW

 

GGY

 

RRY

 

GYG

 

YGW

 

YGG

 

39

 

YGR

 

YWG

 

YGG

 

RG

 

YRG

 

YGG

 

RGR

 

GYG

 

RGR

 

38

 

GYG

 

gyr

 

RGY

 

GY

 

RGY

 

WYR

 

YRG

 

RGR

 

GYG"

 

37

 

RGY

 

GRY

 

GGR

 

YW

 

YRG

 

YGW

 

GYG

 

YGY

 

GGR

 

36

 

YRG

 

GYG

 

RYG

 

GG

 

RGY

 

GRG

 

RGW

 

GYG

 

GGY

 

35

 

GGY

 

YGW

 

YEY

 

GR

 

YRG

 

RGY

 

GYR

 

YGW

 

YRY

 

34

 

RYG

 

RRY

 

GYR

 

YG

 

YYG

 

YYG

 

YRG

 

GRY

 

YGY

 

33

 

YRG

 

YGR

 

YGG

 

RG

 

GGR

 

GRY

 

GYG

 

YRW

 

YRG

 

32

 

RGY

 

GYG

 

RYR

 

YW

 

GGY

 

RGW

 

YGY

 

RGY

 

RYG

 

31

 

GYW

 

GRY

 

GRG

 

GR

 

YGR

 

YRG

 

YGR

 

YRG

 

GRG

 

30

 

YRG

 

YGR

 

YRY

 

RG

 

GRY

 

GYR

 

YRY

 

WYG

 

YGW

 

29

 

RYR

 

GWG

 

GGY

 

RY

 

WYG

 

RGG

 

RYR

 

GGW

 

GRY

 

28

 

GRG

 

YGG

 

YRG

 

YG

 

YGY

 

GRR

 

YGY

 

RRY

 

RGG

 

27

 

RYG

 

RYR

 

RYR

 

GG

 

GWG

 

RYG

 

RWR

 

GYR

 

GRY

 

26

 

YRG

 

GYG

 

YRG

 

YR

 

YGR

 

YRG

 

RGG

 

YWY

 

GYR

 

25

 

GYR

 

YRW

 

GYR

 

GG

 

RYR

 

GYR

 

GYR

 

GYG

 

RGY

 

24

 

RGG

 

RGY

 

GRY

 

WG

 

RGG

 

RGW

 

YGG

 

RGY

 

GYR

 

23

 

GGG

 

YRG

 

RYG

 

GY

 

YRY

 

GRG

 

GWY

 

GRR

 

YGY

 

22

 

YWY

 

RYG

 

YGG

 

YG

 

RYR

 

GYR

 

YRG

 

RGY

 

WYG

 

21

 

GGR

 

RGY

 

GYW

 

GR

 

YGY

 

GGY

 

RRY

 

GRR

 

GRY

 

20

 

RGY

 

YGY

 

RYG

 

RY

 

RYW

 

YRR

 

GYG

 

RYG

 

WYR

 

19

 

YRG

 

GGW

 

YGY

 

GR

 

GWG

 

WGG

 

WGW

 

GGY

 

RRG

 

18

 

RYG

 

RGY

 

RGR

 

RY

 

WYG

 

YRG

 

RYG

 

YGR

 

RGY

 

17

 

YWG

 

YRG

 

RGY

 

GG

 

YGW

 

GYR

 

YGY

 

GYG

 

GYR

 

16

 

GGG

 

RGR

 

YRG

 

RG

 

RGY

 

GGG

 

GGG

 

RGR

 

YRG

 

15

 

YRG

 

YRY

 

WYG

 

RR

 

YRR

 

YRG

 

RYR

 

YRG

 

WYG

 

14

 

GYR

 

RGG

 

YGG

 

RG

 

WGG

 

RGY

 

GWG

 

YGY

 

GGY

 

13

 

GGY

 

GYG

 

YWY

 

GY

 

GWY

 

GRG

 

YGY

 

GYG

 

YRG

 

12

 

RYR

 

GGR

 

GGR

 

YR

 

GWG

 

WYG

 

RGG

 

URG

 

WGY

 

11

 

YRY

 

WGY

 

GRY

 

WY

 

GGY

 

GRY

 

GYG

 

RYR

 

YGR

 

10

 

RRGG

 

RRG

 

RGR

 

YG

 

RYW

 

YGR

 

GGW

 

GWG

 

RGY

 

9

 

GYG

 

RGR

 

YGG

 

GY

 

RGY

 

GGY

 

RYG

 

WYG

 

YYG

 

8

 

RGW

 

YRY-

 

GRY

 

RR

 

GRG

 

RYG

 

YGG

 

YGR

 

GRW

 

7

 

YGR

 

GYW

 

GYG

 

GY

 

GYR

 

YYW

 

GYR

 

GRY

 

RYG

 

6

 

GYR

 

YRG

 

GGR

 

GG

 

RRG

 

RGG

 

YRY

 

WYG

 

YRG

 

 

5

 

YWG

 

GGY

 

YWG

 

YW

 

GGR

 

GYR

 

GYG

 

YGY

 

GYR

 

 

4

 

GGY

 

RGR

 

GGY

 

RR

 

YRG

 

YWY

 

GRY

 

RGW

 

YRG

 

 

3

 

RYR

 

GYG

 

RYR

 

YG

 

RGY

 

GGR

 

RGR

 

GYG

 

RGY

 

 

2

 

YGG

 

GRG

 

YGG

 

RY

 

GRG

 

RYR

 

YRY

 

RGY

 

RYG

 

 

1

 

WYR

 

"YGY

 

WYG

 

YG

 

RYR

 

GWY

 

GYG

 

GRY

 

GGW

 

 

 





СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Mott - Средняя группа: Животные, растения. Старшая и подготовительная к школе группы: Животные, растения.
Мозаика - О новой версии Pro Tracker'a (Golden Disk Corp).
Очумелые_ручки - схема турибирования процессора Z80.
Злоба дня - Как правильно(!) делать дисковые версии программ для ZX Spectrum.
Игры - секреты игры Bard Tales.

В этот день...   21 ноября