使用FPU和MMX寄存器作为"通用寄存器"

use*_*545 7 x86 assembly cpu-registers

大多数汇编程序利用4个通用寄存器eax ebx ecx edx,但我发现,很多时候我需要使用超过4个寄存器来轻松地完成我的任务,而不必pushpop从堆栈得多.由于我的程序无意使用FPU或MMX寄存器进行浮点计算或"预期用途",在程序中使用这些额外的寄存器是否可以接受?

例如.使用xmm0一个循环递增计数器腾出ecx寄存器做其他事情.

Ale*_*nze 4

为什么是四个?您可以使用所有这些:eaxebxecxedxesiediebp那是七个。或者这还不够?

FPU 和 MMX 寄存器使用起来有些尴尬,因为它们只能从自身和内存加载,并且只能存储到自身和内存。您无法在它们和通用寄存器之间自由移动数据,也没有能够同时对两种寄存器进行操作的指令。

如果七个通用寄存器不够,请使用本地/堆栈变量。例如,您可以直接递减内存中的计数器变量,也可以直接将其与常量或另一个寄存器进行比较。有可能,这不会比以奇怪的方式使用 FPU 或 MMX 寄存器慢(可能更快)。