主题:可以这样做一个快速swap吧
euc
[专家分:4310] 发布于 2006-02-17 10:59:00
void swap (char *a, char *b)
{
asm push a
asm push b
asm pop a
asm pop b
}
回复列表 (共10个回复)
沙发
erping [专家分:3660] 发布于 2006-02-17 12:00:00
不可以
/////////////////////////////////////////////////
void swap (char *a, char *b)
{
__asm
{
mov eax, a
mov edx, b
mov cl, [eax]
xchg [edx], cl
mov [eax], cl
}
}
void main()
{
char d[] = {'1', '2'};
char *a = &d[0];
char *b = &d[1];
swap(a, b);
}
板凳
euc [专家分:4310] 发布于 2006-02-17 16:31:00
xchg很慢的
3 楼
erping [专家分:3660] 发布于 2006-02-17 17:45:00
主要的程序根本没有起到目的
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
下面 xchg、push、pop 的指令周期
;xchg
Clocks Size
Operands 808x 286 386 486 Bytes
reg,reg 4 3 3 3 2
mem,reg 17+EA 5 5 5 2-4 (W88=25+EA)
reg,mem 17+EA 5 5 3 2-4 (W88=25+EA)
accum,reg 3 3 3 3 1
reg,accum 3 3 3 3 1
;push
Clocks Size
Operands 808x 286 386 486 Bytes
reg16 11/15 3 2 1 1
reg32 - - 2 1 1
mem16 16+EA 5 5 4 2-4 (W88=24+EA)
mem32 - - 5 4 2-4
segreg 10/14 3 2 3 1
immed - 3 2 1 2-3
;pop
Clocks Size
Operands 808x 286 386 486 Bytes
reg16 8 5 4 4 1
reg32 4 - - 4 1
segreg 8 5 7 3 1
mem16 17+EA 5 5 6 2-4
mem32 5 - - 6 2-4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4 楼
euc [专家分:4310] 发布于 2006-02-18 19:50:00
呵呵,1楼的程序有点搞笑哈
5 楼
erping [专家分:3660] 发布于 2006-02-18 20:29:00
什么意思?
我写的程序没有问题呀
6 楼
euc [专家分:4310] 发布于 2006-02-19 10:50:00
没啥,没必要用xchg
7 楼
demonhunter [专家分:90] 发布于 2006-02-19 13:57:00
我想问一下一楼的,那个程序为什么不可以啊
asm push a
asm push b
asm pop a
asm pop b
应该是可以的嘛
8 楼
erping [专家分:3660] 发布于 2006-02-19 15:46:00
自己试一下,在想一想
9 楼
euc [专家分:4310] 发布于 2006-02-20 19:23:00
把参数改成int型就行了吧
10 楼
erping [专家分:3660] 发布于 2006-02-21 11:24:00
不可以!仔细想想和观察,C++ 中参数中的值传递和引用传递是怎么实现的
我来回复