- •1. Внутренние регистры
- •1.1. Регистры данных
- •1.2. Регистры сегментов
- •1.3. Регистры указателей и индексов
- •1.4. Регистр командного указателя
- •1.5. Флаговый регистр
- •2. Структура и процесс разработки программы на языке ассемблера
- •2.1. Команды
- •2.2. Псевдооператоры
- •2.2.1. Псевдооператор segment
- •2.2.2. Псевдооператор proc
- •2.2.3. Псевдооператор assume
- •2.2.4. Псевдооператор end
- •2.2.5. Псевдооператоры определения данных
- •2.3. Инициализация программы
- •3. Команды пересылки данных
- •3.1. Команда mov
- •3.2. Команды push и рор
- •4. Режимы адресации
- •4.1. Регистровая и непосредственная адресация
- •4.2. Исполнительный адрес
- •4.3. Прямая адресация
- •4.4. Косвенная регистровая адресация
- •4.5. Адресация по базе
- •4.6. Прямая адресация с индексированием
- •4.7. Адресация по базе с индексированием
- •5. Команды передачи управления
- •5.1. Команды call и ret
- •5.2. Команда безусловного перехода jmp
- •5.3. Команды условной передачи управления
- •5.4. Команды управления циклами
- •6. Команды обработки строк
- •6.1. Команды пересылки строк movs, movsb, movsw
- •6.2. Префиксы повторения
- •6.3. Команды сравнения строк. Команда cmps.
- •6.4. Команды сканирования строк
- •6.5. Команды загрузки и сохранения строки
- •7. Взаимодействие языков Си и Ассемблера
- •7.1. Внутренняя структура программы на языке Си для ibm pc
- •7.2. Использование функций на языке Ассемблера
- •7.2.1. Основы взаимодействия языков Си и Ассемблера
- •7.2.2. Передача управления в подпрограмму и обратно
- •7.2.3. Использование глобальных данных
- •7.2.4. Использование аргументов функции
- •7.2.5. Возвращение значения через имя подпрограммы
- •7.2.6. Использование аргументов
- •7.3. Вызов функций на языке Си из программ на языке Ассемблера
- •7.4. Использование локальных данных
- •8. Арифметические команды
- •8.1. Форматы хранения десятичных чисел
- •8.2. Команды сложения
- •8.3. Коррекция результата сложения для bcd-форматов
- •8.4. Команда приращения значения приемника на единицу
- •8.5. Команды вычитания
- •8.6. Коррекция результата вычитания для bcd-форматов
- •8.7. Команда уменьшения содержимого приемника на единицу
- •8.8. Команда обращения знака
- •8.9. Команды умножения
- •8.10. Коррекция результатов умножения
- •8.11. Команды деления
- •8.12. Коррекция результатов деления
- •8.13. Команды расширения знака
- •9. Команды манипулирования битами
- •9.1. Логические команды and, or и xor
- •9.2. Команда логического отрицания nот
- •9.3. Команда проверки test
- •9.4. Команды сдвига и циклического сдвига
- •9.4.1. Команды сдвига
- •9.4.2. Команды циклического сдвига
- •10. Команды работы с флагами
- •10.1. Команды управления флагами
- •10.2. Команды пересылки флагов
- •11. Псевдооператоры определения идентификаторов и операции
- •11.1. Псевдооператоры определения идентификаторов
- •11.2. Операции
- •11.2.1. Арифметические операции
- •11.2.2. Логические операции
- •11.2.3. Операции отношения
- •11.2.4. Операции, возвращающие значения
- •11.2.5. Операции присваивания атрибутов
- •12. Условные псевдооператоры
- •13. Макроопределения
- •13.1. Сравнение макроопределений и процедур
- •13.2. Состав макроопределений
- •13.3. Псевдооператоры макроассемблера
- •13.3.1. Псевдооператор local
- •13.3.2. Псевдооператоры повторения
- •13.3.3. Условные псевдооператоры
- •13.3.4. Псевдооператор eхiтм
- •13.4. Операции в макроопределениях
- •13.5. Задание макроопределений в исходных программах
- •13.5.1. Использование библиотеки макроопределений
- •13.5.2. Указания для задания макроопределений
- •13.5.3. Считывание библиотеки макроопределений в программу
- •13.5.4. Удаление макроопределений
11. Псевдооператоры определения идентификаторов и операции
11.1. Псевдооператоры определения идентификаторов
Псевдооператоры определения идентификаторов EQU (приравнять) и = (знак равенства) позволяют присвоить выражению символическое имя (идентификатор). Формат
имя EQU текст
имя EQU числовое выражение
имя = числовое выражение
Выражение может быть
– 16-битовой константой,
– ссылкой на адрес,
– другим символическим именем,
– префиксом сегмента и операндом,
– меткой команды.
После присваивания имени им можно пользоваться всюду, где требуется указать это выражение.
Псевдооператоры EQU и знак равенства сходны по назначению, но различаются следующим:
1. Определенные знаком "=" идентификаторы можно переопределять, а определенные псевдооператором EQU – нельзя.
2. Псевдооператор EQU можно использовать как с числовыми, так и с текстовыми выражениями, а знак "=" только с числовыми.
Псевдооператор EQU удобен для присваивания простых имен числам, сложным комбинациям адресов и другим подобным объектам, которые неоднократно используются в программе.
Пример.
К EQU 1024 ; Присвоить имя константе
TABLE EQU DS:[BP][SI] ; присвоить имя комбинации адресов
SPEED EQU RATE ; Определить синоним
COUNT EQU СХ ; присвоить имя регистру
11.2. Операции
Операция является модификатором, который используется в операторе языка ассемблера или в псевдооператоре.
Существует пять видов операций:
– арифметические,
– логические,
– отношения,
– операции, возвращающие значения,
– операции присваивания атрибута.
11.2.1. Арифметические операции
Арифметические операции производятся над числовыми операндами и дают числовой результат. Наиболее часто используются операции: сложение (+), вычитание (–), умножение (*) и деление (/). Они имеют формат
значение1 операция значение2
Пример.
CONST = 10
. . .
CONST = CONST +1
Операция деления (/) возвращает частное от деления нацело.
Операция MOD возвращает остаток от деления нацело.
Пример. Операторы
REM1 EQU 31416 / 10000
REM2 EQU 31416 MOD 10000
определят константы REM1 со значением 3 и REM2 со значением 1416.
Операции SHL и SHR имеют формат
значение операция выражение.
Они сдвигают числовой операнд "значение" влево или вправо на число битов, равное значению операнда "выражение".
11.2.2. Логические операции
Логические операции используются для манипулирования отдельными двоичными битами байта или слова. Имеются логические операции AND, OR, XOR и NOT.
Отличие данных операций от команд микропроцессора 8088 в том, что логические команды действуют на этапе исполнения программы (их выполняет микропроцессор), а логические операции – на этапе ее трансляции (под управлением Ассемблера).
11.2.3. Операции отношения
Операции отношения сравнивают два числовых значения или два адреса памяти из одного сегмента и дают числовой результат. Формат операций:
операнд1 операция операнд2
Имеются следующие операции:
Название Признак истинности
EQ |
значения операндов совпадают |
NE |
значения операндов не совпадают |
LT |
операнд1 меньше, чем операнд2 |
GT |
операнд1 больше, чем операнд2 |
LE |
операнд1 меньше, чем операнд2 или равен ему |
GB |
операнд1 больше, чем операнд2 или равен ему |
Результатом может быть одно из двух чисел: 0, если отношение "ложно", и 0FFFFH (65540), если оно "истинно".
Пример. Пусть CHOICE – ранее определенная константа. Тогда оператор
MOV AХ, CHOICE LТ 20
будет во время трансляции заменен на оператор
MOV AX, 0FFFFH
если значение CHOICE меньше 20, или на оператор
MOV AX, 0
если значение CHOICE больше или равно 20.
Так как операции отношения дают только два значения (0 и OFFFFH), то они редко используются сами по себе. Чаще всего они применяются в сочетании с другими операциями для формирования выражений "принятия решения".
Пример.
Пусть требуется загрузить в регистр АХ значение 5, если значение CHOICE меньше 20, и 6 в противном случае. Такую задачу выполнит оператор
MOV АХ, ((CHOICE LT 20) AND 5) OR ((CHOICE GE 20) AND 6)
Если значение CHOICE меньше 20, то выражение (CHOICE LT 20) "истинно", а выражение (CHOICE GE 20) "ложно". Поэтому промежуточная форма приведенного выше оператора будет иметь вид
MOV АX,(0FFFFH AND 5) OR (0 AND 6)
Ассемблер воспримет этот оператор как оператор
MOV АХ, 5
С другой стороны, если значение CHOICE больше или равно 20, то выражение (CHOICE LT 20) "ложно", выражение (CHOICE GE 20) "истинно". Поэтому промежуточная форма примет вид
MOV АX,(0 AND 5) OR (0FFFFH AND 6)
и Ассемблер воспримет ее как оператор
MOV АХ, 6
