Автор работы: Пользователь скрыл имя, 20 Октября 2011 в 18:01, реферат
Основные общие особенности языка ассемблера (чаще не совсем точно называемого просто ассемблером; строго ассемблером называется программа, которая является транслятором. Эта программа переводит последовательность команд с языка ассемблера на язык машинных кодов процессора) микропроцессоров совпадают с особенностями всех языков подобного типа. Отметим их основные особенности
Три главных фактора определяют порядок вычисления выражения:
Выражения обычно
вычисляются слева направо, если
другой порядок вычисления не определяется
круглыми скобками или рангами операций.
Внутри скобок направление вычислений
- также слева направо при
Примеры выражений будут рассмотрены ниже.
Выражения могут быть абсолютными и относительными (перемещаемыми). Абсолютное выражение состоит из абсолютных величин, например, констант.
Относительное содержит относительные (перемещаемые) величины, которые могут изменяться. Например, метки, которые могут меняться при изменении размещения программы в памяти (при компоновке).
Операторы
Оператор является символом операции, которая должна быть выполнена. Среди операторов выделяют унарные: т.е. операторы, которые используются с одним операндом (например, знаки числа). Ранги операторов определяют порядок выполнения соответствующих операций в выражении. Некоторые используемые в языке операторы и примеры приведены в табл. 1.
Логические операции выполняются поразрядно над совпадающими разрядами двух чисел. Результатом операции сравнения является логическое значение ДА/НЕТ (True/False), которое обозначается двоичным 1/0. Они записываются во все двоичные разряды чисел. Примеры будут приведены в выражениях ниже. Операторы LOW и HIGH определяют байт, который будет использован из слова длиной в 2 байта.
Таблица 1
Оператор | Операция | Пример | Комментарий (результат) |
Арифметические операции | |||
+ | Унарный плюс
(знак числа) |
+5 | |
+ | Сложение | Z+2 | Сумма |
- | Унарный минус
(знак числа) |
-10 | |
- | Вычитание | t - 7 | Разность |
* | Умножение | 5*6 | Произведение |
/ | Деление | 8/3 | Результатом будет целая часть частного: 2 |
MOD | Значение по модулю | 31 MOD 6 | 31 по модулю
6 будет равно 1 |
Логические операции | |||
NOT | Поразрядное НЕ | NOT 21 | 21= 15h Результат 0EA |
AND | Поразрядное И | 31 AND 1 | Результат 1 |
OR | Поразрядное ИЛИ | 31 OR 1 | Результат 1Fh |
XOR | Поразрядное сложение по модулю 2 | 31 XOR 1 | Результат 1Eh |
Операции сравнения | |||
EQ | = | 5 EQ 6 | False - 0 |
NE | =/ (не равно) | 5 NE 6 | True - 1 |
LT | < | 5 LT 1 | False - 0 |
LE | <= | 5 LE 5 | True - 1 |
GT | > | 6 GT 5 | True - 1 |
GE | >= | 7 GE 8 | False - 0 |
Определение типа операнда | |||
LOW | Младший байт слова | LOW 3456h | 56h |
HIGH | Старший байт слова | HIGH 3456h | 34h |
Для записи логических операторов, операторов сравнения и определения типа операнда можно использовать как строчные, так и прописные буквы.
Ниже приведены
примеры использования
Ниже приведен фрагмент листинга, полученного в результате трансляции программы, команды и директивы которой приведены в третьей колонке. В первой колонке приведены полученные коды.
Для директив 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
MVI C,P4+
%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