Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_New / lections-rtf / lect07.rtf
Скачиваний:
15
Добавлен:
16.04.2013
Размер:
186.94 Кб
Скачать
  1. Ассемблер (продолжение) Команды управления потоком

Группа команд управления потоком представлена в табл. 7.1. Эта группа делится на четыре части.

Таблица 7.1. Команды управления потоком.

Мнемокод / Операнды

Описание

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

call адрес

вызов процедуры

jmp адрес

безусловный переход

ret адрес

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

retn адрес

возврат из ближней процедуры

retf адрес

возврат из дальней процедуры

Команды условного перехода

ja/jnbe короткий адрес

переход, если выше/не ниже или равно

ja/jnbe короткий адрес

переход, если выше или равно/не ниже

jb/jnae короткий адрес

переход, если ниже/не выше или равно

jbe/jna короткий адрес

переход, если ниже или равно/не выше

jc короткий адрес

переход, если был перенос

je/jz короткий адрес

переход, если равно/нуль

jg/jnle короткий адрес

переход, если больше/не меньше или равно

jl/jnge короткий адрес

переход, если больше или равно/не меньше

jle/jng короткий адрес

переход, если меньше или равно/не больше

jnc короткий адрес

переход, если нет переноса

jne/jnz короткий адрес

переход, если не равно/не нуль

jno короткий адрес

переход, если нет переполнения

jnp/jpo короткий адрес

переход, если нет паритета/ паритет нечетный

jns короткий адрес

переход, если нет знака

jo короткий адрес

переход, если по переполнению

jp/jpe короткий адрес

переход, если есть паритет/ паритет четный

js короткий адрес

переход, если есть знак

Команды цикла

jcxz короткий адрес

переход, если cx=0

loop короткий адрес

цикл, пока cx<>0

loope/loopz короткий адрес

цикл, если равно или нуль

loopne/loopnz короткий адрес

цикл, если не равно или не нуль

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

int номер прерывания

вызов прерывания

into

прерывание по переполнению

iret

возврат из процедуры обработки прерывания

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

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

Пример 7.1. Использование подпрограммы AddReg.

IDEAL

MODEL small

STACK 100h

DATASEG

exCode db 0

CODESEG

Start: mov ax,@data

mov ds,ax

mov al,1

mov bl,2

call AddReg

call AddReg

call AddReg

Exit: mov ah,04Ch

mov al,[exCode]

int 21h

Proc AddReg

xor ah,ah

xor bh,bh

adc ax,bx

ret

ENDP AddReg

END Start

Во время пошагового выполнения программы (пример 7.1.) в отладчике td можно заметить, что при исполнении команды call адрес возврата (адреса команды, следующей за командой call) проталкивается в стек. А во время исполнения команды ret адрес возврата выталкивается из стека в регистр ip.

Пример 7.2. Использование команды jmp в качестве задержки.

jmp $+2

Пример 7.3. Использование команды jmp для коротких переходов (длина команды 2 байта).

jmp short ptr m1

;… не более 35-40 команд

m1: ;…

или

m1:

;…не более 35-40 команд

jmp m1

Пример 7.4. Использование команды jmp для внутрисегментных переходов (длина команды 3 байта).

m1:

;…расстояние более 128 байт и менее 64 КБайт

jmp m1

или

.data

addr_m1 dw m1

;…

.code

jmp addr_m1

;…

m1:

или

lea bx,m1

jmp bx

;…

m1: …

Пример 7.5. Использование команды jmp для межсегментных переходов (длина команды 5 байт).

seg_1 segment

;…

jmp far ptr m1; far здесь обязательно

;…

m1 label far

;…

seg_1 ends

seg_2 segment

;…

m2 label far

jmp m1

Соседние файлы в папке lections-rtf