回 帖 发 新 帖 刷新版面

主题:可以这样做一个快速swap吧

void swap (char *a, char *b)
{
    asm push a
    asm push b
    asm pop a
    asm pop b
}

回复列表 (共10个回复)

沙发

不可以
/////////////////////////////////////////////////

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);
}

板凳

xchg很慢的

3 楼

主要的程序根本没有起到目的
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
下面  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 楼

呵呵,1楼的程序有点搞笑哈

5 楼

什么意思?
我写的程序没有问题呀

6 楼

没啥,没必要用xchg

7 楼

我想问一下一楼的,那个程序为什么不可以啊
asm push a
    asm push b
    asm pop a
    asm pop b
应该是可以的嘛

8 楼

自己试一下,在想一想

9 楼

把参数改成int型就行了吧

10 楼

不可以!仔细想想和观察,C++ 中参数中的值传递和引用传递是怎么实现的

我来回复

您尚未登录,请登录后再回复。点此登录或注册