Справочник от Автор24
Поделись лекцией за скидку на Автор24

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

  • 👀 416 просмотров
  • 📌 338 загрузок
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Команды передачи управления» pdf
Команды передачи управления Обычно в программе есть точки, в которых нужно принять решение о том, какая команда будет выполняться следующей. Это решение может быть   безусловным — в данной точке необходимо передать управление не той команде, которая идет следующей, а другой, которая находится на некотором удалении от текущей команды; условным — решение о том, какая команда будет выполняться следующей, принимается на основе анализа некоторых условий или данных. Как вы помните, программа представляет собой последовательность команд и данных, занимающих определенное пространство оперативной памяти. Эта пространство памяти может быть либо непрерывным, либо состоять из нескольких фрагментов. То, какая команда программы должна выполняться следующей, микропроцессор узнает по содержимому пары регистров cs:(e)ip:   cs — сегментный регистр кода, в котором находится физический (базовый) адрес текущего сегмента кода; eip/ip — регистр указателя команды, в котором находится значение, представляющее собой смещение в памяти следующей команды, подлежащей выполнению, относительно начала текущего сегмента кода. Таким образом, команды передачи управления изменяют содержимое регистров cs и eip/ip, в результате чего микропроцессор выбирает для выполнения не следующую по порядку команду программы, а команду в некотором другом участке программы. По принципу действия, команды микропроцессора, обеспечивающие организацию переходов в программе, можно разделить на четыре группы: 1. Команды безусловной передачи управления: o команда безусловного перехода; o вызова процедуры и возврата из процедуры; o вызова программных прерываний и возврата из программных прерываний. 2. Команды условной передачи управления: o команды перехода по результату команды сравнения cmp; o команды перехода по состоянию определенного флага; o команды перехода по содержимому регистра ecx/cx. 3. Команды управления циклом: o команда организации цикла со счетчиком ecx/cx; o команда организации цикла со счетчиком ecx/cx с возможностью досрочного выхода из цикла по дополнительному условию. Безусловные переходы Предыдущее обсуждение выявило некоторые детали механизма перехода. Команды перехода модифицируют регистр указателя команды eip/ip и, возможно, сегментный регистр кода cs. Что именно должно подвергнуться модификации, зависит:   от типа операнда в команде безусловного перехода (ближний или дальний); от указания перед адресом перехода (в команде перехода) модификатора; при этом сам адрес перехода может находиться либо непосредственно в команде (прямой переход), либо в регистре или ячейке памяти (косвенный переход). Модификатор может принимать следующие значения:     near ptr — прямой переход на метку внутри текущего сегмента кода. Модифицируется только регистр eip/ip (в зависимости от заданного типа сегмента кода use16 или use32) на основе указанного в команде адреса (метки) ; far ptr — прямой переход на метку в другом сегменте кода. Адрес перехода задается в виде непосредственного операнда или адреса (метки) и состоит из 16-битного селектора и 16/32-битного смещения, которые загружаются, соответственно, в регистры cs и ip/eip; word ptr — косвенный переход на метку внутри текущего сегмента кода. Модифицируется (значением смещения из памяти по указанному в команде адресу, или из регистра) только eip/ip. Размер смещения 16 или 32 бит; dword ptr — косвенный переход на метку в другом сегменте кода. Модифицируются (значением из памяти — и только из памяти, из регистра нельзя) оба регистра, cs и eip/ip. Первое слово/двойное слово этого адреса представляет смещение и загружается в ip/eip; второе/третье слово загружается в cs. Команда безусловного перехода jmp Синтаксис команды безусловного перехода jmp [модификатор] адрес_перехода - безусловный переход без сохранения информации о точке возврата. Адрес_перехода представляет собой адрес в виде метки либо адрес области памяти, в которой находится указатель перехода. Всего в системе команд микропроцессора есть несколько кодов машинных команд безусловного перехода jmp. Их различия определяются дальностью перехода и способом задания целевого адреса. Дальность перехода определяется местоположением операнда адрес_перехода. Этот адрес может находиться в текущем сегменте кода или в некотором другом сегменте. В первом случае переход называется внутрисегментным, или близким, во втором — межсегментным, или дальним. Внутрисегментный переход предполагает, что изменяется только содержимое регистра eip/ip. Можно выделить три варианта внутрисегментного использования команды jmp:    прямой короткий; прямой; косвенный. Процедуры В языке ассемблера есть несколько средств, решающих проблему дублирования участков программного кода. К ним относятся:    механизм процедур; макроассемблер; механизм прерываний. Процедура, часто называемая также подпрограммой, — это основная функциональная единица разделения на несколько частей некоторой задачи. Процедура представляет собой группу команд для решения конкретной подзадачи и обладает средствами получения управления из точки вызова задачи более высокого уровня и возврата управления в эту точку. В простейшем случае программа может состоять из одной процедуры. Другими словами, процедуру можно определить как правильным образом оформленную совокупность команд, которая, будучи однократно описана, при необходимости может быть вызвана в любом месте программы. Для описания последовательности команд в виде процедуры в языке ассемблера используются две директивы: PROC и ENDP. Синтаксис описания процедуры таков : . Синтаксис описания процедуры в программе Из рисунка видно, что в заголовке процедуры (директиве PROC) обязательным является только задание имени процедуры. (Всё, что в квадратных скобках – необязательные параметры). Среди большого количества операндов директивы PROC следует особо выделить [расстояние]. Этот атрибут может принимать значения near или far и характеризует возможность обращения к процедуре из другого сегмента кода. По умолчанию атрибут [расстояние] принимает значение near. Процедура может размещаться в любом месте программы, но так, чтобы на нее случайным образом не попало управление. Если процедуру просто вставить в общий поток команд, то микропроцессор будет воспринимать команды процедуры как часть этого потока и соответственно будет осуществлять выполнение команд процедуры. Фактические параметры стараются передавать в процедуру через регистры общего назначения или через стэк. Условные переходы Микропроцессор имеет 18 команд условного перехода Эти команды позволяют проверить:    отношение между операндами со знаком (“больше — меньше”); отношение между операндами без знака (“выше — ниже”); состояния арифметических флагов zf, sf, cf, of, pf (но не af). Команды условного перехода имеют одинаковый синтаксис: jcc метка_перехода Как видно, мнемокод всех команд начинается с “j” — от слова jump (прыжок), cc — определяет конкретное условие, анализируемое командой. Что касается операнда метка_перехода, то эта метка может находится только в пределах текущего сегмента кода, межсегментная передача управления в условных переходах не допускается Для того чтобы принять решение о том, куда будет передано управление командой условного перехода, предварительно должно быть сформировано условие, на основании которого и будет приниматься решение о передаче управления. Источниками такого условия могут быть:    любая команда, изменяющая состояние арифметических флагов; команда сравнения cmp, сравнивающая значения двух операндов; состояние регистра ecx/cx. Обсудим эти варианты, чтобы разобраться с тем, как работают команды условного перехода. Команда сравнения cmp (compare) Команда сравнения cmp имеет интересный принцип работы. Он абсолютно такой же, как и у команды вычитания. sub операнд_1,операнд_2. Команда cmp так же, как и команда sub, выполняет вычитание операндов и устанавливает флаги. Единственное, чего она не делает — это запись результата вычитания на место первого операнда. Синтаксис команды cmp: cmp операнд_1,операнд_2 (compare) — сравнивает два операнда и по результатам сравнения устанавливает флаги. Флаги, устанавливаемые командой cmp, можно анализировать специальными командами условного перехода. Прежде чем мы их рассмотрим, уделим немного внимания мнемонике этих команд условного перехода Понимание обозначений при формировании названия команд условного перехода (элемент в названии команды jcc, обозначенный нами cc) облегчит их запоминание и дальнейшее практическое использование. Значение аббревиатур в названии команды jcc Мнемоническое обозначение Ee Nn Английский Русский Тип операндов equal not Равно Не Любые Любые Gg Ll Aa greater less above Больше Меньше Выше, в смысле “больше” Числа со знаком Числа со знаком Числа без знака Bb below Ниже, в смысле “меньше” Числа без знака Перечень команд условного перехода для команды cmp операнд_1,операнд_2 Любые Любые Со знаком Мнемокод команды условного перехода je jne jl/jnge Со знаком Со знаком Со знаком Без знака Без знака Без знака Без знака jle/jng jg/jnle jge/jnl jb/jnae jbe/jna ja/jnbe jae/jnb Типы операндов Критерий условного перехода Значения флагов для осществления перехода операнд_1 = операнд_2 операнд_1<>операнд_2 операнд_1 < операнд_2 zf = 1 zf = 0 sf <> of операнд_1 <= операнд_2 операнд_1 > операнд_2 операнд_1 => операнд_2 операнд_1 < операнд_2 операнд_1 <= операнд_2 операнд_1 > операнд_2 операнд_1 => операнд_2 sf <> of or zf = 1 sf = of and zf = 0 sf = of cf = 1 cf = 1 or zf=1 cf = 0 and zf = 0 cf = 0 Команды условного перехода и флаги Мнемоническое обозначение некоторых команд условного перехода отражает название флага, с которым они работают, и имеет следующую структуру: первым идет символ “j” (jump, переход), вторым — либо обозначение флага, либо символ отрицания “n”, после которого стоит название флага. Такая структура команды отражает ее назначение. Мнемокоды команд, названия флагов и условия переходов приведены в таблице. Эти команды можно использовать после любых команд, изменяющих указанные флаги. Команды условного перехода и флаги Флаг переноса cf Команда условного перехода jc Значение флага для осуществления перехода cf = 1 Флаг четности pf Флаг нуля zf Флаг знака sf Флаг переполнения of Флаг переноса cf Флаг четности pf jp jz js jo jnc jnp pf = 1 zf = 1 sf = 1 of = 1 cf = 0 pf = 0 Флаг нуля zf jnz zf = 0 Флаг знака sf Флаг переполнения of jns jno sf = 0 of = 0 Название флага Если внимательно посмотреть на представленные таблицы то, видно, что многие команды условного перехода в них являются эквивалентными, так как в основе и тех, и других лежит анализ одинаковых флагов. Команды условного перехода и регистр ecx/cx Регистр ecx/cx имеет определенное функциональное назначение — он выполняет роль счетчика в командах управления циклами и при работе с цепочками символов. Возможно, что функционально команду условного перехода, связанную с регистром ecx/cx, правильнее было бы отнести к этой группе команд. Синтаксис этой команды условного перехода таков: jcxz метка_перехода (Jump if cx is Zero) — переход, если cx ноль; jecxz метка_перехода (Jump Equal ecx Zero) — переход, если ecx ноль. Нужно отметить ограничение, свойственное команде jcxz/jecxz. В отличие от других команд условной передачи управления, команда jcxz/jecxz может адресовать только короткие переходы — на –128 байт или на +127 байт от следующей за ней команды.
«Команды передачи управления» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot