знать о NPX, являются MASM и DEBUG. Все другие средства - LINK,
LIB и CREF - игнорируют наличие NPX.
Использование MASM и NPX
При использовании MASM с NPX программист просто вводит коман-
ды NPX таким же образом, как и команды главного центрального про-
цессора. Команды NPX имеют те же поля, что и команды центрального
процессора: метки, коды операций, операнды и комментарии. Единс-
твенное отличие кодирования команд заключается в том, что операн-
дами NPX могут быть только регистры или память NPX, а операндами
главного центрального процессора могут быть только его регистры
или память. В случае операндов памяти две формы не отличаются.
Команды NPX могут использовать любую из пяти следующих форм памя-
ти:
- Только смещение FSTSW mem_word
- Только база или индекс FIADD word prt [bx]
- Смещение + база или индекс FSTP base[di]
- База + индекс FLDCW [bp][si]
- Смещение + база + индекс FILD [bp]table[di]
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ ВНИМАНИЕ ¦
¦ MASM версии 1.25 имеет ошибку, которая приводит к ¦
¦ обмену кодов операций FSUB c FSUBR или FDIV c FDIVR и ¦
¦ наоборот, если любой из них использован в "классической" ¦
¦ форме (без определения операндов). Если Вы пользуетесь ¦
¦ более старой версией MASM, точно определяйте операнды и ¦
¦ тип этих команд, например: ¦
¦ FSUBP ST(1),ST ¦
¦ FDIVRP ST(1),ST ¦
¦ Помните, что классическая форма всегда использует ¦
¦ форму выталкивания команды из стека. ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
- 10-20 -
NPX переключатели MASM - /r и /s
После записи программы в файл, необходимо использовать MASM
для ее трансляции. Если применяется стандартная командная строка
MASM, то каждая встреченная команда NPX выдает синтаксическую
ошибку. Это происходит из-за того, что в режиме нормальной работы
MASM ничего не знает о NPX. Для трансляции команд NPX надо приме-
нять переключатель командной строки /r (реальный режим), что ука-
зывает MASM на наличие в исходном файле команд NPX:
A:>masm test.asm test.obj test.lst test.crf/r
Благодаря этому MASM узнает, что транслируемая программа
предназначена для выполнения с реальным NPX. MASM затем генериру-
ет правильные коды операций NPX с префиксом кода операции FWAIT,
если не используется одна из команд FN. (Тем не менее, обра-
тите внимание, что хотя команда NPX FNOP начинается с FN, MASM
генерирует префикс FWAIT.)
MASM имеет еще один переключатель, который указывает ему на
необходимость трансляции команды NPX. Это переключатель /e (режим
эмуляции). Переключатель /e почти идентичен переключателю реаль-
ного режима, единственное отличие заключается в том, что команды
no-wait (FN) не транслируются. Этот переключатель нужен поль-
зователям, имеющим эмуляционные библиотеки, которые для эмуляции
программ могут заменять коды операций NPX вызовами главного цент-
рального процессора. Так как MASM не имеет такую эмуляционную
библиотеку и нет необходимости в ее использовании, если Вы имеете
реальное NPX, то мы больше не будем обсуждать эту тему.
Типы данных NPX в MASM
Вы теперь знаете, что NPX поддерживает семь различных типов
данных: слово; короткое и длинное целое; короткое и длинное ве-
щественное; упакованный двоично-десятичный код; и вещественное с
плавающей запятой. Для использования этих типов данных в памяти
должны быть определены правильные ячейки. В таблице 10-7 показано
соответствие между типами данных NPX и методами, применяемыми в
MASM для их определения и обращения к ним.
Ячейки памяти распределяются с помощью директив определения
данных MASM (dw, dd, dq, или dt) и знака вопроса (?), следующего
за ними. Этот формат приказывает MASM зарезервировать пространс-
тво, но не инициализировать его. Для инициализации зарезервиро-
ванной ячейки, предназначенной для отдельного значения веществен-
ного числа, MASM обеспечивает три различных формы:
экспоненциальный формат без экспоненты, экспоненциальный формат с
экспонентой и реальную (R) форму. Каждая из этих форм может быть
использована с любой из больших директив "определения данных"
следующим образом:
double dd 3.14159 ; экспоненциальный без экспоненты
quad dq 1.23456E + 03 ; экспоненциальный с экспонентой
tenbyte dt 0123456789ABCDEF0123R ; реальный
- 10-21 -
Таблица 10-7
Сравнение типов данный NPX и MASM
ДДДДДДДДДДДДДВДДДДДДДДДДДВДДДДДДДВДДДДДДДВДДДДДДДДДДВДДДДДДДДДДД
Тип данных ¦Тип данных ¦ Размер¦ Дирек-¦ Имя ¦Совмести-
NPX ¦ главного ¦ в ¦ тива ¦операнда ¦мость с
¦ ЦП ¦ байтах¦ MASM ¦ ¦NPX
ДДДДДДДДДДДДД†ДДДДДДДДДДД†ДДДДДДД†ДДДДДДД†ДДДДДДДДДД†ДДДДДДДДДДД
Целое слово ¦ Слово ¦ 2 ¦ dw ¦ word prt ¦ Да
Короткое ¦ Двойное ¦ ¦ ¦ ¦
целое ¦ слово ¦ 4 ¦ dd ¦ dword ptr¦ Да
Короткое ¦ Двойное ¦ ¦ ¦ ¦
вещественное ¦ слово ¦ 4 ¦ dd ¦ dwort ptr¦ Нет
Длинное ¦ Четверное ¦ ¦ ¦ ¦
целое ¦ слово ¦ 8 ¦ dq ¦ qword ptr¦ Да
Длинное ¦ Четверное ¦ ¦ ¦ ¦
вещественное ¦ слово ¦ 8 ¦ dq ¦ qword ptr¦ Нет
Упакованный ¦ Десятый ¦ ¦ ¦ ¦ Форма
BCD ¦ байт ¦ 10 ¦ dt ¦ tbyte ptr¦ "R"
Плавающее ¦ Десятый ¦ ¦ ¦ ¦
вещественное ¦ байт ¦ 10 ¦ dt ¦ tbyte ptr¦ Да
ДДДДДДДДДДДДДБДДДДДДДДДДДБДДДДДДДБДДДДДДДБДДДДДДДДДДБДДДДДДДДДДД
Определение вещественных чисел с помощью байта определения
(db) или директив определения слова (dw) не возможно. Они могут
быть инициализированы только в целые значения.
Экспоненциальные форматы оцениваются в формате с плавающей
запятой (знак, экспонента и мантисса), поскольку вещественный
формат используется по основанию цифра-на-полубайт, поэтому
шестнадцатиричное представление вещественного формата точно соот-
ветствует его определению.
Обратите внимание, что хотя MASM может определять веществен-
ные числа как 4-битовой, так и 8-битовой длины, формат, использу-
емый для инициализации этих чисел, не совместим с NPX! На рисунке
10-10 показано, как Microsoft реализует числа этих размеров.
Сравнивая их с рисунком 10-2, Вы увидите, что они совсем разные.
Если Вам необходимо использовать эти форматы (например, для сов-
местимости с существующим программным обеспечением), то для пере-
вода одного формата в другой Вы можете написать программу преоб-
разования.
Длинное ЪДДДДДВДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
вещественное ¦ 81h ¦S¦ Мантисса 55 бит ¦ ¦
АДДДДДБДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
63 56 55 54
¦ АДДД 1.0 предполагается
¦
¦
Короткое ¦ Смещенная ЪДДДДДВДВДДДДДДДДДДДДДДДДДД¬
вещественное АДДДэкспонентаДДДД¦ 81h ¦S¦ Мантисса 23 бита¦
в Microsoft MASM 129.0 АДДДДДБДБДДДДДДДДДДДДДДДДДДЩ
31 24 23 22
АД1.0 предполагается
Рис.10-10. Форматы вещественных чисел Microsoft MASM.
Использование DEBUG с NPX
DEBUG всегда знает о командах NPX. Этим объясняет то, что
- 10-22 -
иногда при попытке "дисассемблирования" памяти, DEBUG выдает
странные команды. (Одним из методов, используемых при отладке,
является заполнение неиспользуемой памяти шестнадцатиричным сло-
вом DEAD. Этот характерный образец позволяет программисту быстро
определить, сколько памяти изменено. Тем не менее, DEBUG дисас-
семблирует это как FISUBR WORD PTR [DI + ADDE].)
Хотя программа DEBUG постоянно находится в режиме NPX, она не
всегда распознает команды NPX. Программа не выводит на экран и не
позволяет транслировать команды формы FN. DEBUG распознает
FWAIT как отдельную команду кода операции NPX, чем она реально и
является. Следовательно, DEBUG декодирует команду FN как
стандартную команду, которая не будет иметь префикса FWAIT.
В противоположность MASM, DEBUG не вставляет автоматически
префикс FWAIT в стандартные команды NPX. Вы должны помнить о том,
что необходимо вручную транслировать FWAIT при вводе команды NPX.
Вы должны также помнить, что при определении операндов в
DEBUG, требуется указывать программе, какой размер имеет операнд:
FLD TBYTE PTR [200]
Скобки требуются для того, чтобы проинформировать DEBUG о
том, что число представляет собой адрес, а не прямое значение.
Отладка регистров NPX
Единственное, что DEBUG не может сделать, так это отобразить
состояние NPX или содержание любого из его регистров. Если Вы ре-
шили проверить какие-либо регистры NPX, то сначала надо сделать
так, чтобы NPX записал данные в общую память.
Для того, чтобы помочь Вам отлаживать программы NPX, мы пред-
лагаем программу dump87, содержащуюся в следующем разделе, "При-
меры программирования NPX с помощью MASM". Эта программа исполь-
зует команду FSAVE для записи состояния NPX с последующим
отображением его в более понятной форме на экране дисплея. Прог-
ЪДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДД ДД¬
¦ Байт младшего адреса ¦ Байт старшего адреса ¦0,1,2 байта/ ¦
ГДДВДДВДДВДДВДДВДДДДДВДД†ДДДДДВДДВДДДДДВДДДДДДДД†ДДДДДДДДДД \ \ ¦
(1)¦ 1¦ 1¦ 0¦ 1¦ 1¦ OP-A¦ 1¦ aa ¦ 1¦ OP-B¦ mmm ¦Смещение / / ¦
ГДД†ДД†ДД†ДД†ДД†ДДДДД†ДД†ДДДДД†ДДБДДДДД†ДДДДДДДД†ДДДДДДДДД \ \ ¦
(2)¦ 1¦ 1¦ 0¦ 1¦ 1¦ ** ¦ *¦ aa ¦ OP-B ¦ mmm ¦Смещение / / ¦
ГДД†ДД†ДД†ДД†ДД†ДДВДД†ДД†ДДВДД†ДДДДДДДД†ДДДДДДДД†ДДДДДДДДДД \ \ДЩ
(3)¦ 1¦ 1¦ 0¦ 1¦ 1¦ R¦ P¦ *¦ 1¦ 1¦ OP-B ¦ m ¦
ГДД†ДД†ДД†ДД†ДД†ДДВДД†ДД†ДДВДД†ДДВДДДДДБДДДДДДДДґ