Программирование на ассемблере gens 4 — КиберПедия 

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Программирование на ассемблере gens 4

2022-10-04 49
Программирование на ассемблере gens 4 0.00 из 5.00 0 оценок
Заказать работу

 

Текст рабочей программы на языке ассемблер вводится в GENS4 либо непосредственно с клавиатуры (команда редактора I), либо подгружается с магнитного носителя (команда G). Программа состоит из пронумерованных с произвольным шагом строк, в которые записаны инструкции (команды) языка, метки, комментарии. Кроме команд процессора Z80, представленных в стандартной мнемонике (см. «Система команд Z80»), при написании программ используются специальные инструкции GENS4: директивы ассемблера, команды условной трансляции, макрокоманды, команды ассемблера. Набор, загрузка, редактирование, сохранение и другие операции над текстом ассемблерной программы осуществляются в строчном ре дакторе. Для получения объектного кода* ассемблерный текст __

*)На самом деле GENS4 производит не объектный, а непосредственно исполняемый код.

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

 

____________________________________Формат строки ассемблера

 

Строка исходного текста программы для GENS4 имеет следующий формат:

 

Номер метка мнемоника операнды комментарий

35 START LD HL,LABEL;загрузка регистра

 

Номер строки определяет место расположения строки в тексте ассемблерной программы и необходим только для работы строчного редактора.

При наборе строки переход к следующему полю формата осуществляется нажатием клавиш табуляции (Caps Shift /8) или пробела (Space). Строчный редактор автоматически заменяет пробел на табуляцию. Комментарии отделяются символом «точка с запятой» (;) и могут располагаться, начиная с любого поля. Длина строки программы не может превышать 80 символов.

 

_________________________________________________________Метки

Метка — это имя, присваиваемое строке текста программы. Она используется для указания адреса передачи управления или для определения констант.

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

Метка может быть составлена из символов 0...9,A...Z,a...z,,[,\,],#. Однако первым символом метки непременно должна быть буква. Некоторые примеры возможных меток:

 

Label               эти метки

LABEL               различны

 

Long_Label          эти метки указывают

Long_L              на одно и то же значение

 

Пример использования метки в программе:

 

;сложение 8-разрядного числа с 16-разрядным

ADD A,L     ;сложение младших разрядов

LD L,A     ;запись результата

JR NC,SKIP ;если в результате не возникло переполнение, то следующая инструкция будет пропущена, и управление передано строке с меткой

SKIP INC   Н

 

_____________________________ Счетчик адресов

 

В процессе трансляции счетчик адресов указывает адрес текущей команды и используется для присвоения значений меткам, операндам и т. п. Значение счетчика адресов обозначается символом $.

С применением счетчика адресов предыдущий пример можно переписать без использования метки:

 

;сложение 8-разрядного числа с 16-разрядным

ADD A,L

LD L,A

JR NC,$+3;инструкция JR занимает два байта,

;a INC H - один, т. о. 2+1=3 байта

inc h

...

__________________ ______________ _______________ Выражения

 

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

 

 десятичная константа (38);

 шестнадцатиричная константа (#26);

 двоичная константа (%10110);

 символьная константа ("$");

 

и операторы:

+ сложение;

— вычитание;

& логическое «И» (AND);

@ логическое «ИЛИ» (OR);

! логическое «исключающее-ИЛИ» (XOR);

* алгебраическое умножение;

/ алгебраическое деление;

? функция MOD: A?B=A-(INT(A/B))*B.

 

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

Примеры выражений (при условии, что метка TWIN имеет значение 2):

 

%01100101%0100     результат %110110;

#2BFF?#1040         результат #B7F;

1+2*3-4             результат 5;

#12А2+%111?256   результат #А9;

"А"-10+13           результат "D";

TWIN+12        результат 14.

 

При вычислении значений выражений значащими являются только младшие 16 бит числа (числа от 0 до 65535), например, число 114688 (#1С000) будет интерпретироваться как 49152 (#С000).

Если в результате умножения будет получено число больше 32767, GENS4 выдаст сообщение об ошибке *ERROR* 15 (переполнение). При делении на ноль появится сообщение *ERROR* 14. В остальных случаях переполнение игнорируется.

 

_________________________ ________ ___ Директивы ассемблера

 

Работая в GENS4, Вы получаете возможность, кроме стандартных команд микропроцессора Z80, использовать в программах и так называемые директивы ассемблера.

Мнемоники директив ассемблера записываются в поле мнемоник, операнды директив соответственно в поле операндов.

 

ORG   < выражение >

 

Присвоить значение выражения счетчику адресов*.

EQU < выражение >

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

DEFB  < выражение >[,< выражение >...] *

Последовательно разместить в памяти 8-разрядные значения выражений,

начиная с адреса, указанного счетчиком адресов.

DEFW < выражение >[,< выражение >...]

Последовательно разместить в памяти 16-разрядные значения выражений, начиная с адреса, указанного счетчиком адресов.

DEFS  < выражение >

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

DEFM " string "

Записать символьную строку siring в память, начиная с адреса, указанного счетчиком адресов.

ENT   < выражение >

Установить адрес запуска программы равным значению выражения. Программа будет запускаться по этому адресу командой ре дактора R.___________________________________________________

*)Если предполагается сохранить созданный объектный код на магнитном носителе средствами GENS4, то директива ORG не должна встречаться в программе более одного раза.

_____________________________ ________ _ Макроопределения

 

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

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

Если текст макроопределения не помещается в буфер, то выдается сообщение No Macro Space. Изменить размер буфера макроопределений можно с помощью команды редактора С. В дисковой версии размер буфера по умолчанию установлен равным нулю.

Макроопределение задается директивами ассемблера MAC и ENDM, первая из которых указывает на начало макроопределения, вторая — на конец, например:

 

;сложение 8-разрядного числа с 16-разрядным

ADDNUM MAC

      ADD A,L

      LD  L,A      тело

      JR  NC,$+3       макроопределения

      INC H

      ENDM

 

После включения в текст программы этого макроопределения для сложения аккумулятора с регистровой парой HL можно применять макрокоманду ADDNUM.

В макроопределение можно включать до 16 параметров, которым присваивается значение следующих за макрокомандой выражений:

 

ИМЯ_МАКРООПРЕДЕЛЕНИЯ [параметр1 [....[.параметр 16]]]

 

В качестве параметров разрешается передавать только числовые значения.

В теле макроопределения параметр вызывается указанием его номера следования в макрокоманде, перед которым ставится знак =. При этом номер задается четырьмя младшими битами кода символа, расположенного сразу за знаком равенства. Например, ссылка на первый параметр может выглядеть как =0, =@ или =Р; на второй — =1, =А или =а. Обратите внимание, что ссылка на шестнадцатый параметр будет выглядеть как =?, =О или =о, а не =16, Правда, из-за ограничения длины строки 80-ю символами ис пользовать все 16 параметров довольно затруднительно._______

*)Аргументы в квадратных скобках являются необязательными.

В следующем примере задано макроопределение, заполняющее область памяти некоторым значением и имеющее три параметра: адрес начала области, длину и значение байта-заполнителя:

 

FILL   MAC

LD     HL,=0

LD DE,=0 + 1

LD BC,=1 - 1

LD   (HL),=2

LDIR

ENDM

 

Это макроопределение вызывается, например, такой макрокомандой:

 

FILL 16384,22528-16384,%01011010

 

Учтите, что макроопределения не могут быть вложенными или рекурсивными. Не пытайтесь также в текст макроопределения включать строки с метками — ассемблер размножит эти метки столько раз, сколько раз будет вызвано макроопределение, что приведет к неминуемым ошибкам трансляции.

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

Разрешать или запрещать включение текста макроопределения в листинг ассемблирования можно командами ассемблера *М+ и *М— (см. ниже).

_________ __________________ __ Команды условной трансляции

 

Иногда бывает необходимо, в зависимости от выполнения тех или иных условий, получать различные варианты объектного кода программы. Работая в GENS4, Вы сможете добиться этого, используя команды условной трансляции IF, ELSE и END. С их помощью можно устанавливать или сбрасывать флаг разрешения трансляции, чем соответственно разрешать или запрещать ассемблирование фрагментов текста программы.

 

IF < выражение >

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

ELSE

Инвертировать флаг разрешения трансляции. Если перед появлением ELSE ассемблирование было разрешено, то запретить его, и наоборот.

END

Установить флаг разрешения трансляции. После этой команды -

 *)Обратите внимание, что проверка синтаксиса программы осуществляется и при запрещенной трансляции.

ранее прерванное ассемблирование продолжается нормально.

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

 

____________________________________Команды ассемблера

 

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

Команды ассемблера записываются в поле метки и не должны содержать разделителей (табуляций). В командах и * F операнд необходимо отделить пробелом.

 

* Е

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

* Н string

Напечатать заголовок. В листинг включается строка string. Она будет выводиться также после каждого выполнения команды *Е.

* S

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

* L +

Разрешить выдачу листинга.

* L -

Запретить выдачу листинга.

* D +

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

* D -

Выводить значение счетчика адресов в шестнадцатиричном виде.

* C -

Выводить сокращенный листинг ассемблирования. Строки сокращенного листинга не содержат объектного кода. Таким образом, они укорачиваются на 9 символов, что делает листинг более удобным для чтения. Команда используется преимущественно в 32-символьной версии GENS4.

* С +

Выводить полный листинг ассемблирования.

* M +

Разрешить распечатку текста макроопределений.

* M -

Запретить распечатку текста макроопределений.

* F filename

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

 

СТРОЧНЫЙ РЕДАКТОР

 

Встроенный в GENS4 строчный редактор позволяет вводить и редактировать текст программы на языке ассемблера. Управление редактором осуществляется с помощью команд редактора, которые вводятся на подсказку > и имеют следующий формат:

 

C[N1],[N2],[S1],[S2]

где С — собственно команда;

N1,N2 — числа в пределах от 1 до 65535 включительно;

S1,S2 — строки, состоящие не более чем из 20 символов.

 

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

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

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

 

РР1,20000,G.WINDOWS

 

то команда выполнена не будет, а редактор сделает Вам замечание: Pardon?. Исправьте ошибку и введите команду правильно:

 

P1,20000,G.WINDOWS

 

КОМАНДЫ РЕДАКТОРА

 

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

 

___________________________________________Вставка строк

 

I nsert [ N ][, M ]*

Автоматически генерировать строки, начиная со строки N и шагом М. После ввода команды Вы можете производить последовательный набор текста программы. Отказаться от генерации строк можно, нажав клавишу Edit (Caps Shift /1). Если в процессе ввода программы номер строки превысит 32767, то генерация строк прекратится._________________________

*)Аргументы в квадратных скобках являются необязательными, при их пропуске, как правило, используется Значение параметра по умолчанию.

Строку также можно вставить в программу, введя на подсказку > ее номер и через пробел — текст.

____________________________Вывод листинга программы

L ist [ N ][, M ]

Вывести на экран листинг программы со строки N по строку М включительно. По умолчанию N равно 1, М — 32767. Листинг выводится по страницам. Переход к следующей странице происходит по нажатию любой клавиши, кроме Edit, нажатие которой прервет выдачу листинга и вернет управление редактору.

 

K onfigure list N

Установить количество строк в странице листинга.

 

W rite text [ N ][, M ]

Распечатать на принтере текст программы со строки N по М включительно.

Если N и М не указаны, то будет распечатана вся программа.

_________Редактирование текста ассемблерной программы

 

re N umber [ N ][, M ]

Перенумеровать строки программы, начиная с первой строки, которой присваивается номер N, с шагом М. Если в результате выполнения команды номер какой-либо строки может превысить 32767, то команда не выполняется.

 

D elete N, M

Удалить строки от N до М включительно. Если М меньше N, или определено менее двух аргументов, то команда игнорируется. Отдельная строка может быть удалена просто введением ее номера.

 

M ove [ N ][, M ]

Копировать строку с номером N в строку с номером М. Если строки с номером N не существует, то команда игнорируется. Если строка с номером М существует, ее содержимое заменяется содержимым строки N. Аккуратно используйте эту команду — старайтесь не вызывать ее без аргументов.

 

F ind [ N ][, M ][, Fs ][, Ss ]

Найти стринг (строку текста) Fs в программе, начиная со строки N и до строки М. Если такая строка найдена, то она отображается на экране и GENS4 переходит в режим редактирования строки, причем курсор устанавливается на начало найденного стринга. В режиме редактирования можно заменить стринг Fs на стринг Ss (см. команду редактора Е).

 

E dit N

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

 

SPACE — переместить курсор на одну позицию вправо;

CAPS SHIFT /0 — переместить курсор на одну позицию влево;

CAPS SHIFT /8 — переместить курсор на следующую позицию табуляции;    

L ist - отобразить на экране текущее состояние строки;

K ill — удалить символ в указанной курсором позиции;

Z ap — удалить все символы, начиная с указанного курсором и до конца строки;

F ind — найти следующее появление в тексте программы стринга, ранее определенного командой редактора F;

S wap — заменить найденный стринг Fs на стринг Ss, ранее определенный командой редактора F, и искать следующее появление стринга Fs;

I nsert — перейти в режим «вставка». Выход из режима осуществляется нажатием Enter;

e X pand — переместить курсор в конец строки и включить режим «вставка»;

C hange — перейти в режим «замена». Выход из режима осуществляется нажатием Enter;

Q uit — прервать редактирование строки: вызванную на редактирование стро­ку записать в программу в исходном виде, все изменения игнорировать;

R eload — перезагрузить буфер редактирования: вызванную на редактиро­вание строку перезаписать в буфер в исходном виде, все измене­ния игнорировать;

ENTER — завершить редактирование строки: поместить отредактированную строку из буфера в текст программы.

 

_______________________Работа с дисководом и магнитофоном

 

Текст программы и объектный код можно сохранить как на магнитной ленте, так и на дискете. Тип накопителя задается форматом имени файла. При работе с дисководом вторым символом в имени должен стоять знак двоеточия (:). Если знак двоеточия отсутствует в имени файла, то в качестве носителя будет использоваться магнитная лента. Формат имени файла для дисковых устройств:

 

X: filename,

где X — номер устройства (1...4, что соответствует дисководам "A"..."D").

Напомним, что имена файлов для магнитофона должны содержать не более 10 символов, для дисковода — не более 8.

 

G et text [,, S ]

Загрузить с магнитного носителя программу из файла с именем S. Если стринг S пустой, с магнитофона будет считываться первый встреченный файл. Если в памяти уже находится программа, то загружаемый файл будет присоединен к ней. Строки полученной программы будут перенумерованы, начиная с номера 1 и с шагом 1.

 

P ut text [ N ][, M ][, S ]

 

Записать на магнитный носитель программу со строки N до М включительно в файл с именем, заданным стрингом S. По умолчанию используются аргументы, установленные предыдущей командой.

 

Примеры.

 

Записать строки с номерами от 20 до 400 включительно на магнитофон в файл с именем MAINPROG:

 

P 20,400, MAINPROG

 

Записать всю программу на дисковод "В" в файл с именем MIRACLE:

 

P 1,32767,2: MIRACLE

 

Если при записи на диск файл с указанным именем уже существует, то (в зависимости от версии GENS4) будет выведен запрос:

 

Overwrite (Y/N)? (Переписать (Да/Нет)?)

или

File exists Delete (Y/N)? (Файл найден Удалить (Да/Нет)?)

 

Для удаления существующего файла и записи нового нажмите Y; для отмены операции — любую другую клавишу.

 

Т ареfor include [ N ][, M ][, S ]

Записать программу в специальном формате. Записать на магнитную ленту в файл с именем S фрагмент программы со строки N по М в специальном формате для последующего включения в процесс трансляции по команде ассемблера * F. Файл разбивается на блоки, длина которых равна размеру входного буфера (см. команду редактора С).

 

O bject save [,, S ]

Записать на магнитный носитель объектный код в файл с именем S (записывается код. созданный после последней директивы ORG). Если объектный код не создан, команда будет проигнорирована.

 

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

 

R un program

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

B ye

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

C hange buffers

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

 

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

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

 

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

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

 

S eparator [,, D ]

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

 

use RAM U ntil [ H ]

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

 

Out of memory!

 

current V alues

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

 

X catalogue [ N ]

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

 

Z ap text

Удалить текст программы, находящейся в памяти. Выводится запрос: Delete text (Y/N) (Удалить текст (Да/Нет))

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

 

H elp

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

 

A ssemble [ O ][, T ][, F ]

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

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

 

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

 

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

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

 

A ssemble [ O ][, T ][, F ]

 

где

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

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

 

No Symbol Table space!

 

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

Если имя файла не указано, объектный код будет помещен в память по адресам, заданным директивами 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: AAAAA from BBBBB

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

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

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

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

Executes: CCCCC

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

 

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

 

*ERROR* 1 — ошибка в константе;

*ERROR* 2 — мнемоника не распознана;

*ERROR* 3 — утверждение сформировано неправильно;

*ERROR* 4 —символ (метка) определен более одного раза;

*ERROR* 5 — строка содержит недопустимый символ;

*ERROR* 6 — один из операндов в строке не определен;

*ERROR* 7 — метка является зарезервированным словом;

*ERROR* 8 — использование недопустимой для данной команды пары регистров;

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

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

*ERROR* 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! — нет места для текста программы. Рекомендуется записать текущий текстовый файл или его часть на магнитный носитель.

 

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

 

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

 

А   В   С   D   Е

Н   L   I   R   $

AF  AF' ВС  DE  HL

IX  IY  SP  NC  Z

NZ  М   Р   РЕ       PO

 

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

ADC ADD AND BIT CALL

CCF CP  CPD CPDR CPI

CPIR CPL DAA DEC DI

DJNZ El  ЕХ  EXX HALT

IM  IN  INC IND INDR

INI INIR JP  JR  LD

LDD LDDR LDI LDIR NEG

NOP OR  OTDR OTIR OUT

OUTD OUTI POP PUSH RES

RET     RETI RETN RL  RLA

RLC RLCA RLD RR  RRA

RRC RRCA RRD RST SBC

SCF SET SLA SRA SRL

SUB XOR

DEFB DEFAA DEFS DEFW ELSE

END ENT EQU IF  ORG

MAC  ENDM

*D  *E  *H  *L  *S

*C  *F  *M

 

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

 

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

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

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

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

 

@- Enter;

[ SP ] - Space;

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

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

 

Ввод строки программы заканчивается нажатием на клавишу Enter:

> II10,10 @ автонумерация строк

Pardon? ошибка в командной строке

> I10,10 @

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

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

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

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

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

 50     LD A,10    ;установка системы счисления

 60     CALL MAK_TB  ; с основанием 10

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

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

 90 PR _ NUM PUSH HL      ;сохранение числа

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

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

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

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

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

150     LD E,(HL)

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

170      OR Е       ; таблицы

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

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

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

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

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

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

240

250 CONT _1 ЕХ (SP), HL;восстановление числа

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

270 LOOP _2 SBC HL, DE   ';расчет очередного разряда

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

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

300     JR LOOP_2,; при переходе через ноль

310

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

330     ADD A,"0"   ;получение ASСII кода

340     СР "9"+1    ;если код меньше, чем "9"

350     JR C,CONT_1; то переход на печать

360     ADD А,"А"—"9"—1;коррекция кода

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

380  


Поделиться с друзьями:

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

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.339 с.