Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 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 используется при организации циклов в качестве служебного.