Lectures / 09
.pdfОрганизация ЭВМ и систем
Лекция 9
Команды передачи управления. Циклы
Команды переходов
Безусловной передачи управления
безусловный переход
вызов процедуры и возврат
вызов программ обраб.прерываний и возврата
Условной передачи управления
команды перехода по результату команды сравнения
команды перехода по состоянию определенного флага
команды перехода по содержимому регистра cx/ecx
Циклов
команда организации цикла со счетчиком ecx/cx
команда организации цикла со счетчиком ecx/cx и возможностью досрочного выхода из цикла по дополнительному условию
Определение метки
имя_метки :
имя_метки label тип_метки
|
near|far |
|
m1: movAX, a |
m1 label |
near |
|
mov |
AX, a |
m_far label |
far |
|
m_near: mov |
AX, a |
|
Команда безусловного перехода jmp
jmp [модификатор] адрес_перехода
МежсегВнутрисегментный ментный
|
|
Способ задания |
Дальность |
|
целевого адреса |
Короткий |
|
Метка - |
(-128..127 байт) |
|
в команде |
|
|
|
Ближний |
|
Адрес - в reg |
|
||
(от 128 до |
|
|
64 К байт) |
|
Адрес - в mem |
|
|
|
Дальний |
|
|
Косвенный Прямой
Значения модификатора в команде jmp
short ptr прямой короткий near ptr прямой ближний
Внутрисег-
ментный
far ptr прямой дальний word ptr косвенный ближний dword ptr косвенный дальний
Межсег-
ментный
Команда jmp: Примеры (I)
1 Прямой внутрисегментный
…
jmp m1
…
m1: ...
Если метка расположена не далее чем -128...+127 байтов, то переход - короткий, иначе - ближний
Команда jmp: Примеры (II)
2 Косвенный внутрисегментный
movbx, offset m1
jmp bx ; Адрес перехода - в bx
...
m1: ….
Команда jmp: Примеры (III)
3 Косвенный внутрисегментный
.data
addr_m1 dw m1
…
.code
...
jmp addr_m1 ; Адр.перехода - в addr_m1
...
m1: ….
Команда jmp: Примеры (IV)
4 Косвенный внутрисегментный
.data
addr dw m1 ; Адрес метки m1 dw m2 ; Адрес метки m2
…
.code
…
mov si,0 cycle:
jmp addr[si] ; Адрес перехода - в addr+(si)
…
m1: …. m2: ….
mov si,2 jmp cycle
Сегмент1
Сегмент2
Команда jmp: Примеры (V)
5 Прямые межсегментные
seg1 segment ….
jmp far ptr m2 ; far обязательно
…. ; или ключ tasm/m2 m1 label far
….
…. seg1 ends
seg2 segment ….
m2 label far
jmp m1 ; far необязательно