内联汇编语言

我正在做64位迁移,我需要将内联汇编代码移植到cpp这里是他的代码

void ExternalFunctionCall::callFunction(ArgType resultType, void* resultBuffer)
{
    // I386

    // just copy the args buffer to the stack (it's already layed out correctly)
    int* begin = m_argsBegin;
    int* ptr = m_argsEnd;
        while (ptr > begin) {
            int val = *(--ptr);
            __asm push val
        }
    }

我想将这个__asm push val迁移到cpp。 这个函数被调用四次,每次调用都会得到m_argsBegin和m_argsEnd的不同值(m_argsBegin和m_argsEnd都是动态数组)。 对于此“callFunction”函数的每次调用,此while循环执行4次。 因此,总共4x4 = 16个值将被存储在“连续内存位置”中,这是我猜测的“__asm push val”。 我需要在c ++中实现它。 我尝试了所有可能的方式(stack,array,Lnked list,Queue甚至将它分隔成一个单独的asm文件,但没有任何工作)任何人都可以帮忙吗?

我将这个内联汇编函数分隔成一个单独的汇编文件。 代码如下:

.386
 .model c,flat
  public callFunction_asm

CSEG segment public 'CODE'

 callFunction_asm PROC
    push ebp
    mov ebp, esp 
    mov ecx, [ebp+8] ;val
    push dword ptr [ecx]
    mov esp, ebp
    pop ebp
 RETN
 callFunction_asm ENDP
CSEG ends
END

其中callFunction_asm是一个extern函数,我将其声明为:

extern“C”void callFunction_asm(int val);

我将这个函数称为:

while (ptr > begin) {
        int val = *(--ptr);
        callFunction_asm(val); //possible replacement
    }

但即使这不起作用,谁能告诉我哪里出错了。 我是汇编编码新手。


push将其操作数放入堆栈,并减少堆栈指针。

如果您查看堆栈指针加1( 1($sp) ),您应该看到该值(但如果您希望返回,则通常使用pop )。

链接地址: http://www.djcxy.com/p/59749.html

上一篇: Inline assembly language

下一篇: GNU g++ inline assembly block like Apple g++/Visual C++?