2011-11-12 16 views
0

私はASMに新たなんだとの文字列を使用して。文字列とASMのx86

1/Iは、文字列を持っていると私は最初caracterのアドレスを返すようにしたいです。 (私はCメインでasm関数を呼び出します)。私が試した

movl $str, %eax 

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

movl $(str), %eaxとすると、文字列の最初の文字列のアドレスを返します。 文字列内の2番目の文字のアドレスを返す場合、私はそれをどのようにしてasmで行うことができないのか分かりません。

私はそのようなCプログラムで結果をdiplay:

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

それは私「という文字列134520852:プログラム書き込み、アドレス」を返し、私は「134520852」はアドレスではなく、何か私ドンがあると思います 理解していない。

2 /私は%edi,%esiと文字列の機能があると思っていますが、私はそれを使って良い(簡単な)チュートリアルを見つけることができません。私はちょうど%ediがインデックスソース用で、%esiがインデックスデスティネーション用であることを理解しています...あなたはそれについていくつかのリンクを知っていますか?

ありがとうございます!

+0

「134520852はアドレ​​スではない」と思われる理由は何ですか? – delnan

答えて

2

:-) あなたはeaxに文字列の最初の文字のアドレスを取得する方法を知っている場合は、2番目のcharcterのアドレスは、単純なinc %eax(インクリメントEAXレジスタ)を得ることができます。 function_asm()からの復帰は大丈夫だったことprrofされるだろう -

私はは、なぜあなたは134520852があなたの文字列のアドレス、特にその文字列が実際に"programmation"ある場合ではないと思いますわかりません。おそらく、あなたは%pとポインタとして印刷するほうが幸せでしょう。

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