| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
нять его на поле приемника, выполняет операцию OR и помещает ре-
Турбо Ассемблер 3.0/tasm/#2-2 = 18 =
зультат в регистр-приемник.
Примечание: Операция SETFIELD уничтожает все содержи-
мое рабочего регистра.
Чтобы выполнить свою функцию, инструкция SETFIELD генерирует
эффективную и расширенную последовательность инструкций XOR,
XCHG, ROL, ROR, OR и MOVZX.
Операция SETFIELD не пытается очистить целевое поле перед
выполнением над его значением операции OR. Если это необходимо,
вы можете очистить поле явным образом, используя инструкцию
MASKFLAG.
Турбо Ассемблер 3.0/tasm/#2-2 = 19 =
Инструкция 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. Регистр-приемник -
Турбо Ассемблер 3.0/tasm/#2-2 = 20 =
это регистр размером в слово (или двойное слово при работе на
процессора 80386). "Регистр/память_источник" - это регистр или
адрес в памяти, который должен соответствовать размеру приемника.
"Значение" - это фиксированная константа со знаком (множитель).
Инструкция FASTIMUL использует для выполнения своей функции
комбинацию инструкций IMUL, MOV, NEG, SHL, ADD и SUB. При этом
содержимое регистра-источника (или адреса памяти) теряется. Флаги
процессора не изменяются.
Расширение необходимых инструкций для процессора 80386
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Процессор 80386 имеет возможность работы в 16- или 32-раз-
рядном режиме. Многие стандартные инструкции в этих разных режи-
мах имеют разный смысл. В Турбо Ассемблере размером инструкции
можно управлять с помощью используемых в выражениях переопределе-
ний SMALL и LARGE.
В общем случае, если вы в адресном выражении используете
SMALL и LARGE, операция управляет генерацией адресной части инс-
трукции в зависимости от того, должна она быть 16- или 32-разряд-
ной.
Примечание: Более подробно о переопределении размера с
помощью операций SMALL и LARGE рассказывается в Главе 5.
Когда SMALL или LARGE указывается вне адресной части выраже-
ния, то можно управлять тем, какая инструкция выполняется - 16-
или 32-битовая. В тех случаях, когда размер инструкции определя-
ется по типу операнда, Турбо Ассемблер сам выбирает размер инс-
трукции. Действие SMALL и LARGE показано в следующей таблице.
Примечание: Турбо Ассемблер выбирает размер инструк-
ции, используя SMALL и LARGE, только когда нет другой ин-
формации.
Турбо Ассемблер 3.0/tasm/#2-2 = 21 =
Действие инструкций SMALL и LARGE Таблица 13.6
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Инструкция і Действие і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і 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і
і і -разрядная) загружается. і
і і і
і 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] указ_пам і Для адресов памяти размером ві
Турбо Ассемблер 3.0/tasm/#2-2 = 22 =
і і двойное слово (DWORD) выбираеті
і і между 16-битовой инструкциейі
і і CALL типа FAR и 32-битовой инс-і
і і трукцией CALL типа NEAR. і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Вызов процедур с кадрами стека
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Турбо Ассемблер поддерживает расширенную форму инструкции
CALL, которая позволяет вам непосредственно вызывать процедуры,
использующие интерфейсные соглашения языков высокого уровня.
Аргументы процедурам, использующим интерфейсные соглашения
языков высокого уровня, передаются через стек в кадре стека. Пе-
ред вызовом процедуры вызывающая программа должна занести эти ар-
гументы в стек.
Используемые процедурой интерфейсные соглашения определяют
порядок, в котором аргументы должны заноситься в стек. Для проце-
дур Бейсика, Фортрана и Паскаля аргументы заносятся в стек в том
порядке, в котором они указываются. Для языков Си и С++ аргументы
заносятся в стек в обратном порядке.
Используемые процедурой интерфейсные соглашения определяют
|
adfun.ru
|
|
|
|