Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_2011.doc
Скачиваний:
64
Добавлен:
09.12.2018
Размер:
1.15 Mб
Скачать

Второй сегмент

seg2 segment

…………..

m2 label far

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

seg2 ends

Если метка в тексте программы встречается раньше, чем обращение к ней, то модификатор far ptr можно не указывать.

Косвенный межсегментный переход.

Адрес метки должен быть записан в сегмент данных, а в команде jmp указывается адрес памяти, где расположен адрес метки.

data segment

adr dd m1

data ends

code1 segment

……………………

jmp adr

………………….…

code1 ends

code2 segment

m1 label far

mov ax,bx

…………..

code2 ends

Косвенный регистровый межсегментный переход

Адрес перехода указывается косвенно в регистре. Применяется, когда адрес перехода меняется во время выполнения прграммы.

data segment

adr dd m1

data ends

code1 segment

……………………

lea bx,adr

jmp dword ptr [bx]

………………….…

code1 ends

code2 segment

m1 label far

mov ax,bx

…………..

code2 ends

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

Передача управления возможна в пределах одного сегмента.

Для принятия решения о том, куда будет передано управление, должно быть сформировано условие.

Способы формирования условия:

  1. Любая команда, изменяющая состояние арифметических флагов.

  2. Команда сравнения: cmp опер.1,опер.2 (из опер.1 вычитается опер.2, а результат никуда не записывается, воздействует только на флаги)

  3. Состояние регистра cx/ecx

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

Условие

Состояние флага

любые

je

=

zF=1

jne

zF=0

со знаком

jl

<

SF#OF

jle

<=

SF#OFor ZF=1

jg

>

SF=OF and ZF=0

jge

>=

SF=OF

без знака

jb

<

CF=1

jbe

<=

CF=1 or ZF=1

ja

>

CF=0 and ZF=0

jae

>=

CF=0

Пример:

.data

n equ 50 ; в сегменте данных выделяется const=50

pole db n dup(?)

.code

start:

mov bx,0

m1:

mov pole [bx],0 ; обнуляется массив данных в m1

inc bx ; увеличивается bx на 1

cmp bx,n ; сравниваем bx с n

jne m1 ; если bx ≠ n, то переход в m1 для обнуления

…; если bx=50, то выходим из программы.

end start

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

Команды передачи управления анализируют состояния флагов

jc/jnc - cf=1/0 – флаг переноса

jp/jnp - pf=1/0 – флаг паритета

jz/jnz - zf=1/0 – флаг нуля

js/jns - sf=1/0 – флаг знака

jo/jno - sf=1/0 – флаг переполнения

  1. Процедуры

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

имя proc [модификатор]

ret

имя endp

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]