.data
buffer: .space 64
str1: .asciiz "Enter int-number:"
str2: .asciiz "Enter float-number:"
str3: .asciiz "Enter double-number:"
str4: .asciiz "Enter String:"
str5: .asciiz "Enter char:"
ans1: .asciiz "this number is =>"
ans2: .asciiz "this string is =>"
ans3: .asciiz "this char is =>"
eol: .asciiz "\n"
.text
.globl main
main: li $v0,4 # print_stringを格納
la $a0,str1 # asciizの文字列を格納
syscall # 文字列の出力
li $v0,5 # read_int
syscall
move $t0,$v0 # 読み込んだ値を$t0に
li $v0,4 # print_stringを格納
la $a0,ans1 # asciizの文字列を格納
syscall
li $v0,1 # print_intを格納
move $a0,$t0 # 出力する整数を$a0に格納
syscall
li $v0,4 # print_stringを格納
la $a0,eol # 改行
syscall

li $v0,4 # print_stringを格納
la $a0,str2 # asciizの文字列を格納
syscall # 文字列の出力
li $v0,6 # read_float
syscall
li $v0,4 # print_stringを格納
la $a0,ans1 # asciizの文字列を格納
syscall
li $v0,2 # print_floatを格納
mov.s $f12,$f0 # 出力する整数を$f12に格納、単精度
syscall
li $v0,4 # print_stringを格納
la $a0,eol # 改行
syscall

li $v0,4 # print_stringを格納
la $a0,str3 # asciizの文字列を格納
syscall
li $v0,7 # read_doubleを格納
syscall
li $v0,4 # print_stringを格納
la $a0,ans1 # asciizの文字列を格納
syscall
li $v0,3 # print_doubleを格納
mov.d $f12,$f0 # 出力する整数を$f12に格納、倍精度
syscall
li $v0,4 # print_stringを格納
la $a0,eol # 改行
syscall

li $v0,4 # print_stringを格納
la $a0,str4 # asciizの文字列を格納
syscall
li $v0,8 # read_string
la $a0,buffer # 文字サイズbufferを格納
li $a1,20 # Stringのための語長
move $t0,$a0 # $a0を$t0に格納
syscall
li $v0,4 # print_stringを格納
la $a0,ans2 # asciizの文字列を格納
syscall
la $a0,buffer # 語長を再読み込み
move $a0,$t0 # $a0を$t0に格納(読み込みのアドレス)
syscall

li $v0,4 # print_stringを格納
la $a0,str5 # asciizの文字列を格納
syscall
li $v0,12 # read_charを格納
syscall
move $t0,$v0 # 読み込んだ値を$t0に
li $v0,4 # print_stringを格納
la $a0,eol # 改行
syscall
la $a0,ans3 # asciizの文字列を格納
syscall
li $v0,11 # print_charを格納
move $a0,$t0 # $a0を$t0に格納(読み込みのアドレス)
syscall
li $v0,4 # print_stringを格納
la $a0,eol # 改行
syscall


jr $ra


実行結果例
Enter int-number:1
this number is =>1
Enter float-number:1.2345678
this number is =>1.23456776
Enter double-number:1.2345678
this number is =>1.23456779999999999
Enter String:hogehoge
this string is =>hogehoge
Enter char:!
this char is =>!

考察:int float double String charで読み込んだものをそのまま出力するプログラムを作成した。
   指定されたシステムコールの動作をすべて確認することには成功したが、疑問が残る部分もある。
   5つめに確認をしたchar型の読み込みと出力が1文字しか取ることができず、改行をする前に次の命令に移行してしまう。
   調べたところ、read_charのアウトプットには”$v0 = 文字(改行なし)をエコーする”とあった。
   うまく実行できなかった原因は、print_charのインプットが”$a0 = 文字(下位8ビット)”であるため1文字しか出力できないことかと推測したが、
   解決策はみつからなかった。あるいは、自分が情報をうまく探すことができていないだけでこのchar型ではこれで正しく実行できているのかもしれない。
   1文字は正しく動作しているため大きく間違っているということはないが、より理解を深める必要があるように感じた。
   その他4つについては、String型で語長の設定にとまどった程度で課題スライドと参考資料をもとに作成することができた。