游戏开发论坛

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: tarkey

呵呵,出道题大家做,看谁的方法好。

[复制链接]

0

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2004-6-13 11:44:00 | 显示全部楼层

Re:呵呵,出道题大家做,看谁的方法好。

我也有疑问,测了一下,那个汇编的程序还没我的程序快,估计是push和pop影响了效率。我改了一下:
int gcd(int a,int b)
{
__asm{
                mov eax, a
                mov ebx, b
nznoop:
                mov edx, 0
                div ebx
                test edx, edx
                jz zreturn
                mov eax, ebx
                mov ebx, edx
                jmp nznoop
zreturn:
                mov eax, ebx
}
// ignore no return warning
}
这样比我那个函数要稍快一点。

1

主题

66

帖子

78

积分

注册会员

Rank: 2

积分
78
发表于 2004-6-13 12:36:00 | 显示全部楼层

Re:呵呵,出道题大家做,看谁的方法好。

那样写确实没有必要,还影响了效率

1

主题

66

帖子

78

积分

注册会员

Rank: 2

积分
78
发表于 2004-6-13 12:54:00 | 显示全部楼层

Re:呵呵,出道题大家做,看谁的方法好。

用cdq优化了一下
把ebx改为ecx减少了编译器对ebx的入栈保存
int asmgcd(int a,int b)
{
__asm{
mov eax, a
mov ecx, b
nznoop:
cdq
div ecx
test edx, edx
jz zreturn
mov eax, ecx
mov ecx, edx
jmp nznoop
zreturn:
mov eax, ecx
}
// ignore no return warning
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-1 21:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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