То, какая команда программы должна выполняться следующей, микропроцессор узнает по содержимому пары регистров cs:(e)ip: 1) cs – сегментный регистр кода, в котором находится физический адрес текущего сегмента кода; 2) eip/ip – регистр указателя команды, в нем находится значение смещения в памяти следующей команды, подлежащей выполнению. Безусловные переходы Что должно подвергнуться модификации, зависит: 1) от типа операнда в команде безусловного перехода (ближний или дальний); 2) от указания перед адресом перехода модификатора; при этом сам адрес перехода может находиться либо непосредственно в команде (прямой переход), либо в регистре памяти (косвенный переход). Значения модификатора: 1) near ptr – прямой переход на метку; 2) far ptr – прямой переход на метку в другом сегменте кода; 3) word ptr – косвенный переход на метку; 4) dword ptr – косвенный переход на метку в другом сегменте кода. Команда безусловного перехода jmp jmp [модификатор] адрес_перехода Процедура или подпрограмма, – это основная функциональная единица декомпозиции некоторой задачи. Процедура представляет собой группу команд. Условные переходы Микропроцессор имеет 18 команд условного перехода. Эти команды позволяют проверить: 1) отношение между операндами со знаком («больше – меньше»); 2) отношение между операндами без знака («выше – ниже»); 3) состояния арифметических флагов ZF, SF, CF, OF, PF (но не AF). Команды условного перехода имеют одинаковый синтаксис: jcc меткаперехода Команда сравнения cmp имеет интересный принцип работы. Он абсолютно такой же, как и у команды вычитания – sub операнд_1, операнд_ 2) Команда cmp так же, как и команда sub, выполняет вычитание операндов и устанавливает флаги. Единственное, чего она не делает – это запись результата вычитания на место первого операнда. Синтаксис команды cmp – cmp операнд_1, операнд_2 (compare) – сравнивает два операнда и по результатам сравнения устанавливает флаги. Организация циклов Организовать циклическое выполнение некоторого участка программы можно, к примеру, используя команды условной передачи управления или команду безусловного перехода jmp: 1) loop меткаперехода (Loop) – повторить цикл. Команда позволяет организовать циклы, подобные циклам for в языках высокого уровня с автоматическим уменьшением счетчика цикла; 2) loope/loopz меткаперехода Команды loope и loopz – абсолютные синонимы; 3) loopne/loopnz меткаперехода Команды loopne и loopnz также абсолютные синонимы. Команды loope/loopz и loopne/loopnz по принципу своей работы являются взаимообратными.