2012-02-02 14 views
2

文字列の配列内の文字列のインデックスを検索しようとしています。私は今、私が何をしたいかのようなものを以下に示し、アレイのベースアドレスを知っている:C++インラインアセンブリコードで文字列を使用するには?

  • ポイントESIは、我々は配列で、検索する文字列の配列
  • ポイントEDIのエントリに
  • cmpsバイトptr ds:[esi]、バイトptr es:esiとediの時刻で1バイトを比較します。

しかし、私が探している文字列にEDIレジスタをどのように向けるのか混乱していますか?

int main(int argc, char *argv[]) 
{ 
char entry[]="apple"; 
__asm 
{ 
mov esi, entry 
mov edi, [ebx] //ebx has base address of the array 

などとなる。

だから私が探している文字列に自分のesiレジスタを指す正しい方法は何でしょうか?

私はWindows XP SP3でVisual Studio C++ Express Edition 2010でプログラミングしています。

答えて

5

Visual C++コンパイラでは、アセンブリコードで変数を直接使用できます。ここからの例:http://msdn.microsoft.com/en-us/library/y8b57x4b(v=vs.80).aspx

// InlineAssembler_Calling_C_Functions_in_Inline_Assembly.cpp 
// processor: x86 
#include <stdio.h> 

char format[] = "%s %s\n"; 
char hello[] = "Hello"; 
char world[] = "world"; 
int main(void) 
{ 
    __asm 
    { 
     mov eax, offset world 
     push eax 
     mov eax, offset hello 
     push eax 
     mov eax, offset format 
     push eax 
     call printf 
     //clean up the stack so that main can exit cleanly 
     //use the unused register ebx to do the cleanup 
     pop ebx 
     pop ebx 
     pop ebx 
    } 
} 

これよりも簡単なIMOはありません。変数がどこに格納されているのかを調べることなく、すべてのスピードを得ることができます。

関連する問題