- •Вычислительные системы, сети и телекоммуникации: руководство к лабораторным и практическим занятиям
- •1. Арифметические команды
- •2. Логические команды
- •3. Сдвиговые команды
- •4. Команды передачи управления и управления флагами
- •5. Формат строк ассемблера. Метки и их использование
- •6. Директивы распределения памяти
- •7. Сегменты
- •8. Прерывания
- •9. Директивы порядка загрузки сегментов
- •10. Директивы управления программным счетчиком
- •11. Условия
- •12. Процедуры
- •13. Глобальные объявления
- •14. Макроопределения
- •15. Выражения
- •16. Директивы управления файлами
- •17. Резидентные программы
- •Библиографический список
- •Вычислительные системы, сети и телекоммуникации: руководство к лабораторным и практическим занятиям
- •400005, Волгоград, просп. Ленина, 28, корп.1
- •400005, Волгоград, ул. Советская, 35, корп.7
15. Выражения
Работая с ассемблером, мы постоянно сталкивается с такими его элементами как выражения. Они встречались в ранее рассмотренных разделах, но стоит рассмотреть саму суть этого явления. По сути, выражение – это набор чисел, меток или строк, связанных друг с другом операторами. Все выражения вычисляются в ходе ассемблирования, в полученном коде используются только полученные результаты. Ниже рассмотрим основные операторы, используемые для связи частей выражений.
Оператор < >. Часть выражения, заключенная в угловые скобки, не вычисляется, а применяется как строка символов.
Оператор ( ). Часть выражения, заключенная в круглые скобки, вычисляется в первую очередь.
Арифметические операторы: + (плюс), – (минус), * (умножение), / (целочисленное деление), MOD (остаток от деления). Помимо этого, арифметическим оператором принято считать унарный минус. Тот самый, который ставится перед отрицательным числом.
Логические операторы: AND (И), NOT (НЕ), OR (ИЛИ), XOR (исключающее ИЛИ), SHL (логический сдвиг влево), SHR (логический сдвиг вправо). Эти операторы выполняют соответствующие логические действия. Следует напомнить, что их не следует путать с командами, имеющими такое же написание. Отличить легко – логические операторы стоят не в начале командной строки.
Операторы сравнения: EQ (равно), GE (больше или равно), GT (больше), LE (меньше или равно), LT (меньше), NE (не равно). Если условие выполняется – результатом будет единица. В противном случае – ноль.
Операторы адресации:
- SEG выражение – сегментный адрес. Возвращает соответствующую часть адреса своего аргумента;
- OFFSET выражение – смещение. Возвращает соответствующую часть адреса своего аргумента;
- THIS тип – текущий адрес. Создает операнд, адресом которого является текущее значение счетчика;
- тип PTR выражение – переопределение типа. Создает аргумент, адресом которого является значение выражения, а тип указан явно;
- LARGE выражение – 32-битное смещение;
- SMALL выражение – 16-битное смещение;
- SHORT выражение – 8-битное смещение.
Три последних оператора используются с командами передачи управления, если возникают неясности при работе с командами перехода.
Также существуют другие операторы, о которых необходимо упомянуть:
- . (точка) – ссылка на элемент структуры;
- : (двоеточие) – переопределение сегмента;
- [ ] (прямые скобки) – косвенная адресация;
- ? – неинициализированное значение;
- число DUP (значение) – повторяющееся значение.
16. Директивы управления файлами
Отдельное место среди директив ассемблера занимают те из них, которые позволяют включать в текст программы сторонние файлы. Для нас представляют интерес две из них:
1. INCLUDE имя_файла – директива, вставляющая в текст программы текст файла аналогично команде препроцессора C #include. Обычно используется для включения файлов, содержащих определения констант, структур и макросов.
2. INCLUDELIB имя_файла – директива, указывающая компоновщику имя дополнительной библиотеки или объектного файла, который потребуется при составлении данной программы. Например, если используются вызовы процедур или обращение к данным, определенным в других модулях. Использование этой директивы позволяет не указывать имена дополнительных библиотек при вызове компоновщика.
