Команды передачи управления
Команды передачи управления позволяют реализовывать нелинейное выполнение программы, при котором за текущей командой будет выполняться не следующая команда, а какая-либо другая, расположенная на некотором удалении от текущей. Такой переход бывает безусловным (когда просто выполняется передача управления на команду находящуюся на некотором удалении от текущей команды) и условным (решение о том, какая команда будет выполняться следующей после текущей, принимается на основе анализа каких-либо условий или данных).
Как уже отмечалось в разд.2 адрес следующей подлежащей выполнению команды хранится в паре регистров CS:IP. В сегментном регистре CS содержится физический адрес начала сегмента кода, в регистре указателе команд IP содержится смещение в памяти следующей подлежащей выполнению команды относительно начала сегмента кода. Следовательно, команды передачи управления модифицируют регистры CS и IP, в результате чего МП выбирает для выполнения не следующую по порядку команду, а команду в каком-либо другом месте программы. В дальнейшем мы будем рассматривать только те команды, которые реализуют внутрисегментные переходы (сам сегмент не изменяется и регистр CS также не изменяется).
По принципу действия команды МП, обеспечивающие организацию переходов в программе, можно разделить на три группы:
1. Команды безусловной передачи управления:
– команда безусловного перехода;
– команды вызова процедуры и возврата из процедуры;
2. Команды условной передачи управления:
– команды перехода по результату команды сравнения;
– команды перехода по состоянию определенного флага;
– команда перехода по содержимому регистра CX.
3. Команды управления циклом.
То место, куда необходимо передать управление определяется с помощью метки. Метка – символическое имя, обозначающее определенную ячейку памяти, куда необходимо осуществить переход и предназначенное для использования в качестве операнда в командах передачи управления. Сам адрес перехода транслятор рассчитывает самостоятельно.
Метку можно описать, используя оператор «:» (двоеточие). Формат описания приведен на рис.9.1.
Рис. 9.1. Формат описания метки
Например:
m1: MOV AX,BX
…
m2:
LEA DX