Читайте также: |
|
Обычно в программе есть точки, в которых будет приниматься решение о том какая команда будет применятся следующая. Это решение может быть 2х видов:
· Безусловный – в данной точке нужно передать управление не той команде которая идёт следующая, другой, которая находится на некотором удалении.
· Условный – решение о том, какая команда будет выполнятся следующей принимается на основе анализа некоторых условий.
Микропроцессор узнаёт о следующей команде по содержимому пары регистров cs, eip/ip
Cs – сегментный регистр кода, в котором находится физический базовый адрес текущего сегмента кода.
Eip/ip – регистр указателя команды, в котором находятся значения, представляющие собой смещение памяти следующей команды подлежащей выполнению относительно начала текущего сегмента кода.
Таким образом команды передачи управления изменяют значения регистров, в результате чего микропроцессор выполняет переход к другому участку программы. Конвейер внутри микропроцессора при этом сбрасывается.
По принципу действия команды микропроцессора, обеспечивающие организацию перехода, можно разделить на 3 группы:
1. Команды безусловной передачи управления
a. Команда безусловного перехода
b. Вызов процедуры и возврат из процедуры
c. Вызов программ прерываний и возврат из программы прерываний
2. Команды условной передачи управления
a. Команды перехода по результате команды сравнения
b. Команды перехода по состоянию определённого флага
c. Команды перехода по состоянию регистра ecx/cx
3. Команды управления циклом
a. Команды организации цикла со счётчиком ecx/cx
b. Команда организации цикла со счётчиком ecx/cx с возможностью досрочного выхода из цикла по дополнительному условию
Метка – это символическое имя обозначающее определённую ячейку памяти, предназначенную для использования в качестве операндов в командах передачи управления.
Транслятор ассемблера присваивает метке 3 атрибута:
1. Имя сегмента кода где описана метка.
2. Смещение – это расстояние в байтах от начала сегмента кода, в котором описана метка
3. Тип метки или атрибут расстояния
a. Near – это переход на эту метку возможен только в пределах сегмента кода где описана метка. Физически это означает, что для перехода на метку достаточно лишь изменить содержимое регистра eip/ip.
b. far – переход на метку возможен только в результате межсегментной передачи управления, осуществить которую возможно только с помощью изменения как содержимого eip/ip так и регистра cs
Метку можно определить 2 способами:
1. Оператором «:» - с помощью этого способа можно определить метку только ближнего типа. Символическое имя может быть определенно в программе только 1 раз. Определённую таким образом метку можно использовать в качестве операндов в командах условного перехода jcc и в командах безусловного перехода jmp или call. Команды должны находится в сегменте кода, где описана метка.
2. С помощью директивы «label». Её часто используют либо для объявления идентификатора заданного типа, либо для организации доступа к одной области памяти, как к области содержащей данные разных типов
Метка может быть только одного вида: либо near, либо far.
Дата добавления: 2015-11-26; просмотров: 50 | Нарушение авторских прав