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


386+ BTR Проверка и сброс бита - часть 3


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

Примеры прямого ближнего вызова


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-битовых операндов. В защищенном режиме роль сегментного адреса выполняет селектор.




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



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