Использование регистров FPU и MMX в качестве " общих регистров"
большинство сборочных программ используют 4 регистра общего назначения eax ebx ecx edx
но я нахожу, что довольно часто мне нужно использовать более 4 регистров для выполнения моей задачи легко без необходимости push
и pop
от стека до многого. Поскольку моя программа не намерена использовать регистры FPU или MMX для расчетов с плавающей запятой или их "предполагаемое использование", считается ли приемлемым использовать эти дополнительные регистры в вашей программе?
например. используя xmm0
для петли счетчик приращений освобождает ecx
зарегистрироваться, чтобы делать другие вещи.
3 ответов
почему четыре? Вы можете использовать все эти:eax
, ebx
, ecx
, edx
, esi
, edi
и ebp
. Это семь. Или этого тоже недостаточно?
FPU и MMX регистры несколько неудобно работать, так как они могут быть загружены только из себя и памяти и хранятся только для себя и памяти. Вы не можете свободно перемещать данные между ними и регистрами общего назначения, и нет инструкций, способных работать с обоими типами регистров одновременно время.
если семи регистров общего назначения недостаточно, используйте переменные local/on-stack. Например, можно уменьшить переменную счетчика в памяти напрямую, а также напрямую сравнить ее с константой или другим регистром. Скорее всего, это будет не медленнее (вероятно, быстрее), чем использование регистров FPU или MMX странным образом.
Как часто вам нужны полные 32 бита регистра? Для таких вещей, как маленькие счетчики, не стесняйтесь использовать байтовые четверти регистров общего назначения: AH/AL, BH/BL, CH/CL, DH/DL. С некоторым побитовым обманом вы также можете использовать верхние 16 бит регистров общего назначения в качестве промежуточного хранилища для переменных размером со слово.
в реальном режиме (чтение: под DOS) вы также можете использовать сегментные регистры ES, FS и GS для хранения промежуточных значений. В защищенном режиме ОС (Windows, Linux, *nix) код будет сбой, хотя.
конечно, есть SI и DI, а на x64 у вас есть дополнительные регистры, но вы можете использовать регистры FP для чего угодно.