算术指令替换与浮点运算单元详解
在计算机编程和优化的领域中,为了提升程序的性能和效率,常常会对算术指令进行替换,同时浮点运算单元(FPU)在处理浮点数时也有着独特的机制。下面将详细介绍算术指令的替换方法以及浮点运算单元的相关知识。
1. 算术指令替换
在追求程序性能优化时,可以将一条指令替换为另一条指令,甚至是一组指令。例如,ADD 和 SUB 指令可以相互替换,LEA 指令常用于简单的算术计算。
1.1 乘法指令替换
- 使用加法实现乘法
以乘以 8 为例,在 Optimizing MSVC 2010 中,乘法操作被替换为 3 条加法指令,代码如下:
unsigned int f(unsigned int a)
{
return a*8;
};
对应的汇编代码:
_TEXT
SEGMENT
_a$ = 8 ; size = 4
_f
PROC
; File c:\polygon\c\2.c
mov eax, DWORD PTR _a$[esp-4]
add eax, eax
add eax, eax
add eax, eax
ret 0
_f
ENDP
_TEXT
ENDS
END
- 使用移位实现乘法
当乘以 2 的幂次方时,乘法和除法指令常常被移位
超级会员免费看
订阅专栏 解锁全文
39

被折叠的 条评论
为什么被折叠?



