0

私はasmが初めてで、文字列を使用しています。

1/文字列があり、最初の文字のアドレスを返したい。(私は C メインで asm 関数を呼び出します)。

私はもう試した :

movl  $str, %eax

私によると、文字列を返します。

movl $(str), %eax文字列の最初の文字のアドレスを返しますか? 文字列の 2 番目の文字のアドレスを返したい場合、asm でそれを行う方法がわかりません。

私はそのようなCプログラムで結果を表示します:

printf("string : %s, adress : %d\n", function_asm(), function_asm()).

「string : programmation, address : 134520852」が返ってきます。「134520852」はアドレスではなく、何かわからないことがあると思います。

%edi2/文字列に 、および 関数があるのを見たことがありますが、%esiそれを使用した適切な (簡単な) チュートリアルが見つかりません。%edi はインデックス ソース、%esi はインデックス先であることを理解しました...それに関するリンクをいくつか知っていますか?

前もって感謝します !:-)

4

1 に答える 1

2

文字列の最初の文字のアドレスを に取得する方法を知っている場合eax、2 番目の文字のアドレスは単純なinc %eax(インクリメント eax レジスタ) で取得できます。

が文字列のアドレスではないと思う理由がわかりません。特にその文字列が実際にアドレスである場合は、からの戻り値が大丈夫だったことが証明されます。おそらく、.134520852"programmation"function_asm()%p

そして、あなたは基本的に正しいですが、それらを間違った方法で持っています%edi。がソースで、が宛先です。%esi%esi%edi

于 2011-11-12T12:42:06.123 に答える