ASM在c ++项目中...这个小asm代码将如何在c ++中

时间:2011-06-08 16:27:27

标签: c++ assembly

Hellow我找到了一个asm代码...它集成在c ++项目中

template <class T>
T returned; 

BYTE *tem = buffer;
__asm
{
    mov eax, tem
    call eax
    mov  returned, eax
}

所以我不知道asm很难理解这段代码意味着什么...... 任何人都可以完全转换这个ASM代码在c ++中发布在这里:) Ttanks ...

3 个答案:

答案 0 :(得分:8)

看起来它正在执行放在缓冲区中的代码并返回EAX寄存器的内容。你可以试试这个:

typedef T (*pfn)();

returned = ((pfn) buffer)();

答案 1 :(得分:3)

汇编代码基本上将tem视为函数指针并调用它。然后它将返回返回。

答案 2 :(得分:3)

mov eax, tem;

tem的内容是转移者进入处理器内部寄存器eax

call eax

eax的内容用于进行函数调用。将执行从eax保持的地址开始的代码。函数调用返回后,返回值将在寄存器eax

mov returned, eax

eax中的返回值会转移到变量returned

这基本上就是代码所做的。你应该看一下call的表现,知道它是如何运作的。