Программирование в среде IS-DOS 1993 г.

Директивы ассемблера - команды, управляющие листингом трансляции. Сообщения об ошибках трансляции и реакция ассемблера на них.


5.КОМАНДЫ, УПРАВЛЯЮЩИЕ ЛИСТИНГОМ ТРАНСЛЯЦИИ.

Эти команды находятся в поле метки, не имеют аргументов и всегда начинаются со знака *. Они работают на
втором проходе ассемблирования, изменяя формат вывода листинга на экран или принтер, запрещая и снова разрешая
вывод, реализуя паузу в нужном программисту месте,все это - прямо по ходу трансляции.

*L+ - включает листинг.

*L- - подавляет листинг.

*IF+ - разрешает выдачу строк блоков условной трансляции даже, если трансляция была выключена одной из

директив условной трансляции.

*IF- - исключает из листинга строки блоков условной трансляции, если трансляция была выключена.

i

*А+ - включает в формат вывода строки листинга адрес соответствующей этой строке команды Z80 или бло-

ка данных ( текущее значение программного счетчика ).

*А- - исключает из формата вывода строки текущее значение программного счетчика.

*С+ - включает в формат вывода строки поле данных (код оттранслированной команды Z80 или блок дан-

ных). Длина этого поля может.быть изменена директивой управления листингом (.CODE выражение) по
ходу трансляции и ключом /сос1ечисло на все время трансляции.

*С- - исключает из формата вывода строки поле данных.

*N+ - включает в формат вывода строки ее номер во входном текстовом файле.

*N- - исключает номер из формата вывода строки.

л '

*Т+ - включает в формат вывода строки текст из входного файла.

*Т- - исключает текст из формата вывода строки.

*Н+ - приводит к установке 16-ричного формата вывода адреса инструкций или блоков данных в листинге.

*D- - то же самое. Команда введена для совместимости с GENS4.

*D+ - приводит к установке 10-ричного формата вывода адреса инструкции или блока данных.

*0+ - приводит к установке 8-ричного формата вывода адреса инструкции или блока данных.

*S - при встрече этой команды транслятор переходит в режим ожидания нажатия любой клавиши, давая

возможность лучше рассмотреть листинг. SS А приводит к прекращению трансляции.

Работает только при включенном листинге. Во избежание лишних остановок при выводе на принтер,
для отмены действия этих команд пользуйтесь ключом /-stop.

6.СООБЩЕНИЯ ОБ ОШИБКАХ ТРАНСЛЯЦИИ И РЕАКЦИЯ АССЕМБЛЕРА НА НИХ.
6.1.Ошибки, связанные с невозможностью начать трансляцию.
При возникновении таких ошибок происходит выход в IS'DOS с кодом соответствующей ошибки.
23 - Использован неизвестный ключ в командной строке.

31 - Имя входного файла не введено или имя в командной строке содержит недопустимые символы или символы маски.
51 - Файл ассемблера as.com испорчен.

130 - Не хватает рабочей области памяти для загрузки и работы.

131 - Не инсталлирован драйвер принтера в режиме вывода листинга на принтер.

6.2.Ошибки, возникающие во время трансляции.

Таблица 3 представляет все ошибки трансляции, номера которых выдаются в листинг вместе со всеми его обычными
полями. Показано, ошибки с какими номерами возникают на первом, а какие на втором проходе ассемблирования, и в
каком поле ассемблерной строки возможно ее появление на данном проходе.

Ошибки с номерами 10,14,15,50,51 принято считать несерьезными. Возникновение таких ошибок на первом проходе
трансляции не приводит к запрещению генерации объектного файла, чего нельзя сказать об остальных ошибках
трансляции первого прохода.

Далее последует подробное описание ошибок трансляции.

6.2.1.Ошибки со смыслом, близким к ошибкам трансляции в GENS4.

Error* 2 - мнемоника не распознана.

Error* 4 - метка или константа определена больше одного раза.

Error* 5 - встретился недопустимый знак ASCII в выражении.

Error* 7 - встретился недопустимый знак языка в поле метки или операции.

Error* 9 - недопустимое использование регистров Z80.

Error* 10 - численное значение выражения выходит за рамки допустимого для данной команды или директивы.
Транслятор полагает выражение равным числу 0 и продолжает трансляцию строки.

Error* 13 - ссылка из директивы EQU на не определенный вообще, за все время трансляции символ (в том числе и

на внешний).

Эта ошибка возникает не в строке, где стоит EQU, а лишь на втором проходе, при трансляции
строк команд Z80 или директив DEFW и DEFB, содержащих символы, определенные через такие EQU.

Error* 14 - деление на ноль.В этом случае деление действует как обратная знаковая функция и результатом будет

+1 для отрицательного делимого и -1 для положительного и нулевого.

Error* 15 - переполнение операции умножения.

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

BUFFI EQU #2700*6 недопустимо его использование как некой положительной длины буфера в вы-
ражении типа BUFF2 EQU BUFFI/2, t.k.BUFFI будет интерпретирован транслятором как отрицательная
величина,#А200= -#5Е00, в результате чего BUFF2 получит значение #D100=-#2F00, что никак не рав-
но #2700*3=#5100.

С другой стороны, выражение BUFF1 может использоваться в смысле положительной величины, если с
ним не производится операций деления или умножения,например:

BUFF1-1 ,будет верно как для положительной, так и для отрицательной интерпретации BUFFI , а
для случая: -1*BUFF1 верна лишь отрицательная интерпретация данного значения BUFF1(#2700*6);

6.2.2.Синтаксические ошибки, новые для GENS4 стандарта.

Error* 20 - метка начинается с цифры.

Error* 21 - неверное использование знака ":".

Error* 22 - использование русских букв как допустимых знаков языка запрещено.(Это не касается случаев их ис-
пользования в аргументе DEFM и в выражениях в конструкции с кавычками).

Error* 23 - такая команда управления листингом отсутствует в ассемблере.

Error* 24 - идентификатор с такой мнемоникой в поле операции недопустим. (Этот идентификатор зарезервирован

под регистр Z80 или команду управления листингом).

Error* 25 - встретился нецифровой знак в числе.

Error* 26 - ошибка в выражении, в конструкции "*" или "**", где * - любой допустимый знак ASCII или аль-

терн.кодировки ГОСТа (не допустимая длина такой конструкции).

Error* 27 - данный оператор возведения в степень в выражении - недопустим.

Error* 28 - непонятная запятая в поле операнда.

Error* 29 - отсутствует поле операнда, хотя мнемоника поля операции требует его наличия.

Error* 30 - присутствует поле операнда, хотя и мнемоника поля операции не предполагает его наличия.

Error* 31 - аргументы в поле операнда, не подходят мнемонике поля операции, а также в случае расположения ре-
гистра в аргументе команды Z80 не на первом месте, например:

SET 7,(shift+IX)
вместо стандартного
SET 7,(IX+shift)

Error* 32 - превышение допустимого числа аргументов (52) в директиве.

Error* 33 - отсутствует или не правильно построено выражение (не соблюдена инфиксная скобочная форма записи).

6.2.3.Новые ошибки, связанные с вычислением выражений.

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

*Еггог* 40 - переполнение буфера калькулятора. Возникает только, если выражение будет содержать > 256/4 опера-
торов.

*Еггог* 41 - переполнение буфера EQU ссылок. Возникает только, если число не вычисленных за первый проход

констант определенных через EQU в какой-либо цепочке ссылок достигнет числа > 55.

*Еггог* 42 - вычисленное значение выражения не является абсолютным числом, что не допустимо для данной дирек-
тивы.

*Еггог* 43 - недопустимый аргумент оператора 2".

*Еггог* 44 - переполнение буфера числа, при считывании его из выражения. Транслятор прекращает вычисление вы-
ражения которое теперь остается не определенным, равным произвольному числу.

*Еггог* 45 - запрещенная ссылка из директивы EQU на определяемый ей же символ.

Такая ссылка разрешена, если она случается в строке ,где и находится этот самый символ, нап-
ример:

SYMB EQU SYMB+1 "

В этом случае символ SYMB сначала определяется как метка, и затем ее относительный адрес исполь-
зуется для ее же переопределения с помощью директивы EQU (как происходит и в GENS4).

Но в случае:

FULL EQU EMPTY+200
• • •

EMPTY EQU FULL-300 ,

в строке с командой Z80 или директивами DEFB,DEFW, где используется определение EMPTY или FULL,
возникнет сообщение об ошибке 45, что предупредит возникновение неоднозначности определения сим-
волов.

В случае ошибок, начинающихся с номера 50, транслятор продолжает вычислять выражение, округляя переполнив-
шееся значение или полагая неопределенное равным 0. В некоторых случаях сообщения об ошибках этого разряда
можно рассматривать как "ВНИМАНИЕ!",если требуется выполнить определенные арифметические действия, например,
умножение чисел без знака диапазона до 65536, вычислить знак терма с помощью деления на ноль или в случае,
когда определенная метка в Вашей программе временно не используется.

Из ошибок в стандарте GENS4 к этому разряду относятся: 10, 14, 15.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Вступление - Постоянство - лучший способ уважать традиции.
заключение - авторы и т.д.
"Железная"... логика! - ликбез о логических микросхемах.
Нетмыло - нам, наконец, пришли письма от читателей.
The_hacker_club - Защита CSC:DV-2

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