Меню сайта

Урок 75. Переходы по условию

Условные переходы делятся на двегруппы: — проверяющие результаты
— — — предыдущей арифметической или логическойкоманды, и управляющие
— — — итерациями фрагмента программы. — Все условные преходы имеют
— — — однобайтовое смещение. — Если условный переход осуществляется на
— — — место, находящееся дальше 128 байт, нужноиспользовать специальную
— — — конструкцию. — Например, допустим, что программе надо перейти к
— — — метке ZERO, если установлен флаг нуля- этаметка находится дальше
— — — 128 байт от текущего места. — Программа в этом случае выглядит
— — — примерно так:
— — — — — JNZ — — -CONTINUE
— — — — — JMP — — -ZERO
— — — — — -CONTINUE:
— — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — — 1/1/80 04:01:56
— — — — — — — — -Фиг. 4.28 Таблица переходов — — — — — — — — — — — — — — — — — — — — — Page -1-1


— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — PAGE — — -,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — TITLE — -Фиг. 4.28 Таблица переходов

— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — CODE — — -SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ASSUME -CS:CODE

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

— — — — — — — — — -0000 — 2A FF — — — — — — — — — — — — — — — — SUB — — — — BH, BH — — — — — — — — — — — — — — BH &lt— 0
— — — — — — — — — -0002 — 8A D8 — — — — — — — — — — — — — — — — MOV — — — — BL, AL — — — — — — — — — — — — — — Индекс загружается в регистр BL
— — — — — — — — — -0004 — D1 E3 — — — — — — — — — — — — — — — — SHL — — — — BX, 1 — — — — — — — — — — — — — — — * 2 для получения смещения
— — — — — — — — — -0006 — 2E: FF A7 000B R — — — — — — — — — — -JMP — — — — CS:[BX + BRANCH_TABLE] — — Косвенный близкий переход

— — — — — — — — — -000B — — — — — — — — — — — — — — — — — BRANCH_TABLE — — — LABEL — — WORD
— — — — — — — — — -000B — 0011 R — — — — — — — — — — — — — — — — — — — — — DW — — — — — ROUTINE_ONE
— — — — — — — — — -000D — 0011 R — — — — — — — — — — — — — — — — — — — — — DW — — — — — ROUTINE_TWO
— — — — — — — — — -000F — 0011 R — — — — — — — — — — — — — — — — — — — — — DW — — — — — ROUTINE_THREE
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — …

— — — — — — — — — -0011 — — — — — — — — — — — — — — — — — ROUTINE_ONE — — — — LABEL — — NEAR
— — — — — — — — — -0011 — — — — — — — — — — — — — — — — — ROUTINE_TWO — — — — LABEL — — NEAR
— — — — — — — — — -0011 — — — — — — — — — — — — — — — — — ROUTINE_THREE — — LABEL — — NEAR

— — — — — — — — — -0011 — — — — — — — — — — — — — — — — — CODE — — -ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — END

-&
nbsp- — — — — — — — — — Фиг. 4.28 Таблица переходов

— — — — — Здесь используется условный переход спротивоположным условием.
— — — На метку ZERO управление передает командабезусловного перехода,
— — — которая может использовать смещение вплотьдо 32768 байт, а в
— — — условном переходе используется меткаCONTINUE.

— — — — — Если целью является минимизация программ,этого метода нужно
— — — избегать, так как он превращает командуусловного перехода в
— — — пятибайтовую последовательность. Иногдареорганизация программы
— — — приводит к тому, что место переходапопадает в нужный диапазон.
— — — Однако не стоит особенно старатьсяминимизировать программу. В
— — — большинстве случаев не имеет особогозначения, насколько у
— — — программы большой объем, лишь бы он непревышал заданного. Это
— — — имело бы смысл, если бы вы пыталисьсделать нечто помещающееся в
— — — модуль ПЗУ постоянного объема, но обычноусилия, затрачиваемые на
— — — изменения программы, не дают ощутимоговыигрыша.

Категория: Программирование на Ассемблере | Дата: 03.02.13

Меню раздела
Блок