C
Пример прямого дальнего вызова:
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-битовых операндов. В защищенном режиме роль сегментного адреса выполняет селектор.
Примеры:
call [EAX]; Косвенный вызов call 8[ЕСХ]; Косвенный вызов
CBW Преобразование байта в слово
Команда cbw заполняет регистр АН знаковым битом числа, находящегося в регистре AL, что дает возможность выполнять арифметические операции над исходным операндом-байтом, как над словом в регистре АХ. Команда не имеет параметров и не воздействует на флаги процессора.
Пример 1:
mov AL,5 cdw; AX=0005h
Пример 2:
mov AL, -2; AL=FEh=-2 (байт) cdv; AX=FFFEh=-2 (слово)
386+ CDQ Преобразование двойного слова в четверное
Команда cdq расширяет знак двойного слова в регистре ЕАХ на регистр EDX. Эту команду можно использовать для образования четырехсловного делимого из двухсловного перед операцией двухсловного деления. Команда не имеет параметров и не воздействует на флаги процессора.
Пример 1:
;В полях данных mem dd -2; Отрицательное число ;В программном сегменте mov ЕАХ,mem; EAX=FFFFFFFEh cdq; EDX=FFFFFFFFh, EAX=FFFFFFFEh
Пример 2:
;В полях данных mem dd 7FFFFFFEh,; Положительное число ;В программном сегменте mov ЕАХ,mem; EAX=7FFFFFFEh cdq; EDX=00000000h, EAX=7FFFFFFEh