Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Основные конструкции ассемблера
При записи операндов и меток используются различные конструкции языка. Рассмотрим основные конструкции. Константы Константа является величиной, которая не изменяется в течение всего времени выполнения программы. Константы могут быть числовые и строчные. Числовые константы могут быть записаны в одной из трех систем счисления - двоичной, десятичной или 16-ричной. Отрицательные константы ассемблером записываются в дополнительном коде (для положительных чисел представление в дополнительном и прямом кодах совпадают). Длина внутреннего представления константы равна 1байт (8 двоичных разрядов) или 2 байта в зависимости от команды, с которой она используется. Система счисления обозначается спецификатором, который может либо предшествовать константе, либо стоять в ее конце. В качестве спецификаторов используются: H, h, $ - 16-ричная система, @ (отсутствие спецификатора) - десятичная система, B, b, % - двоичная система. Если число в 16-ричной системе начинается с буквы, слева от нее должен быть дописан 0 (при спецификаторе H). Пример Коды команд Команды 3E 0C MVI A,12 3E 0A MVI A,@10 3E 05 MVI A,5 3E FB MVI A, -5 3E FA MVI A,@ -6 3E A1 MVI A,0A1H 3E A1 MVI A,$A1 3E A1 MVI A,$0A1 3E 09 MVI A,1001B 3E 09 MVI A,%1001 C3 5634 JMP 03456h В примере приведен фрагмент листинга, полученного в результате трансляции программы, команды которой приведены во второй колонке. В первой колонке приведены полученные коды. Вторым операндом во всех командах MVI являются константы, записанные в различных системах счисления. Первым байтом кода во всех этих случаях является код 3E, соответствующий MVI А. Константа, записываемая в регистр А, представлена в 16-ричной системе вторым байтом кода. Следует обратить внимание на запись чисел 5 и -5 в 3-й и 4-й командах. В команде JMP операндом является адрес перехода, который может иметь длину 2 байта. Символы (символические имена) Символы используются в качестве меток или идентификаторов. Можно использовать знаки А–Z, a–z, 0–9 и _(подчеркивание). Общее количество знаков до 31. В качестве знака в строке не может использоваться пробел. Заглавные и строчные буквы рассматриваемый ассемблер воспринимаeт как одинаковые (например, символы АВС и abc). Символы, которые используются как метки, становятся идентификаторами адресов ячеек памяти, в которых хранятся кодовые слова программы. Они могут применяться в поле метки только один раз.
Символы, используемые в поле операнда, становятся идентификаторами переменных величин, т.е. идентификаторами адресов ячеек памяти данных, где хранятся эти величины или идентификаторами констант. Эти символы должны быть определены либо директивами ассемблера непосредственно в программном файле, либо в командном файле компоновки. Символы действуют только внутри некоторого программного модуля, т.е. для каждого символа имеется некоторая область видимости. Некоторые символы (помимо мнемоник команд и директив ассемблера) являются стандартно определенными или предопределенными, т.е. они зарезервированы ассемблером и не могут использоваться в качестве идентификаторов. Таковыми являются, например, имена регистров РОН. Кроме того, не следует использовать символы x, y и M. Выражения Выражением является последовательность констант, символов, функций, объединенных арифметическими операторами и круглыми скобками. Выражение может являться операндом или частью операнда команды процессора или директивы. Выражение вычисляется при трансляции, т.е. ассемблер может взять на себя задачу расчета фактического значения операнда. Смысл результата вычисления определяется местоположением выражения в программе. Например, результат может являться адресом или значением какой-либо величины (например, величины сдвига). Вычисление выражения подчиняется правилам алгебры и булевой алгебры. Три главных фактора определяют порядок вычисления выражения: · круглые скобки, · ранги арифметических и логических операторов, · направление вычислений. Выражения обычно вычисляются слева направо, если другой порядок вычисления не определяется круглыми скобками или рангами операций. Внутри скобок направление вычислений - также слева направо при равенстве рангов операций. Выражения могут быть абсолютными и относительными (перемещаемыми). Абсолютное выражение состоит из абсолютных величин, например, констант. Относительное содержит относительные (перемещаемые) величины, которые могут изменяться. Например, метки, которые могут меняться при изменении размещения программы в памяти (при компоновке).
Операторы Оператор является символом операции, которая должна быть выполнена. Среди операторов выделяют унарные: т.е. операторы, которые используются с одним операндом (например, знаки числа). Ранги операторов определяют порядок выполнения соответствующих операций в выражении. Некоторые используемые в языке операторы и примеры приведены в табл. 1. Логические операции выполняются поразрядно над совпадающими разрядами двух чисел. Результатом операции сравнения является логическое значение ДА/НЕТ (True/False), которое обозначается двоичным 1/0. Они записываются во все двоичные разряды чисел. Примеры будут приведены в выражениях ниже. Операторы LOW и HIGH определяют байт, который будет использован из слова длиной в 2 байта.
Таблица 1
Для записи логических операторов, операторов сравнения и определения типа операнда можно использовать как строчные, так и прописные буквы. Ниже приведен фрагмент листинга, полученного в результате трансляции программы, команды и директивы которой приведены в третьей колонке. В первой колонке приведены полученные коды. Для директив equ эти коды являются результатом вычисления выражения, являющегося операндом директивы. Вторым операндом во всех командах MVI являются константы, записанные в различных системах счисления. Первым байтом кода во всех этих случаях является код 3E, соответствующий команде MVI А, вторым байтом является результат вычисления выражения. =0003 k equ 1+2 =0005 z equ 5 =0008 t equ Z+3 =0007 k equ +7 =FFF9 l equ -7 =000A x1 equ 10 =FFF7 x3 equ 1-X1 =0032 Y100 equ x1*z =FFFE z4 equ k-x1 =0002 u0 equ 4/2 =0002 n1 equ 7/3 =0002 n2 equ 8/3 =FFEA n3 equ not 21 =0001 n4 equ 31 mod 6 =0001 n6 equ 31 And 1 =001F n7 equ 31 or 1 =3456 n8 equ 3456h 0000' 3E 56 MVI A, low n8 0002' 3E 34 MVI A, high n8 =000D u2 equ 2*6+1 =000E u3 equ 2*(6+1) =0000 n6 equ 5 EQ 6 =FFFF N7 equ 6 le 10 =0000 u4 equ 2 LE 3 AND 2 EQ 5; результат FALSE =FFFF u5 equ 2 LE 3 AND 3 EQ 3; результат TRUE =0000 u6 equ 2 LE 3 AND 3 EQ x1; результат FALSE =0000 u10 equ 2 LE 3 AND 3 EQ y100; FALSE =0000 u11 equ 2 LE 3 AND 3 EQ t; результат FALSE =0000 u12 equ i LE z AND x1 EQ t =0001 u15 equ y2-two*(y2/two) 0006' 0E 0A MVI c,5*2 000A' 06 44 MVI B,567+(6+7) -----> test8.asm:62 ERROR 30: Operand out of range -----> test8.asm:62 ERROR 22: Byte value not in the range -128..+255 0015' 21 0B13 LXI H,567*5 0018' D6 0D SUI u2 001E' D6 FC SUI n1+2 0026' E6 0A ANI x1 005C' FE 01 CPL u/2 Результат вычисления операнда директивы может быть величиной в 2байта. Операнд в команде MVI может быть величиной размером в 1байт; поэтому для команды MVI B,567+(6+7) транслятор выдал сообщения об ошибке ERROR 30 и ERROR 22, которое состоит в том, что операнд находится вне допустимого диапазона (-128...+255). Для команды LXI, которая загружает величину в пару регистров, допускается операнд величиной в 2байта.
Средства макроассемблера Язык макроассемблера отличается от языка ассемблера наличием макросредств, облегчающих составление программ на языке ассемблера. К таким средствам относят макрокоманды, средства организации повторений (циклов) отдельных команд и блоков команд, организацию условного ассемблирования (трансляции) и т. д. Следует отметить, что макросредства не готовят другой конечный продукт, но избавляют программиста от некоторой рутинной работы, например, от многократной записи одной команды при необходимости ее повторения. Рассмотрим здесь только макрокоманды. Макрокоманды При разработке программ часто возникает необходимость в повторении (иногда с модификациями, при других параметрах) некоторой группы команд. Такие группы повторяющихся команд можно оформить как процедуру или подпрограмму. Макроассемблер позволяет применить другой вариант краткой ссылки на часто используемую последовательность команд: такую последовательность можно определить один раз как большую команду - макрокоманду с уникальной мнемоникой, не совпадающей с мнемоникой команд процессора. Макрокоманду после определения ее в начале программы можно рассматривать как входящую в систему команд процессора. Таким образом, использование подпрограмм (процедур) и макрокоманд позволяет сократить длину исходной программы и улучшить ее "читаемость". Но между этими конструкциями языка имеются существенные различия. При использовании подпрограмм в текст исходной программы включается команда CALL, которая реально будет выполняться в процессоре. При ее выполнении происходит передача управления в другое место памяти программ. При использовании макрокоманды ее имя (мнемоника) ассемблером заменяется при трансляции на последовательность команд, определяемых этой мнемоникой. Вышеуказанное приводит к тому, что время выполнения программы при использовании макрокоманд сокращается (по сравнению с использованием подпрограмм) за счет отсутствия команд переходов. При этом длина выполняемой программы (и место, занимаемое программой в памяти) увеличивается за счет многократного повторения команд процессора, входящих в макрокоманду. Макрокомандами можно также объявить часто используемые программистом типовые последовательности действий (процедуры).
Из макрокоманд можно создать библиотеку. Макрокоманды могут быть вложенными друг в друга. Макроопределение и макровызов Макроопределением является набор исходных ассемблерных строк, включающий команды процессора, макрокоманды и директивы ассемблера, который должен выполняться процессором в соответствии с определяемой макрокомандой. Макроопределение обычно располагается либо в начале исходной программы (во всяком случае, до вызова макрокоманды), либо в библиотеке макроопределений. Макроопределение обычно имеет следующую структуру: <имя макрокоманды> директива начала % MACRO [список параметров] [; комментарий] ……………………………….. последовательности команд и директив – тело макрокоманды ……………………………… директива конца макро %ENDM Директива начала %MACRO и директива конца макро % ENDM являются макродирективами, т.е. директивами, которые открывают и завершают макроопределение соответственно. Имя макрокоманды размещается в поле метки, т.е. начинается с первой позиции ассемблерной строки. Последовательность параметров макрокоманды [список параметров] записывается через запятую в поле операнда ассемблерной строки. Параметры в макроопределении являются формальными и заменяются на фактические после макровызова. Макроопределение может не иметь параметров. Через параметры в макроопределении могут задаваться любые операнды и метки. Макровызов имеет следующую структуру: [метка] <имя макрокоманды> [список параметров] [; комментарий] Имя макрокоманды, расположенное в поле мнемоники команды, должно совпадать с именем, расположенным в поле метки соответствующего макроопределения. Последовательность величин (или символов), являющихся фактическими параметрами, записывается через запятую в поле операнда ассемблерной строки. Параметры по количеству и порядку следования должны соответствовать формальным параметрам в макроопределении. Каждый параметр может быть константой или выражением любого типа, распознаваемого ассемблером. Пример 1. Макрокоманда без параметров. В соответствии с данной макрокомандой величина, находящаяся в аккумуляторе умножается на три. Результат остается в А. UMN3 %macro MOV C,A RLC; сдвиг влево на 1 разряд эквивалентен умножению на 2 ADD C %endm Транслятор вместо использованных в тексте программы двух макровызовов этой макрокоманды UMN3 UMN3 подставит макрорасширения (фрагмент взят из листинга) ;UMN3; исходная макрокоманда превращена в комментарий MOV C,A RLC ADD C ;UMN3; исходная макрокоманда превращена в комментарий MOV C,A RLC ADD C Пример 2. Макрокоманда T1 с параметрами и директивой. Макрокоманда использует 4 формальных параметра р1, р2, р3, р4. Используемому внутри макрокоманды символу S присваивается некоторое значение. Так как символ S зависит от параметра и используется только внутри данной макрокоманды, он может принимать при каждом вызове макрокоманды другое значение, поэтому директивой %local он объявляется локальным, т.е. используемым только внутри команд, соответствующих одной макрокоманде.
T1 %macro p1,p2,p3,p4 %local s S equ P1 MVI A,P2+S MVI B,P3+S MVI C,P4+S %endm Транслятор вместо использованных в тексте программы двух макровызовов этой макрокоманды T1 2,3,4,5 T1 6,7,8,9 подставит макрорасширения (фрагмент взят из листинга) ;T1 2,3,4,5; исходная макрокоманда превращена в комментарий ??0000 equ 2 MVI A,3+??0000 MVI B,4+??0000 MVI C,5+??0000 ;T1 6,7,8,9; исходная макрокоманда превращена в комментарий ??0001 equ 6 MVI A,7+??0001 MVI B,8+??0001 MVI C,9+??0001 Транслятор вместо локального символа S для каждого макрорасширения подставляет свою перемещаемую величину??0000 и??0001, абсолютное значение которой будет определено после компоновки. Вместо формальных параметров p2, p3, p4 подставляются фактические параметры, задаваемые в макрорасширениях. Пример 3. Макрокоманда с параметром и локальными метками.Внутри тела макрокоманды в зависимости от результата выполнения команды SUI p производятся условные и безусловные переходы. Так как при каждом вызове макрокоманды адреса переходов будут различны (соответствующие метки переходов должны стоять в разных местах), директивой %local метки, обозначающие адреса переходов, объявляются локальными. DEL %macro p %local L1 L1 SUI p %local L2 JP L2 %local L3 JMP L3 L2 INR C JMP L1 L3 %endm Транслятор вместо использованных в тексте программы двух макровызовов этой макрокоманды DEL 3 DEL 4 подставит макрорасширения (фрагмент взят из листинга) ??0000;DEL 3 SUI 3 JP??0001 JMP??0002 ??0001 INR C JMP??0000 ??0002 ;DEL 4 ??0003 SUI 4 JP??0004 JMP??0005 ??0004 INR C JMP??0003 ??0005 Транслятор вместо локальных меток L1, L2, L3 для каждого макрорасширения подставляет свои величины, абсолютное значение которых будет определено после компоновки. Вместо формального параметра p подставляются фактические параметры, задаваемые в макрорасширениях.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-01-25; просмотров: 619; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.60.35 (0.066 с.) |