mips assembly で文字列中のあるパターンの出現を調べる
以下は,文字列中のあるパターンの出現を調べるプログラムである.18 行目の End はプログラムの終了を表すものとする.
• 入力は,それぞれ char 型の配列 Pat(ベースアドレス$s0) と,Str(ベースアドレス$s1) に与えられる.両方の文字列の終端には NULL 文字 (\0,ASCII コード 0) が置かれている.
• 文字列 Str にパターン Pat が出現する都度,その先頭の位置を整数配列 AP(ベースアドレス $s2) に記憶し,また,総出現回数をレジスタ$s3 に出力する.例えば,入力が Pat="ABC",Str="ABCAABCBABC"の場合,AP[0]=0,AP1=4,AP[2]=8,$s3=3 が出力される.
Main:
add $s3, $zero, $zero
add $t4, $zero, $zero
LoopO: add $t0, $s0, $zero
add $t1,$s1,$t4
LoopI: lb $t2, 0($t0)
beq $t2, $zero, Find
lb $t3,0($t1)
beq $t3,$zero,Fin
bne $t2,$t3,Next
addi $t0,$t0,1
addi $t1,$t1,1
j LoopI
Find:
sw $t4,0($s2)
addi $s2,$s2,4
addi $s3,$s3,1
Next :
addi $t4,$t4,$t1
j Loop0
Fin:End
このようなコードで、うまくいけない、もし配列 str と 配列pat にマッチする文字がない時、next にジャンプしても $t4 がずっと 同じ値ので、LOOP0にジャンプする時、add $t1,$s1,$t4 の命令によって、配列str の中にずっと同じ文字に指す
どうすればいいでしょうか?