Программирование на Ассемблере

       

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


Для создания мобильных приложений, которые могут исполняться для процессоров, поддерживающих технологию MMX и не поддерживающих ее рекомендуется создавать 2 варианта кода и выбирать оптимальный программным путем.

Для определения возможности использования команд MMX для данного процессора используется команда CPUID, EAX = 1. Если технология MMX поддерживается, бит 23 в регистре EDX установлен в 1. Пример кода для проверки:

mov   eax, 1

cpuid

test    edx, 00800000H

jnz     short yes;  MMX поддерживается

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

Возврат значения:

*                    Если значений много - записываются в структуру, а адрес структуры - в регистр EAX;

*                    В регистре MMX, но тогда в конце функции нельзя использовать команду EMMS, а это плохо!

Рассмотрим более подробно операции процессора при переключении в режим MMX:

*                    В поле экспоненты всех MMX - регистров записывается 1 во все биты (16 бит);

*                    В поле тегов записывается 00, что соответствует занятости всех регистров;

*                    Вершина стека устанавливается на физически первый регистр.

В таблице представлено влияние команд FPU/MMX на регистры

Для того, чтобы частое переключение режимов меньше сказывалось на производительности процессора рекомендуется:

*                  в функции (цикле) использовать команды одного типа;

*                  не использовать содержимое регистров, сформированное командами другого типа;

*                  как только команды MMX не требуются выполнить переключение режима (команда EMMS);

*                  перед выходом из функции, использующей FPU очищать стек FPU.



Содержание раздела