Работа 5. Команды передачи управления — КиберПедия 

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

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Работа 5. Команды передачи управления

2022-10-05 19
Работа 5. Команды передачи управления 0.00 из 5.00 0 оценок
Заказать работу

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

Для реализации в программе ассемблера разветвляющихся и циклических алгоритмов, а также для вызовов процедур используются команды передачи управления. Эти команды изменяют ход последовательного выполнения программы путем непосредственной модификации значения смещения в командном указателе, а некоторые из них - путем модификации значения регистра сегмента кодов.

Существуют четыре способа передачи управления:

· безусловный переход - jmp;

· условный переход - jnnn (больше, меньше, равно);

· цикл - loop;

· вызов процедуры - call.

В этих командах операндами являются адреса команд, на которые необходимо передать управление. Может быть три типа адресов: short, near, far. Адресация short используется в циклах и некоторых командах условного и безусловного перехода, адресация near и far - для вызовов процедур и переходов, которые не квалифицируются как short.

Команды перехода

Безусловный переход (JMP)

Действие. Выполняет переход по указанному адресу при любых условиях.

Формат команды.

  Код Операнд
<метка>: jmp r,m

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

Флаги. Не меняются.

Примеры:

jmp m1   ;- переход по метке m1 (прямая адресация)

jmp BX;- переход по адресу в BX
                              ;(косвенная адресация)

jmp [BX];- переход по адресу, хранящемуся
                              ;в участке памяти, на который указывает
                              ; адрес в BX

jmp [mdr];- переход по адресу, хранящемуся
                              ;в участке памяти с именем mdr

При компиляции программы компилятор может получать из команды jmp различные машинные коды в зависимости от контекста. Если переход осуществляется в пределах от -128 до +127 байт, то будет генерироваться команда типа short с однобайтовым операндом в пределах от 00h до FFh. Если к моменту просмотра команды jmp ассемблер уже вычислил значение операнда (при переходе назад), то он сгенерирует операнд правильной длины. При передаче управления вперед при первом просмотре компилятор не может заранее определить длину операнда, поэтому он сгенерирует машинный код с максимальной длиной операнда. В этих случаях рекомендуется ассемблеру указывать явно тип операнда, например

jmp short a20

    ...

    ...

a20:...

Условный переход (Jnnn)

Действие. Осуществляет переход по адресу в зависимости от некоторого условия, определяемого значениями разрядов регистра флагов.

Формат команд.

  Код Операнд
<метка>: jnnn r,m

Символы nnn мнемонического кода зависят от проверяемого условия. В остальном формат и действие команд полностью аналогичны команде jmp.

Флаги. Не меняются.

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

Переходы для беззнаковых данных:

Код Условие перехода Проверяемые флаги
je (jz) если равно (ноль) Z
jne (jnz) если не равно (не ноль) Z
ja (jnbe) если выше (не ниже или равно) Z,C
jae (jnb) если выше или равно (не ниже) C
jb (jnae) если ниже (не выше или равно) C
jbe (jna) если ниже или равно (не выше) C,A

Переходы для знаковых данных:

Код Условие перехода Проверяемые флаги
je (jz) если равно (ноль) Z
jne (jnz) если не равно (не ноль) Z
jg (jnle) если больше (не больше или равно) Z, S,O
jge (jnl) если больше или равно (не меньше) S,O
jl (jnge) если меньше (не больше или равно) S,O
jle (jng) если меньше или равно (не больше) Z,S,O

 

Специальные арифметические проверки:

Код Условие перехода Проверяемые флаги
js если есть знак (отрицательно) S
jns если нет знака (положительно) S
jc если есть перенос (аналогично jb) C
jnc если нет переноса C
jo если есть переполнение O
jno если нет переполнения O
jp (jpe) если паритет четный P
jnp (jp) если паритет нечетный P

 

Примеры.

Листинг 5.1. Сравнение беззнаковых значений.

                   mov AX,0F012h
     mov BX,40A3h
     cmp AX,BX
     ja m1
     sub AX,AX
              jmp m2
m1:  sub BX,BX
m2: ...

Листинг 5.2. Сравнение знаковых значений

                   mov AX,0F012h
     mov BX,40A3h
     cmp AX,BX
     jg m1
     sub AX,AX
              jmp m2
m1:  sub BX,BX

m2: ...

Эти два примера совершенно идентичны, за исключением команд условного перехода. В первом примере (листинг 5.1) стоит оператор условного перехода для беззнаковых значений, во втором (листинг 5.2) - для знаковых. Соответственно результат выполнения этих двух фрагментов программ в данном случае будет различным: в первом примере будет переход по метке m1 и будет обнулен регистр BX, во втором - будет обнулен регистр AX. Причина кроется в том, что в первом случае значение 0F012h интерпретируется как беззнаковое и оно, естественно, больше чем 40A3h. Во втором случае это значение интерпретируется как отрицательное число, так как старший знаковый разряд его равен 1, т.е. 0F012h<40A3h.

Команды организации цикла

Команда (LOOP)

Действие. Управляет выполнением группы команд определенное число раз. До начала цикла в регистр CX должно быть загружено число выполняемых циклов. Команда loop находится в конце цикла, где она уменьшает значение в регистре CX на единицу. Если значение в регистре CX не равно нулю, то команда передает управление по адресу, указанному в операнде, иначе управление передается следующей после loop команде.

Формат команды.

  Код Операнд
<метка>: loop m

Здесь разрешена только прямая адресация типа short (в качестве операнда может быть только метка).

Флаги. Не меняются.


Поделиться с друзьями:

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.013 с.