指定されたフォーマット通りに文字列を出力する関数です。
この関数が呼び出されるとき、各レジスタには次のような値が代入されているようです。
a0:出力先のアドレス
a1:フォーマット指定子(の文字列があるアドレス)
a2〜:「%〜」の部分に代入される値(文字列(%s)の場合はその文字列があるアドレス)
(a2,a3の後はt0,t1...と続きます)
※フォーマット指定子の詳細は、各自で「printf」等で検索して調べてください。
(要は、C言語のsprintfの各パラメータがa0から順番に入っていくだけです)
例えば、a1で指定されたアドレスに「HP %d / MP %d」という文字列が入っており(%d=符号付き10進数)
lw a2,$0000(v0)
lw a3,$0008(v0)
jal $xxxxxxxx (←sprintfへのジャンプ)
と命令が並んでいた場合、v0がHPのアドレス、v0+8がMPのアドレスである可能性があります。
この場合、
addu a2,v0,zero
addiu a3,v0,$0008
と書き換えれば読み込み先のアドレスを表示させることができます。
(16進数で表示したければ「%d」を「%x(16進表示)」に書き換える)
文字数が多くて表示が切れてしまう場合はロード命令を書き換えたり、srlやandiを使うなどして
1〜2byteずつ表示するようにすればいいと思います。
他にも、a2以降のロード先を書き換えて特定アドレスの状態を表示させるなどの使い方もあります。