2011-06-08 18 views
4

Hellowになります私はそれをASMノウハウドントようにプロジェクトASM ...どのようにこの小さなASMコードはC++

template <class T> 
T returned; 

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

C++で統合されたのasmコードを...見つけこのコードは何を意味するのか理解するのは難しいですアセンブリコードは、基本的に関数ポインタとしてTEMを処理し、それを呼び出している

答えて

3

... ... は、誰もがCで、このASMコードを++、完全に変換できますし、ここに投稿:) Ttanksを。その後、戻り値を返します。

8

バッファに配置されたコードを実行していて、EAXレジスタの内容を返すようです。 temの内容はeaxの内容が関数呼び出しを行うために使用されるeax

call eax 

プロセッサ内部レジスタに転写器である

typedef T (*pfn)(); 

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

確かに 'typedef T(* pfn)()'を意味しますか? – Nemo

+0

@ニモ:確かに、私は!ありがとう。 – Ferruccio

3
mov eax, tem; 

:あなたはこれを試してみてください。 eaxのアドレスから始まるコードが実行されます。関数呼び出しが戻った後、戻り値がレジスタeax

mov returned, eax 

であろうeaxで戻り値が変数returned

に移すこれは、基本的に、コードが何をするかです。あなたはちょうどそれがどのように動作するかを知るためにcall instuctionを見ています。

関連する問題