Иллюстрированный самоучитель по Assembler


Переходы - часть 7


jmp go_addr

было уже известно, что собой представляет имя go_addr. Этого можно добиться двумя способами. Первый - расположить сегмент данных до сегмента команд, а не после, как в приведенном выше примере. Второй - заставить транслятор обрабатывать исходный текст программы не один раз, как он это делает по умолчанию, а несколько. Число проходов для транслятора TASM можно задать при его вызове с помощью ключа /m#, где # - требуемое число проходов. В нашем случае достаточно двух проходов.

В приведенных примерах адрес поля памяти с адресом точки перехода задавался непосредственно в коде команды косвенного перехода. Однако этот адрес можно задать и в одном из регистров общего назначения (ВХ, SI или DI). Для приведенного выше примера косвенного перехода в точку go, адрес которой находится в ячейке go_addr в сегменте данных, перс-ход с использованием косвенной регистровой адресации может выглядеть следующим образом:

mov BX, offset go_addr ;В ВХ смещение поля с адресом перехода


jmp [BX] ;Переход в точку gо

Особенно большие возможности предоставляет методика косвенного перехода с использованием базово-индексной адресации через пары регистров, например, [BX][SI] или [BX][DI]. Этот способ удобен в тех случаях, когда имеется ряд альтернативных точек перехода, выбор которых зависит от некоторых условий. В этом случае в сегменте данных создается не одно поле с адресом, а таблица адресов переходов. В базовый регистр ВХ загружается адрес этой таблицы, а в один из индексных регистров - определенный тем или иным способом индекс в этой таблице. Переход осуществляется в точку, соответствующую заданному индексу. Структура программы, использующий такую методику, выглядит следующим образом:

code segment


mov BX, off set go_tbl ;Загружаем в ВХ базовый адрес таблицы


mov SI, 4 ;Вычисленное каким-то


;образом смещение в таблице


jmp [BX] [SI] ;Если индекс =4, переход в точку goЗ


gol: ;1-я точка перехода


gо2 : ;2-я точка перехода


gоЗ: ;3-я точка перехода




Начало  Назад  Вперед



Книжный магазин