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

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

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › C Допустимо использование дополнительных режимов адресации 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
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.