2011-06-08 79 views
4

Hellow我發現了一個彙編代碼...這是集成在C++項目ASM在C++項目......這個小彙編代碼如何在C++

template <class T> 
T returned; 

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

這樣我不知道在彙編它很難理解這是什麼意思代碼... 任何人都可以轉換成該ASM代碼在C++完全和張貼在這裏:) Ttanks ...

回答

3

彙編代碼基本上是治療TEM作爲函數指針並調用它。然後它將返回返回。

8

看起來它正在執行放在緩衝區中的代碼並返回EAX寄存器的內容。你可以試試這個:

typedef T (*pfn)(); 

returned = ((pfn) buffer)(); 
+1

你的意思是'typedef T(* pfn)()'? – Nemo 2011-06-08 16:37:14

+0

@Nemo:我當然知道!謝謝。 – Ferruccio 2011-06-08 16:56:22

3
mov eax, tem; 

tem內容是傳送器到處理器內部寄存器eax

call eax 

eax內容是用來進行函數調用。從地址eax持有的代碼將被執行。該函數調用返回後,返回值將在寄存器eax

mov returned, eax 

eax的返回值被轉移到一個變量returned

這是基本的代碼做什麼。你可以看看call指令來了解它的工作原理。