
- •Команды и директивы
- •Общая структура программы на ассемблере
- •Основные элементы языка ассемблер:
- •Прямая адресация
- •Базовые команды передачи управления
- •Косвенный ближний (внутрисегментный) переход
- •Переходы по условию
- •Команды перехода по условию
- •Цикл со счетчиком
- •Процедуры
- •Доступ к параметрам
- •Средства обработки чисел с плавающей запятой
- •Архитектура сопроцессора
- •Форматы команд
Базовые команды передачи управления
Команды условных переходов делятся на безусловные, когда передача управления в другую точку программы осуществляется в безусловном порядке, независимо ни от каких обстоятельств, на условные, команды, осуществляемые или не осуществляемые в зависимости от тех или иных условий. Команда безусловного перехода – JMP Метка. Безусловные переходы делятся на собственные переходы, без возврата в точку перехода и на вызовы подпрограмм с возвратом после завершения подпрограммы. Данная команда используется в 5 разновидностях: прямой короткий переход (в пределах 127 байт), прямой ближний (в пределах текущего сегмента команд), косвенно ближний (переход осуществляется в рамках текущего сегмента, через ячейку с адресом перехода), прямой дальний (в другой сегмент команд), косвенно дальний (в другой сегмент команд, но через ячейку с адресом перехода). Прямым называется переход, в команде которого в явной форме указывается метка, на которую нужно перейти. При рассмотрении вычисления адреса точки перехода следует иметь в виду явление оборачивания. Если последовательно увеличивать содержимое какого-либо регистра или ячейки памяти, можно перевалить через установленную границу. Тогда, достигнув верхнего предела, содержимое регистра или ячейки памяти станет равным нулю и продолжит нарастать в области малых положительных чисел. Если последовательно уменьшать некое положительное число, то оно, достигнув нуля, перейдет в область отрицательных чисел. Таким образом, при вычислении адреса точки перехода, смещение следует считать числом без знака, но при этом учитывать явление оборачивания. Существует 3 разновидности команды перехода. Во многих случая транслятор может определить вид перехода по контексту программы. В тех же случаях, когда это невозможно, к команде безусловного перехода добавляются следующие атрибуты.
При формировании безусловного перехода принципиальное значение имеет тип данных, над которыми мы выполняем арифметические операции и операции сравнения. Мы используем беззнаковые и знаковые команды. Беззнаковые данные используют все биты как биты данных. Беззнаковыми всегда являются имена, адреса и натуральные числа. Цикл с помощью Jump:
Start: mov ah,2
Mov,dl,’A’
Int 21h
Jmp start
Косвенный ближний (внутрисегментный) переход
Команды косвенных переходов могут использовать различные способы адресации и, соответственно, иметь много разных вариантов и общим для них является:
адрес перехода не указывается явным образом в виде метки
адрес содержится либо в ячейке памяти, либо в одном из регистров, что позволяет при необходимости модифицировать адрес перехода, а также осуществлять переход по известному абсолютному адресу. При ближнем переходе ячейка с адресом состоит из одного слова и содержит только смещение в точке перехода. Адрес задается в одном из регистров общего назначения (SI,DI,BX). Этот способ удобен, так как имеется возможность вычисления адреса перехода и неудобен, так как этот адрес нельзя индексировать
ячейка адреса может быть описана косвенным путем
адрес может задаваться с учетом альтернативных точек перехода, выбор которых зависит от некоторых условий. В этом случае в сегменте данных создаются не одно поле с адресом, а таблица адресов-переходов. В регистр BX Загружается адрес таблицы, а в один из индексных регистров, определенный тем или иным способом.