Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессоры Лекции.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
65.84 Кб
Скачать

Осуществление переходов

Обычно в программе есть точки, в которых будет приниматься решение о том какая команда будет применятся следующая. Это решение может быть 2х видов:

  • Безусловный – в данной точке нужно передать управление не той команде которая идёт следующая, другой, которая находится на некотором удалении.

  • Условный – решение о том, какая команда будет выполнятся следующей принимается на основе анализа некоторых условий.

Микропроцессор узнаёт о следующей команде по содержимому пары регистров cs, eip/ip

Cs – сегментный регистр кода, в котором находится физический базовый адрес текущего сегмента кода.

Eip/ip – регистр указателя команды, в котором находятся значения, представляющие собой смещение памяти следующей команды подлежащей выполнению относительно начала текущего сегмента кода.

Таким образом команды передачи управления изменяют значения регистров, в результате чего микропроцессор выполняет переход к другому участку программы. Конвейер внутри микропроцессора при этом сбрасывается.

По принципу действия команды микропроцессора, обеспечивающие организацию перехода, можно разделить на 3 группы:

  1. Команды безусловной передачи управления

    1. Команда безусловного перехода

    2. Вызов процедуры и возврат из процедуры

    3. Вызов программ прерываний и возврат из программы прерываний

  2. Команды условной передачи управления

    1. Команды перехода по результате команды сравнения

    2. Команды перехода по состоянию определённого флага

    3. Команды перехода по состоянию регистра ecx/cx

  3. Команды управления циклом

    1. Команды организации цикла со счётчиком ecx/cx

    2. Команда организации цикла со счётчиком ecx/cx с возможностью досрочного выхода из цикла по дополнительному условию

Метка – это символическое имя обозначающее определённую ячейку памяти, предназначенную для использования в качестве операндов в командах передачи управления.

Транслятор ассемблера присваивает метке 3 атрибута:

  1. Имя сегмента кода где описана метка.

  2. Смещение – это расстояние в байтах от начала сегмента кода, в котором описана метка

  3. Тип метки или атрибут расстояния

    1. Near – это переход на эту метку возможен только в пределах сегмента кода где описана метка. Физически это означает, что для перехода на метку достаточно лишь изменить содержимое регистра eip/ip.

    2. far – переход на метку возможен только в результате межсегментной передачи управления, осуществить которую возможно только с помощью изменения как содержимого eip/ip так и регистра cs

Метку можно определить 2 способами:

  1. Оператором «:» - с помощью этого способа можно определить метку только ближнего типа. Символическое имя может быть определенно в программе только 1 раз. Определённую таким образом метку можно использовать в качестве операндов в командах условного перехода jcc и в командах безусловного перехода jmp или call. Команды должны находится в сегменте кода, где описана метка.

  2. С помощью директивы «label». Её часто используют либо для объявления идентификатора заданного типа, либо для организации доступа к одной области памяти, как к области содержащей данные разных типов

Метка может быть только одного вида: либо near, либо far.