- 締切済み
MIPS関連です。
MIPSに関する以下の問題についてどなたか添削お願いします。 ・1~6のCのステートメントをMIPSのアセンブリコードで表せ。 ・1~6のCのステートメントを実行するためにMIPSのアセンブリ命令がいくつ必要か。 ・変数f, g, h, i, j の値が1, 2, 3, 4, 5であるならば最終的なfの値はいくらか。 1. f = g + h + i + j; add t0, g, h add t1, i, j add f, t0, t1 ・3つ ・14 2. f = g + (h + 5); addi s0, h, 5 add f, g, s0 2つ ・10 3. f = g + f + i; add t0, g, f add f, t0, i ・1つ ・7 4. f = g + (h + 2) addi s0, h, 2 add f, g, s0 ・2つ ・7 5. f = f + g + h + i + j + 2; add s0, f, g add s1, h, i add s2, s1, s0 add s3, s2, j addi f, s3, 1 ・5つ ・15 6. f = g - (f + 5) addi t0, f, 5 sub f, g, t0 ・2つ ・4 ・1~6のMIPSのステートメントをCのステートメントで表せ。 ・変数f, g, h, i の値がそれぞれ1, 2, 3, 4ならば最終的なfの値はいくらか。 1. add f, g, h f = g + h; ・5 2. addi f, f, 1 add f, g, h f = f + 1; f = g + h; ・4 3. add f, f, h f = f + h; ・4 4. sub f, $0, f addi f, f, 1 f = f + 1; f = $0 + f; ・2 5. add f, -g, h f = -g + h; ・1 6. addi h, f, 1 sub f, g, h h = f + 1; f = g + h; ・4
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- jacta
- ベストアンサー率26% (845/3158)
これだけの情報では、回答は難しいと思います。 > 1. f = g + h + i + j; 例えば上記ですが... まず、f, g, h, i, jの型がわかりません。 intとlong longとfloatとdoubleでは当然違いますし、混在しているなら型変換も必要になります。 また、レジスタ変数であると仮定してよいのか、そうでないのかによっても違います。 > add t0, g, h > add t1, i, j > add f, t0, t1 g, h, i, jのいずれからがt0やt1ではないことは保証されているのでしょうか? また、別の文でt0やt1を使っていないことも。 ここはやはり、 add f,g,h add f,f,i add f,f,j だと思うのですが... g, h, i, jがレジスタ変数で、かつintまたはunsigned intであると仮定した場合の話ですが... > addi s0, h, 5 > add f, g, s0 s0を破壊するときは、元の値を退避しないといけないのでは? > 4. sub f, $0, f > addi f, f, 1 > > f = f + 1; > f = $0 + f; これは変ですね。 f = -f + 1; ではないですか? > 5. add f, -g, h 上記は意味不明ですね。 -gって何? ほかにも単純な下記間違いのようなものは多々ありますが、それは自分で見つけてください。