行客 发表于 2019-1-27 08:54:41

汇编几种常见的优化方式

最近从云风的《游戏之旅——我的编程感悟》书中看到几中汇编优化方式,拿出分享分享。
主要目的是提高运行效率,消除跳转指令。

1.求有符号32位整数的绝对值。

逻辑: if (eax<0) eax=-eax
cdq
xor eax, edx
sub eax, edx

这段指令之所以可以正常工作,基于这个一个事实

neg eax 等价于 not eax; inc eax 
而 not eax 又等价于 xor eax, -1

2.取两个数字中较小的一个

逻辑: if (ebx>eax) ebx=eax

无符号整数版本

sub eax, ebx
sbb edx, edx
and edx, eax
add ebx, edx

有符号版本

sub eax, ebx
cdq
and edx, eax
add ebx, edx

3.根据条件来选择赋值

逻辑: edx=(eax<0)?ebx:ecx

cdq
xor ebx, ecx
and edx, ebx
xor edx, ecx       


感谢ouyangtian的整理

行客 发表于 2019-1-27 08:55:14

mark.....

还有最常见的

eax = !! eax;

sub 0, eax
sbb eax, eax
neg eax

eax = ! eax;
sub 0, eax
sbb eax, eax
inc eax

gang19840815 发表于 2020-2-12 22:21:05

看看

gang19840815 发表于 2020-2-13 19:24:44

看看
页: [1]
查看完整版本: 汇编几种常见的优化方式