bne $12,$11,push #$12(取得した文字)と$11(改行文字)を比較して、同じでないならpushへ飛ぶ。
分岐命令と比較命令が一つになってるだけだから、これ自体は別におかしくはないと思うけど。

スタックは使ってないように見えるね。
1.配列は下位アドレスから上位アドレスへ向かって使うが、スタックは上位から下位へ使う。
2.スタックポインタは$29(別名:$sp)で操作できる。
3.残念ながらスタック操作専用命令はないので、$spは自分でやる必要がある。
こんな感じで。

push操作
addi $sp,$sp,-4
sw $12,0($sp)

pop操作
lw $12,0($sp)
addi $sp,$sp,4