2011-10-23 38 views
0

MIPSで文字列を連結するにはどうすればよいですか?私は何とか文字列の長さを知る必要があると思いますか?MIPSで文字列を連結する方法は?

+0

あなたは私が '.asciiz'を使用している場合、それは' \ 0を使用して文字列を終了すると思いC. – Vlad

+0

で '\ 0 'のような文字列の終端文字を、持っているかもしれない、またはを持っています'' beq $ t0、$ 0、Exit'のようにチェックします。ここで '$ t0'は文字列からロードされたバイトです –

+0

そうだと思います。しばらくの間、私はMIPSアセンブリを見たことがありません。アルゴリズム的には、 '\ 0'を見つけるまで、目的の文字列を踏み越えることができます(直接連結している場合)。そして、' \ 0'を見つけるまで、その文字列からバイトを追加し始めます。 \ 0'をソース文字列に追加し、その文字列も追加すれば完了です。 – Vlad

答えて

1

クイックや汚れ:

# String concatenate 

.text 

# Copy first string to result buffer 
la $a0, str1 
la $a1, result 
jal strcopier 
nop 

# Concatenate second string on result buffer 
la $a0, str2 
or $a1, $v0, $zero 
jal strcopier 
nop 
j finish 
nop 

# String copier function 
strcopier: 
or $t0, $a0, $zero # Source 
or $t1, $a1, $zero # Destination 

loop: 
lb $t2, 0($t0) 
beq $t2, $zero, end 
addiu $t0, $t0, 1 
sb $t2, 0($t1) 
addiu $t1, $t1, 1 
b loop 
nop 

end: 
or $v0, $t1, $zero # Return last position on result buffer 
jr $ra 
nop 

finish: 
j finish 
nop 

.data 
str1: 
.asciiz "Hello " 
str2: 
.asciiz "world" 
result: 
.space 200 

あなたが何かを理解していない場合は、お気軽にお問い合わせください。

楽しい:)

関連する問題