游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1693|回复: 2

快速乘10算法 wxh zt

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2004-11-19 23:38:00 | 显示全部楼层 |阅读模式

#include  
using namespace std;

__declspec(naked) inline int __fastcall multiply10( int n )
{
   __asm {
       shl ecx, 1
       mov eax, ecx
       shl eax, 2
       add eax, ecx
       ret
   }
}

void main()
{
   int i = multiply10(-123);
   cout << i << endl;
}

0

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2004-11-20 00:17:00 | 显示全部楼层

Re:快速乘10算法 wxh zt

现在的Pentium CPU,可以在一个周期完成了,这样做反而会更慢。

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2004-11-20 11:46:00 | 显示全部楼层

Re:快速乘10算法 wxh zt

楼上说的正确,现在的奔腾机器的乘法运算十分快,所以可以不用这种方法,一定要用的话,可以考虑用lea指令,一个周期一条,如下:(抱歉,可能有些错误,我好久没有写汇编了)

mov eax,n
lea eax,[eax * 2]
lea eax,[eax + eax * 4]
ret

在386时经常使用lea来加速乘法运算,586上可以考虑用定点数方法。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-23 09:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表