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


         

Косвенные вызовы отличаются тем, что


Косвенные вызовы отличаются тем, что адрес перехода извлекается не из кода команды, а из ячеек памяти; в коде команды содержится информация о том, где находится адрес вызова. Длина кода команды зависит от используемого способа адресации.
Примеры прямого ближнего вызова
call near ptr subl ;Вызов подпрограммы subl
;из того же сегмента
call subl ;To же самое
Косвенные ближние вызовы
Пример 1
mov BX,offset subl ;ВХ=адрес подпрограммы
call BX ;Вызов подпрограммы

Пример 2
; В полях данных:
addr dw subl ;Ячейка с адресом подпрограммы
;В программном сегменте:
call DS:addr ;Вызов подпрограммы
call word ptr addr ;To же самое
Пример 3
;В полях данных:
addr dw subl ;Ячейка с адресом подпрограммы
;В программном сегменте:
mov SI,offset addr ;SI=адрес ячейки с адресом
;подпрограммы
call [SI] ;Вызов подпрограммы
Пример 4
;В полях данных:

tbl dw subl ;Ячейка с адресом

;подпрограммы 1

dw sub2 ;Ячейка с адресом

;подпрограммы 2

dw sub3 ;Ячейка с адресом

;подпрограммы 3

;В программном сегменте:

mov BX,offset tbl ;ВХ=адрес таблицы адресов

;подпрограмм

mov SI, 2 ;SI=смещение к адресу sub2

call [BX] [SI] ;Вызов подпрограммы 2
Пример прямого дальнего вызова
call far ptr subl ;Вызов подпрограммы sub2,

;расположенной в другом
;программном сегменте
Косвенные дальние вызовы
Пример 1
;В полях данных:

addr dd subl ;Поле с двухсловным

;адресом подпрограммы

;В программном сегменте:

call DS:addr ;Вызов подпрограммы

call dword ptr addr;To же самое
Пример 2
;В полях данных:

addr dd subl ;Поле с двухсловным

;адресом подпрограммы

;В программном сегменте:

mov DI,offset addr ;В1=адрес поля с адресом

;подпрограммы

call [DI] ;Вызов подпрограммы
Пример 3
; В полях данных:

tbl dd subl ;Адрес подпрограммы 1

dd sub2 ;Адрес подпрограммы 2

dd sub3 ;Адрес подпрограммы 3

;В программном сегменте:

mov SI,offset tbl ;DI=адрес таблицы адресов

mov DI,8 ;Смещение к адресу sub3

call [SI] [DI] ;Вызов подпрограммы sub3
Допустимо использование дополнительных режимов адресации 32-разрядных процессоров. В 32-разрядных приложениях допустимо использование 32-битовых операндов. В защищенном режиме роль сегментного адреса выполняет селектор.

Содержание  Назад  Вперед