Аппаратное обеспечение IBM PC


         

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


  • программы, предъявляющие жесткие требования к точности и скорости вычислений.


  • В случае с резидентными программами невозможность использования библиотеки эмулятора вызвана тем, что после оставления программы резидентной в памяти, например, функцией _dos_keep(), она теряет доступ к модулям эмуляции. Механизм вызова программ эмуляции основан на использовании прерываний с номерами 34h...3Eh. Перед тем как оставить программу резидентной, функция _dos_keep() восстанавливает содержимое этих векторов, делая невозможным доступ резидентной программе к модулям эмулятора. Да и самих этих модулей уже нет в памяти - на их место может быть загружена новая программа.

    Поэтому руководство по Си рекомендует для резидентных программ использовать библиотеку альтернативной математики. Но эта библиотека, увы, не использует сопроцессор.

    Ситуация с драйверами аналогична - драйверы, как правило, составляются на языке ассемблера, поэтому средства эмуляции библиотек Си недоступны.

    Выходом может быть непосредственное программирование сопроцессора на языке ассемблера. При этом вы можете полностью использовать все возможности сопроцессора и добиться от программы наибольшей эффективности вычислений.

    Какие средства можно использовать для составления программ для сопроцессора?

    Обычно это или ассемблер MASM (возможно использование TASM), либо интегрированная среда разработки QuickC версии 2.01, содержащая встроенный Quick Assembler.

    Приведем пример самой простой программы, подготовленный для трансляции программой Quick Assemler. Эта программа выполняет вычисления по следующей несложной формуле:

    z = x + y;

    Значения x и y задаются в виде констант:

    .MODEL TINY

    .STACK 100h

    .DATA

    ; Здесь находятся константы с одинарной ; точностью x и y

    x dd 1.0 y dd 2.0

    ; Резервируем четыре байта для результата

    z dd ?

    .CODE .STARTUP

    ; Записываем в стек численных регистров ; значение x

    fld x

    ; Складываем содержимое верхушки стека ; с константой y

    fadd y

    ; Записываем результат в ячейку z

    fstp z

    ; Завершаем работу программы и ; возвращаем управление операционной системе


    Содержание  Назад  Вперед