Процессор 80386 имеет возможность работы
Процессор 80386 имеет возможность работы в 16- или 32-раз- рядном режиме. Многие стандартные инструкции в этих разных режи- мах имеют разный смысл. В Турбо Ассемблере размером инструкции можно управлять с помощью используемых в выражениях переопределе- ний SMALL и LARGE.
В общем случае, если вы в адресном выражении используете SMALL и LARGE, операция управляет генерацией адресной части инс- трукции в зависимости от того, должна она быть 16- или 32-разряд- ной.
Примечание: Более подробно о переопределении размера с помощью операций SMALL и LARGE рассказывается в Главе 5.
Когда SMALL или LARGE указывается вне адресной части выраже- ния, то можно управлять тем, какая инструкция выполняется - 16- или 32-битовая. В тех случаях, когда размер инструкции определя- ется по типу операнда, Турбо Ассемблер сам выбирает размер инс- трукции. Действие SMALL и LARGE показано в следующей таблице.
Примечание: Турбо Ассемблер выбирает размер инструк- ции, используя SMALL и LARGE, только когда нет другой ин- формации.
Действие инструкций SMALL и LARGE Таблица 13.6 ------------------------------T---------------------------------¬ ¦ Инструкция ¦ Действие ¦ +-----------------------------+---------------------------------+ ¦ 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] указ_пам ¦ Для адресов памяти размером в¦ ¦ ¦ двойное слово (DWORD) выбирает¦ ¦ ¦ между 16-битовой инструкцией¦ ¦ ¦ CALL типа FAR и 32-битовой инс-¦ ¦ ¦ трукцией CALL типа NEAR. ¦ L-----------------------------+----------------------------------
Содержание раздела