Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 6 Автор курса

advertisement
Программирование на Ассемблер
к.т.н., доц. Красов А.В.
Лекция 6
Факультет
Курс
Семестр
Форма контроля
Лекции
Лабораторные работы
МТС
3
6
зачет
14 часов
12 часов
Автор курса
к.т.н., доцент Красов Андрей Владимирович
директор УИЦ ИТТ, доцент кафедры ИБТС
Куратор специальности
201800 «Защищенные системы связи»
Команды передачи управления
Все команды передачи управления можно разделить на группы:
●безусловная передача управления;
►безусловный переход;
►вызов и возврат из процедуры;
►вызов и возврат из программных прерываний;
●условная передача управления;
►переход по результатам сравнения;
►переход по состоянию флага;
►переход по состоянию регистра ecx/cx;
●команды управления циклами;
►цикл со счетчиком ecx/cx;
►цикл со счетчиком ecx/cx с возможностью выхода из цикла по дополнительному условию.
При организации переходов используются метки. Метка в ассемблере имеет следующие атрибуты: имя сегмента; смешение;
тип метки. Тип метки может принимать следующие значения: near – адрес метки определен только в пределах сегмента; farадрес метки определен полным адресом.
Метка может быть заданна двумя способами:
●оператором «:» (только для меток типа near);
●ключевым словом label.
Формат задания меток с помощью ключевого слова label, приведен на рис. 6.1.
Рис. 6.1. Структура создания меток
Безусловные переходы
Команда безусловного перехода переходит к оператору программы, помеченному указанной меткой. Синтаксис команды
безусловного перехода:
jmp [модификатор] адрес перехода.
Модификатор позволяет преобразовать адрес перехода к определенному типу. Использование режима short ptr позволяет
реализовать переходы не более чем на 127 байт вниз и не более чем на 128 байт вверх (диапазон числа типа short –
128..+127). Этот режим соответствует двух байтному варианту команды jmp.
Прямой вариант команды jmp позволяет организовать переходы в пределах 64Кбайт вверх и вниз по программе.
Косвенный переход. При косвенном переходе в команде jmp задается адрес переменной в которой содержится адрес
перехода. Пример:
L1:
jmp short ptr L1 ; короткий переход
L2:
jmp L2 ; прямой переход
L3:
lea bx, L3
jmp bx ; адрес перехода содержится в регистре bx
.data
label4
dw L4
.code
jmp label4 ; адрес перехода содержится в переменной label4
Команда межсегментного перехода. В этом случае адрес задается значением типа far и имеет длину 5 байт. Пример:
seg_1
segment
…
jmp
far ptr L4
…
seg_1
ends
seg_2
segment
…
L4
label far
…
seg_2
ends
Условные переходы
Таблица 6.1. Команды условного перехода
Процессор поддерживает 18 команд
организации перехода в зависимости от
условий.
Сравнение операндов осуществляется с
помощью команды cmp. Формат команды:
cmp операнд1, операнд2
Результаты сравнения записываются в
регистр флагов.
Команда перехода осуществляет переход на
метку, в зависимости от значения регистра
флагов установленные командой cmp.
Команды перехода приведены в табл.6.1.
Кроме этого процессор поддерживает группу команд перехода в зависимости от значения регистров флагов. Команды
условного перехода представлены в табл. 6.2.
Таблица 6.2. Команды условного перехода
Еще одной возможностью организации
перехода является контроль значения
регистра ecx/cx.
Синтаксис команды:
jcxz метка перехода,
jecxz метка перехода.
Команда jcxz осуществляет переход если
cx = 0, команда jecxz осуществляет
переход если ecx = 0.
Организация циклов
Приведенные выше команды условных переходов позволяют организовать циклы. Однако в языке ассемблера для
организации циклов предусмотрены специальные команды, представленные в таблице 6.3.
Таблица 6.3. Команды организации циклов
Регистр ecx/cx используется при организации циклов в качестве служебного.
Download