ZX-Spectrum & TR-DOS для пользователей и программистов 1994 г.

Ассемблер GENS4 - другие команды. Ассемблирование программы. Сообщения об ошибках.


Другие команды

Run program

Запустить оттранслированную программу с адреса, определенного дирек-
тивой ШТ. Программа выполняется как подпрограмма относительно
GENS4, возврат в редактор происходит по команде процессора RET.

Bye

Возвратить управление интерпретатору Бейсика. Для перезапуска GENS4
из Бейсика используйте оператор:
RANDOMIZE USR ХХХХХ.

Change buffers

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

Include buffer? (Размер входного буфера?)

Macro buffer? (Размер буфера макроопределений?)

Размер входного буфера определяет скорость трансляции программы, запи-
санной на магнитной ленте — чем больше буфер, тем больший фрагмент
текста может быть считан и, следовательно, тем быстрее будет происходить
трансляция. Необходимо учитывать, что при записи файла командой редак-
тора Т и при последующем чтении его командой ассемблера *F размер
входного буфера должен быть одинаковым. В дисковой версии размер
буфера установлен равным 256 байт и не влияет на скорость ассембли-
рования.

Размер буферов рекомендуется задавать перед сеансом работы — сразу
после загрузки GENS4.

Separator [,,D]

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

use RAM Until [Н]

Установить верхнюю границу используемой памяти равной Н. Если аргу-
мент не указан, то на экран выводится текущая верхняя граница памяти.
GENS4 не может размещать текст программ или объектный код в области
памяти выше указанной границы. При ее достижении выдается сообще-
ние об ошибке:
Out of memory!

current Values

Выдать на экран служебную информацию: значение параметров N1, N2,
SI, S2 по умолчанию, символ разделителя, адреса начала и конца текста.

X catalogue [N]

Вывести на экран каталог диска, номер которого определен аргументом
N. По умолчанию выводится каталог диска "А".

Zap text

Удалить текст программы, находящейся в памяти. Выводится запрос:

Delete text (Y/N) (Удалить текст (Да/Нет))

Для уничтожения текста нажмите Y, для отмены операции — любую
другую клавишу.

Help

Вывести на экран перечень команд редактора.

Assemble [0][,T][,F] '

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

Этой команде посвящен следующий раздел описания GENS4,

АССЕМБЛИРОВАНИЕ ПРОГРАММЫ

Ассемблирование (оно же — транслирование, оно же — генерация
объектного кода) — это процесс перевода программы, написанной на ассем-
блере, на единственно понятный для процессора язык — язык кодов команд.

Как уже упоминалось, ассемблирование программы запускается ко-
мандой строчного редактора А. Приведем еще раз ее формат:

Assemble [0][,T][,F]

где

О — ключи ассемблирования (описаны ниже).

Т — размер таблицы символов в байтах. По умолчанию размер таблицы
устанавливается пропорционально размеру исходного текста программы.
Как правило, этого достаточно, но в случае использования большого
количества меток в короткой программе возникает необходимость увели-
чить размер таблицы символов. Если размер таблицы мал, выдается
сообщение:
No Symbol Table space!

F — имя файла на диске, в который будет записан объектный код. Во
время трансляции объектный код предварительно помещается в буфер,
расположенный либо сразу за таблицей символов (ключ 16, см. ниже),
либо начиная с адреса, заданного первой встреченной в программе
директивой ORG. Конец буфера определяется верхней границей доступ-
ной памяти, установленной командой редактора II. При заполнении
буфера его содержимое переписывается на диск, и ассемблирование
продолжается в буфер.

Если имя файла не указано, объектный код будет помещен в память по
адресам, заданным директивами ORG либо ключами ассемблирования.

Режим записи объектного кода на кассету в процессе ассемблирова-
ния не поддерживается.

Ключи ассемблирования:

1 — выдать таблицу символов в конце листинга ассемблирования;

2 — отменить генерацию объектного кода (фактически, в процессе ассем-
блирования производить только проверку синтаксиса программы);

4 — выводить листинг ассемблирования;
8 — переопределить вывод на принтер;

16 — размещать объектный код непосредственно после таблицы симво-
лов; адрес, определенный директивой ENT, игнорировать.
32 — не производить проверку расположения объектного кода в памяти.
Приводит к незначительному ускорению процесса ассемблирования.

Для того, чтобы одновременно задать несколько условий трансляции,
нужно сложить значения соответствующих ключей. Например, трансляция
текста программы с выдачей листинга ассемблирования (ключ 4) на принтер
(ключ 8) без генерации объектного кода (ключ 2) будет выполнена по команде
редактора А14.

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

Ассемблирование происходит в два прохода: на первом проходе про-
веряется синтаксис и формируется таблица символов, в которую заносятся
имена и значения встреченных в программе меток; на втором — создается
объектный код.

Если обнаружена ошибка на первом проходе, трансляция приостанав-
ливается, и на экран выдается сообщение об ошибке. В этой ситуации можно
либо перейти в режим редактирования, нажав клавишу Е, либо продолжить
трансляцию, нажав любую другую клавишу. В конце первого прохода
выдается сообщение:

Pass 1 errors: NN

где NN — количество ошибок, найденных во время первого прохода. При
обнаружении ошибок второй проход выполняться не будет.

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

обнаружите «пропажу» части объектных кодов —■ в строке листинга ассемб-
лирования выводятся только первые четыре байта оттранслированной про-
граммы. Выдачу листинга ассемблирования, а вместе с ним и процесс
трансляции, можно приостановить клавишей Space. После чего, нажав Е, Вы
вернетесь в редактор, а нажатие любой другой клавиши продолжит процесс
трансляции.

При втором проходе могут быть обнаружены лишь две ошибки:
* ERROR* 10 и Bad ORG!» Ошибка «ERROR* 10 не фатальная, поэтому после
выдачи сообщения о ней ассемблирование можно продолжить нажатием на
любую клавишу кроме Е (клавиша Е вернет Вас в редактор). При обнаруже-
нии ошибки Bad ORG! управление сразу передается в редактор.

Вели в процессе трансляции не была обнаружена необходимая метка,
последует предупреждение:

♦WARNING* LabeLName absent
где LabeLName — имя необнаруженной метки.

В конце второго прохода на дисплей выводятся сообщения:
Pass 2 errors NN
Table used: A AAA A from BBBBB

где NN — общее количество ошибок после второго прохода;

ААААА — размер таблицы символов;

ВВВВВ — максимальный размер таблицы символов.

Если в тексте программы была встречена директива ENT, то выдается
сообщение:

Executes: ССССС

указывающее адрес запуска программы командой редактора И.

~ ~ СООБЩЕНИЯ ОБ ОШИБКАХ

♦ERROR* 1 — ошибка в константе;
♦ERROR* 2 — мнемоника не распознана;
♦ERROR* 3 — утверждение сформировано неправильно;
♦ERROR* 4 — символ (метка) определен более одного раза;
♦ERROR+ 5 — строка содержит недопустимый символ;
♦ERROR* 6 — один из операндов в строке не определен;
♦ERRORS 7 — метка является зарезервированным словом;
♦ERROR* 8 — использование недопустимой для данной команды пары ре-
гистров;

♦ERRORS 9 — использование недопустимого для данной команды регистра;

♦ERROR* 10 — величина относительного смещения слишком велика;

♦ERRORS 11 — инструкция не может быть оттранслирована;

*ERROR+ 12 — ошибка в директиве ассемблера;

♦ERROR* 13 — метка, используемая в команде, не определена;

♦ERROR* 14 — деление на ноль;

♦ERROR* 15 — переполнение при операции умножения;
♦ERROR* 16 — вложенное макроопределение;

♦ERROR* 17 — идентификатор не может являться именем макроопределения;
♦ERROR* 18 — рекурсивный вызов макроопределения;
Bad ORG! — операндом директивы ORG является адрес, использование кото-
рого может испортить ячейки GENS4, текстовый файл или
таблицу символов. Управление возвращается в редактор;
No Symbol Table space! — появляется во время первого прохода, если под
таблицу символов выделено недостаточно памяти. Управле-
ние возвращается в редактор;
Out of memory! — нет места для текста программы. Рекомендуется записать
текущий текстовый файл или его часть на магнитный носитель.

ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА

Все зарезервированные слова состоят из заглавных букв. Приведен-
ные ниже слова нельзя использовать как метки:

Все зарезервированные слова состоят из заглавных букв. Приведен-
ные ниже слова нельзя использовать как метки:

Далее приводится список мнемоник команд Z80, директив и команд

Далее приводится список мнемоник команд Z80, директив и команд

ассемблера:

ПРИМЕР СЕАНСА РАБОТЫ

Задача: написать и отладить программу, выводящую на экран числа
в пределах от 0 до 65535 в произвольной системе счисления.

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

Ввод программы:

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

J — Enter;
[SP] - Spice;

[SS/x] - одновременное нажатие клавиш Symbol Shift и x;
[CS/x] — одновременное нажатие клавиш Caps Shift и x.

Ввод строки программы заканчивается нажатием на клавишу Enter:
>IMI,flJ автонумерация строк
Pardon? ошибка в командной строке
>I10,10J

10 ;отладочная часть*

20 ORG 40010 ;адрес размещения подпрограмм

*) Пример вводился и обрабатывался без комментариев.

30 ENT $ определение входной точки

40 CALL 3513 ;очистка экрана

50 LD А,11 установка системы счислении

60 CALL МАК_ТВ ; с основанием 10

70 LD HL,li34S ;печать числа

SO ;подпрограмма печати числа, содержащегося в HL

90 PR_NUM PUSH HL ^сохранение числа

100 PUSH HL ;создание рабочей копии

110 LD HL,(TB_END) ;загрузка адреса конца таблицы

120 LOOP^I DEC HL ; за грузка в DE очередной

130 LD Dr(HL) ; степени числа, находящейся

140 DEC HL ; в таблице

150 LD ШЛНЦ

160 LD A,D ;проверка на достижение конца

170 Oft Е ; таблицы

180 JR NZ,CONT__1 продолжение, если не конец

190 POP НК ;восстановление SP

200 POP HL восстановление числа

210 LD А, 13 ;ASCII-код 13 - перевод строки

220 RST 14 ;печать символа из А

230 RET ;возврат из подпрограммы

240

250 CONT_1 EX (SP|,HL ;восстановление числа

260 XOR А ,-очистка А и сброс бита CY

270 LQOP_2 SIC HL,DE ;расчет очередного разряда

280 IR C,PR_CHR ; числа, результат помещается

290 INC А ; в А, а расчет заканчивается

300 IR LOOP_2 ; при переходе через ноль
310

320 PR_CHR ADD HL,DE ;восстанови. полож. значения

330 ADD A/'i" .получение ASCII-кода

340 CP "Г'4-1 ;если код меньше, чем "9"

350 IR C,CONT_2 ; то переход на печать

360 ADD A,"A"-"f"-1 коррекция кода

370 CONT_2 RST 16 ;печать очерёдной цифры числа

380 EX (SP),HL ;восстан. адреса таблицы

390 JR LOOP_1

400 ; подпрограмма подготовки таблицы степеней, основание

410 ; степени должно быть помещено в аккумулятор

420 МАК_ТВ LD HL,TABLE+4 ;загрузка адреса таблицы

430 PUSH HL сохранение адреса

440 LD DE,1 ;инициал. счетчика степени

450 LOOP_3 LD В,А ; за грузка счетчика цикла

460 LD HL,i ;обнупение результата

470 LOOP 4 ADD HL,DE ;подсчет степени

480 ~ IR С,READY окончание счета (>65535)

490 DINZ LOOP_4 ;цикл подсчета

500 EX DE,HL~ ;загрузка результата в DE

510 READY POP Hfc восстановление адреса таблицы

520 LD |TI_END)fHL ; запись адреса конца таблицы

530 RET С ;выход, при окончании счета

540 LD (HL),E ;запись очередного значения

550 INC HL ; степени в таблицу

560 LD |HL),D

570 INC HL

580 PUSH HL «'сохранение адреса таблицы

590 JR LOOP_3 продолжение цикла

600 ; область данных

610 TB_END DEFW TABLE+2 ;переменная, содержащая адрес
620 ; конца таблицы

630 TBLE DEFW • ;таблица степеней, первые два

640 DEFW 1 ; значения — константы

650 DEFS 3i ;о6ласть для таблицы

660

670 END

680 [CS/1]

>A2J вызов ассемблирования без построения кода
HiSoft GEN Assembler ZX Spectrum
1990 MO A B-Disk version.

Copyright (C) HiSoft 1987
V4.1 All rights reserved
9C58 190 POP HK

• ERROR* 01

J обнаружена ошибка — продолжаем процесс
No Symbol Table space! размер таблицы символов мал
>A2,399J ассемблирование с большим размером таблицы символов
HiSoft GEN Assembler ZX Spectrum
1990 MOA B-Disk version.

Copyright (C) HiSoft 1987
V4.1 All rights reserved
9C58 190 POP HK

♦ ERROR* 01

J

Pass 1 errors: 01

♦WARNING* HK absent ПРЕДУПРЕЖДЕНИЕ: метка не обнаружена
♦WARNING* TABLE absent
Table used: 187 from 300

>E19iJ вызов на редактирование ошибочной строки
190 POP HK

190 X[CS/i]LJJ редактирование осуществляется

190 POP HL последовательным нажатием

соответствующих клавиш

>L6MJ просмотр части листинга
600

610 TB_END DEFW TABLE+2

620

630 TBLE DEFW 0
640 DEFW 1
650 DEFS 30
660

670 END

>E63§J вызов на редактирование ошибочной строки
630 TBLE DEFW 0
630 [S«»]IAJJ
630 TABLE DEFW 0
>A,3MJ ассемблирование с созданием кода
HiSoft GEN Assembler ZX Spectrum
1990 MOA B-Disk version.

Copyright (С) HiSoft 1987
V4.1 Ail rights reserved

Pass 1 errors: 00

Pass 2 errors: 00

Table used: 167 from 300
Executes: 40000

>RJ выполнение программы
12345

>Dflr7IJ удаление отладочной части
>N19,MJ перенумерация строк

>Р 1,2§§М, 1 :UNINUMPR J запись текста программы на диск

ЗАБАВНЫЙ ПРИМЕР ИСПОЛЬЗОВАНИЯ
КОМАНД УСЛОВНОЙ ТРАНСЛЯЦИИ

В соответствующем разделе говорилось, что использование вложения
команд условной трансляции недопустимо. Но, по сути, при последователь-

Каждая из команд условной трансляции самостоятельно управляет одним и
гем же флагом разрешения трансляции, и комбинации команд, которые на

ON_16 EQU 0 ; 1 — present, 0 - not present

ON.128 EQU 1

ONJ3ETA EQU 1

ONLMDRV EQU 0

CONFIG ^ ON_16
DEFM "16K"

IF ON_128

DEFM "128K"
END

IF ON_16 I 1

IF ON_128 I 1

DEFM "48K"

END #

DEFB 13ттОГУРГв$еП

IF ON_BETA

IF ON_MDRV

ucrm вета chsk ana /wicroanve

ON3ETA
DEFM "Beta disk"

IF ON^BETA I 1 & ON.MDRV
ucr/vv microarive

END

!F ON_MDRV @ ON BETA ! 1
DEFM "No drive device*"

END

DEFM " attached"

DEFB 13® #80

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

ПРОГРАММА-ЗАГРУЗЧИК

Если Вы часто пользуетесь GENS4, то полезно написать небольшой
загрузчик на Бейсике. Для дисковой версии он может выглядеть следующим
образом:

I RANDOMIZE USR 0

10 LET ASKVAL "25000"

20 Ф INKEY$<>"" THEN INPUT "New address: ";A
30 RANDOMIZE A: POKE VAL "23877",PEEK VAL "23670":
POKE VAL "23878",PEEK VAL "23671": CLEAR A—SGN PI

40 LET A—PEEK VAL "23670"+VAL "256"*PEEK VAL "23671"
50 RANDOMIZE USR VAL "15619": REM : LOAD "GENS4B"CODE A
60 POKE VAL "23824",NOT PI
70 GO TO NOT PI

После ввода текста программы с клавиатуры запишите ее на диск с
помощью операторов:

CLEAR : РОКЕ 23868,0

RANDOMIZE USR 15619: REM : SAVE "GENS4B"LINE 1

Приведенный загрузчик разместит GENS4 с адреса 25000, но если
при запуске удерживается какая-либо клавиша, то на экране появится
запрос №w address:, на который можно ввести произвольный адрес.

Перезапуск ассемблера после выхода в Бейсик осуществляется опе-
ратором RUN.

Для кассетной версии загрузчик будет выглядеть несколько иначе:

1- RANDOMIZE USR 0
10 LET A—VAL "25000"

20 IF INKEY$<>"" THEN INPUT "New address: ";A
30 RANDOMIZE A: POKE VAL "23765"fPEEK VAL "23670":
POKE VAL "23766",PEEK VAL "23671": CLEAR A—SGN PI

40 LET A^PEEK VAL "23670"-fVAL "256"*PEEK VAL "23671"
50 LOAD "GENS4B"CODE A
60 GO TO HOT PI

Для записи загрузчика на ленту выполните операторы:

CLEAR : РОКЕ 23756,0
SAVE "GENS4"UNE 1




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Sofтинка - Real Information Packer 0.2x - один из самых мощных компрессоров на ZX.
HOT GAMES - Лучшая десятка от Magic Soft.
Устав SpbZxNet - Памятка начинающим СисОпу сети SPbZXNet v1.1.
Хит-парад - Десятка самых популярных игр в Гомеле.
Credits - авторы газеты.

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