Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Использование Турбо Ассемблера /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Расширенные инструкции - Программирование от RIN.RU
Расширенные инструкции



Инструкция GETFIELD


Инструкция GETFIELD извлекает данные из поля записи. Логика ее работы противоположна инструкции SETFIELD. Она имеет следующий синтаксис:


GETFIELD имя_поля регистр_приемник, регистр/память_источник


где "имя_поля" и "регистр_приемник" работают так же, как в операции SETFIELD. "Регистр/память_источник" можно использовать также, как "регистр_источник" в операции SETFIELD, например:


FOO RECORD R0:1,R1:4,R2:3,R3:1
.
.
.
GETFIELD F1 AX,BL ; рабочим регистром является BX
GETFIELD F1 AX,BH ; недопустимо!


Примечание: Операция GETFIELD уничтожает все содержимое рабочего регистра.


Операция GETFIELD извлекает значение поля, обнаруженное в регистре-источнике или по адресу памяти, и устанавливает в это значение соответствующую часть регистра-приемника. На другие регистры (кроме рабочего) и флаги процессора эта инструкция не влияет.


Чтобы выполнить свою функцию, инструкция GETFIELD генерирует эффективную и расширенную последовательность инструкций MOV, XCHG, ROL и ROR.


Дополнительная быстрая инструкции непосредственного умножения


Для эффективной индексации массивов Турбо Ассемблер обеспечивает специальную операцию непосредственного умножения. Инструкция FASTIMUL решает типичную проблему, возникающую при создании массива структур. Для процессора 8086 инструкция непосредственного умножения недоступна. Даже на более развитых процессорах умножение с использованием сдвигов и сложений выполняется в некоторых обстоятельствах существенно быстрее, чем стандартная непосредственная инструкция IMUL. На основе текущего назначения процессора инструкция Турбо Ассемблера FASTIMUL выбирает между наиболее эффективной доступной последовательностью сдвигов и сложений и непосредственной операцией IMUL текущего процессора (если она имеется). Инструкция FASTIMUL имеет следующий синтаксис::


FASTIMUL регистр_приемник, регистр/память_источник, значение


Данная инструкция очень напоминает тернарную операцию IMUL, доступную на процессорах 80186, 80286 и 80386. Регистр-приемник - это регистр размером в слово (или двойное слово при работе на процессора 80386). "Регистр/память_источник" - это регистр или адрес в памяти, который должен соответствовать размеру приемника. "Значение" - это фиксированная константа со знаком (множитель).


Инструкция FASTIMUL использует для выполнения своей функции комбинацию инструкций IMUL, MOV, NEG, SHL, ADD и SUB. При этом содержимое регистра-источника (или адреса памяти) теряется. Флаги процессора не изменяются.


Расширение необходимых инструкций для процессора 80386


Процессор 80386 имеет возможность работы в 16- или 32-разрядном режиме. Многие стандартные инструкции в этих разных режимах имеют разный смысл. В Турбо Ассемблере размером инструкции можно управлять с помощью используемых в выражениях переопределений SMALL и LARGE.


В общем случае, если вы в адресном выражении используете SMALL и LARGE, операция управляет генерацией адресной части инструкции в зависимости от того, должна она быть 16- или 32-разрядной.


Примечание: Более подробно о переопределении размера с помощью операций SMALL и LARGE рассказывается в этом разделе.


Когда SMALL или LARGE указывается вне адресной части выражения, то можно управлять тем, какая инструкция выполняется - 16- или 32-битовая. В тех случаях, когда размер инструкции определяется по типу операнда, Турбо Ассемблер сам выбирает размер инструкции. Действие SMALL и LARGE показано в следующей таблице.


Примечание: Турбо Ассемблер выбирает размер инструкии, используя SMALL и LARGE, только когда нет другой информации.


Действие инструкций SMALL и LARGE
ИнструкцияДействие
PUSH[SMALL/LARGE] сегм_рег Выбирает, какая форма сегментного регистра (16- или 32-разрядная) используется в инструкции PUSH.
POP[SMALL/LARGE] сегм_регВыбирает, какая форма сегментного регистра (16- или 32-разрядная) используется в инструкции POP.
FSAVE[SMALL/LARGE] указ_памВыбирает, какая форма состояния с плавающей точкой (16- или 32-разрядная) сохраняется.
FRSTOR[SMALL/LARGE] указ_памВыбирает, какая форма состояния с плавающей точкой (16- или 32-разрядная) восстанавливается.
FSTENV[SMALL/LARGE] указ_памВыбирает, какая форма состояния с плавающей точкой (16- или 32-разрядная) записывается.
FLDENV[SMALL/LARGE] указ_памВыбирает, какая форма состояния с плавающей точкой (16- или 32-разрядная) загружается.
LGDT[SMALL/LARGE] указ_памВыбирает, какая форма глобальной таблицы дескрипторов (16- или 32 32-разрядная) загружается.
SGDT[SMALL/LARGE] указ_памВыбирает, какая форма глобальной таблицы дескрипторов (16- или 32-разрядная) сохраняется.
LIDT[SMALL/LARGE] указ_пам Выбирает, какая форма таблицы дескрипторов прерываний (16- или 32-разрядная) загружается.
SIDT[SMALL/LARGE] указ_памВыбирает, какая форма таблицы дескрипторов прерываний (16- или 32-разрядная) сохраняется.
JMP[SMALL/LARGE] указ_памДля адресов памяти размером в двойное слово (DWORD) выбирает между 16-битовым переходом JMP типа FAR и 32-битовым переходом JMP типа NEAR.
CALL[SMALL/LARGE] указ_памДля адресов памяти размером в двойное слово (DWORD) выбирает между 16-битовой инструкцией CALL типа FAR и 32-битовой инструкцией CALL типа NEAR.



<<<  НазадВперед  >>>
 1  2  3  4  5  6 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Начало работы на Турбо Ассемблере

Использование директив и параметров

Общие принципы программирования

Объектно-ориентированное программирование

Использование выражений и значений идентификаторов

Директивы выбора процессора

Использование моделей памяти программы и сегментации

Определение типов данных

Задание и использование счетчика адреса

Описание процедур

Управление областью действия идентификаторов

Определение данных

Использование макрокоманд

Использование условных директив

Интерфейс с компоновщиком

Генерация листинга

Интерфейс Турбо Ассемблера и Borland C++

Интерфейс Турбо Ассемблера с Турбо Паскалем

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь