Loading

C函数包装ASM代码时,指针无法传值的问题

用ASM代码测时间中,有如下的一段代码:

__asm
{
    RDTSC
    mov    HighStart, edx
    mov    LowStart, eax
}

想将这段ASM代码用一个函数来

包装一下,但是用指针传递变量HighStart和LowStart的地址:

inline void func( LONG* pnH, LONG* pnL ){
    __asm
    {
        RDTSC
        mov    [pnH], edx
        mov    [pnL], eax
    }
}

执行结果总是不正确,

忘记了在ASM里,需要用通用寄存器来进行寻址:

inline void func( LONG* pnH, LONG* pnL ){
    __asm{
        RDTSC
        push   ebx
        mov    ebx, dword ptr [pnH]
        mov    dword ptr [ebx], edx
        mov    ebx, dword ptr [pnL]
        mov    dword ptr [ebx], eax
        pop    ebx
    }
}

这下终于OK。

 

运行环境:VS2010,C++

posted @ 2013-03-29 20:55  gamesun  阅读(314)  评论(0编辑  收藏  举报