2016-04-04 7 views
0

MIPSに、第2引数で指定されたアドレスに文字列をコピーする単純な関数を記述しようとしています。最初の引数は、コピーする文字列のアドレスです。私はこれを書いた:アセンブリMIPS文字列をアドレスにコピー

.globl strcpy 
strcpy: 
lb $t0 ($a0) 
beqz $t0 out 
sb $a0 ($a1) 
addi $a0 $a0 1 
addi $a1 $a1 1 
j strcpy 

out: jr $ra 

しかし、私は予期せぬ結果を得ていると私は間違っていたか分からない。

+1

'sb $ a0($ a1)'の代わりに 'sb $ t0($ a1)'が必要です。デバッガの使い方を学ぶ。 – Jester

+1

また、文字列をヌル文字で終了することなく関数から戻ってきています。結果を扱うCの文字列関数が必要な場合は、あなたは失望します。関数がCの 'strcpy()'の実装であると想定されている場合は、間違った値も返します。 – EOF

+0

ありがとう、私は問題を修正し、それが動作確認することができます。 – 11clock

答えて

0

sb $a0 ($a1)の代わりにsb $t0 ($a1)が必要です。これは、バイトをロードした場所であるためです。

文字列をヌル文字で終わらせることなく、関数からも戻ります。結果を扱うCの文字列関数が必要な場合は、あなたは失望します。関数がCのstrcpy()の実装であると想定されている場合は、間違った値も返します。

関連する問題