1
私は外部アセンブリ関数を呼び出すCプログラムを実行しています。学術目的のために、私はstrcat
を実行しようとしています。 2つの文字列をchar *パラメータとしてアセンブリプログラムに渡します。私は、スタックにEBPをプッシュし、そのようEDXとEBXに文字列1と文字列2を割り当て、次のよう私のループは期待どおり実行されていません
mov edx, [ebp+8]
mov ebx, [ebp+4]
今残りは次のとおりです。
procStr1:
cmp BYTE PTR [edx], 0
jne readStr1
procStr2:
cmp BYTE PTR [ebx], 0
jne readStr2
jmp bottom
readStr1:
inc edx
jmp procStr1
readStr2:
mov BYTE PTR [edx], 'a'
inc edx
inc ebx
jmp procStr2
bottom:
inc edx
mov BYTE PTR [edx], 0
pop ebx
pop edx
pop ebp
ret
私は単にそれを追加することによって動作するかどうかを確認するためにテストしていaはstring1の最後までです。私が 'hi'と 'bye'と入力すると、Cプログラムで文字列1を印刷してhiaaaを印刷します。代わりに、私はstring1の後に通常13のaを取得します。上部に
push ebp
mov ebp, esp
:私は
1のデータ処理はので、私は疑うそれだけだ(つまり 'INC edx'を除く)正常に見える、また
:
もしそうなら、あなたの引数は、今で発見されていますこれらのポインタを正しい場所から取得する問題 – Martin
Visual Studioでコンパイルするときに[ebp + C]を実行すると文法エラーが発生します。そして右から左には、第2パラメータが最初にスタックにプッシュされることを意味しますか? – Rythven
投稿を編集しました.Cは16進数であるため、12(Cの値)を使用するか、hを追加します。アイデアは正しいですが、構文エラーです。右から左の場合は、第2パラメータが第1パラメータの前にプッシュされることを意味します。これはCの呼び出し規約であり、可変数の引数が可能です。 –