• 締切済み

アセンブリプログラムの問題です。

アセンブリプログラムの勉強をしているのですが、以下の問題がわかりません。 (1) 変数f, g, h, i, j はCのプログラム内で32ビットの整数として宣言されているものとする。 以下のCのステートメントをMIPSのアセンブリコードで表せ。 また、f, g, h, i, j の値がそれぞれ1, 2, 3, 4, 5 であるならば最終的なfの値はいくつか。 a. f = g + f + i ; b. f = g + (h + 2); (2) 変数f, g, h, i, jはそれぞれ$s0, $s1, $s2, $s3, $s4に割り当てるられているものとする。また、配列AとBのベースアドレスは、それぞれレジスタ$s6 と$s7 に割り当てられているものとする。 次のCのステートメントをMIPSのアセンブリコードで表せ。 a. f = g + h + B[4] ; b. f = g - A[ B[4] ] ; c. f = -g + h + B[1] ; d. f = A[ B[g] + 1 ] ; (3) (2)の設定において、次のMIPSのステートメントをCのステートメントで表せ。 また、可能ならばこのMIPSアセンブリコードを同じ機能を果たしながらMIPS命令の数が最小になるように書き直せ。 a. add $s0, $s0, $s1 add $s0, $s0, $s2 add $s0, $s0, $s3 add $s0, $s0, $s4 b. lw $s0, 4($s6) 以上です。わかるものだけでも良いので教えてもらえますでしょうか?

みんなの回答

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

問題の設定不足で回答できません。 (1) 変数f, g, h, i, jがレジスタに割り当てられているのかそうでないのかが不明です。 fの値を求めることはアセンブリコードとは関係に可能です。 a. g + f + i = 2 + 1 + 4 = 7 b. g + (h + 2) = 2 + (3 + 2) = 7 (2) 配列A, Bの型が不明です。

関連するQ&A

  • 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

  • MIPSのアセンブリ・コードの問題です。

    CコードからMIPSアセンブリコードへの変換問題を教えてください。 以下のC のコードに対応するMIPS のアセンブリ・コードを書け。 C コード: #define TAB_SIZE 8 int tab[TAB_SIZE]; void main() { int i; for (i = 1; i < TAB_SIZE; i++) { tab[i - 1] = tab[i]; } } • SPIM でのシミュレーションのため、 tab[8] = {8, 9, 10, 11, 12, 13, 14, 15}; としてコードを書け。つまり、データ・セグメントを次のようにせよ。 .data tab: .word 8, 9, 10, 11, 12, 13, 14, 15 • SPIM のDATA セクションが以下のようになることを確認せよ。 [0x10010000] 9 [0x10010004] a [0x10010008] b [0x1001000c] c [0x10010010] d [0x10010014] e [0x10010018] f [0x1001001c] f 1

  • エクセル 3列おきに列を挿入したい

    いつもお世話になります。 1行目に営業所コードがあり、そのコードを3列おきに表示するにはどうしたらいいでしょうか。   A  B  C  D  E  F  G  H  I  J   2   3   4   5   7   8  11  12  14  15              ↓   A  B  C  D  E  F  G  H  I  J   2          3         4         5 営業所コードは2~150の数字で、100ほどの営業所コードが存在します。 よろしくお願いします。

  • 確立の問題なんですが・・・

    A、B、C、D、E、F、G、H、I、Jの10組の野球チームがあってA>B>C>D>E>F>G>H>I>Jという順番で強いとき, トーナメントをするとCが準準決勝で負ける確立はなにか?という問題です。棒有名高校の入試問題なのですが誰か分かる人お願いします。

  • こんなメールが来たんですが、解読お願いします。

    知らないアドレスからYahoo!メールに来ました。解読お願いします。 o$C$?$h(B?? $B?2$k;~4V$b$_$8$1!<$7$h(B $B:#Ho32FO$1$N$?$a$K@:?@2JDL$C$F%+%&%s%;%j%s%0$_$?$$$N$@$1$d$C$?$j$H$+K\Ev6b$+$1$5$;$k$h$J(B?? $BK\Ev:#$@$1$@$+$i$=$s$J$s$G$$$i$l$s$N$b(B $B$3$l0J9_0l@Z%a!<%k$bJV?.$7$J$$$7EEOC$b$G$J$$$+$i(B $B$b$&IU$-$^$H$o$J$$$G0l@Z$&$A$K4X$o$i$J$$$G$&$A$o$b$&0l@Z9%$-$8$c$J$$$70l@Z4X$o$j$?$/$J$$(B $B$3$l$,K\Ev$K$&$A$+$i$N:G8e$N%a!<%k$H:G8e$NCi9p(B $B$O$C$-$j:#8@$C$?$+$i$M$&$A$N5$;}$A$r(B $B$=$l$G$b$3$N%a!<%k$K4X$7$FJV?.$7$F$-$ ?$j$7$?;~E@$G$&$A$^$B$G0lJ?7/$N$3$H$H$+B>$K$b?'!92fK}$7$F$-$?$3$H$"$k$1$I$J$K$7$G$+$9$+J,$+$s$M$'$+$i(B $B$I$C$A$_$A$b$&Ho32FO$1=P$9=`Hw$o$7$F$k$7$b$&O"Mm$7$J$$$+$i$H$+DLMQ$7$J$$$+$i(B $B$I$C$A$,>!$D$+3Z$7$_$@$M!)(B $B$H$K$+$/$b$&$&$A$K4X$o$i$J$$$G(B $B$"$H(Bmixi$B$N$o>C$5$J$$(B$BA0$K>C$7$?$N$o$b$&O"Mm$7$F$3$J$$$C$F<+J,$+$i8@$C$?$+$i$=$l$J$i$C$F;W$C$?$1$I2?2s$bLsB+GK$C$F$k$+$i:#2s$o>C$7$^$;$s(B $B$"$J$?$,:#8e$&$A$KO"Mm$7$F$/$k$+$7$F$3$J$$$+$H$+?'!9BP1~8+$F$+$i7h$a$k$

  • いきなりこんなメールが来ました。

    知らないアドレスからYahoo!メールに来ました。文字化けなのは分かってますが、解読お願いします。 $B$&$A$H$*A0$N7hDjE*$J0c$$65$($F$"$2$h$&$+!)(B $B$^$:$&$A$o0&>p$K52$($F$J$$(B $B$b$&9%$-$8$c$J$$(B $BNd$a$?$C$F8@$C$F$k?M$K$7$D$3$/$D$-$^$H$o$J$$(B $B%9%H!<%+!<$7$?$3$H$J$$(B $B$&$A$o$*A0$h$j$+$o$5$C$Q$j$7$F$k$N$H:,@-$=$3$^$GIe$C$F$J$$(B $B<+J,$G$I$s$@$1$&$A$KEEOC$7$F$k$+J,$+$C$F$k$h$M(B $BL@:Y=q<h$j4s$;$k;~$,K\Ev3Z$7$_$@$h(B?? $B$&$A$*A0$,$7$D$3$$$;$$$GK\EvF,$*$+$7$/$J$j$=$&$@$h:#(B $B$3$N2?=54V$^$B$GBQ$($k$N$D$i$+$C$?$7K\Ev:#$^$G$G0lHV$N@:?@E*6lDK$rL#$ &$A$,(B $B$&$A$,$I$s$@$1$D$i$$;W$$$7$F2fK}$7$F$?$+9M$($?J}$,$$$$$h(B $B$I$s$@$1@:?@E*$K6l$7$$;W$$$7$?9M$($?J}$,$$$$$h(B $B9%$-$J?M$K$=$3$^$GDI$$5M$a$?<+J,$,$d$C$F$-$?$3$H$H$+:#$7$F$k$3$H(B $B$"$H$3$N@hHo32FO$1=P$7$?8e?'!9$H$*6b$NOC$7$bMm$s$G$/$k$H;W$&$1$I?F9'9T$7$?$$$s$8$c$J$+$C$?!)<+J,$,$d$C$F$-$?$3$H$G$$$/$iBg?M$K$J$C$F$h$&$,>/$J$+$i$:2HB2$K$o>/$7$G$bLBOG$+$+$k$C$F9M$($F9TF0$7$?J}$,$$$$$h?F9'9T$7$?$$$J$i(B $BJa$^$k$J$s$F$b$C$F$N$[$+$@$+$i$M(B $B$^$!$H$K$+$/$&$A$

    • ベストアンサー
    • HTML
  • 線形代数の問題?

    線形代数の問題だと思うのですが、9個の未知数がa b c d e f g h i  があって、  a+b+c=2 d+e+f=2 g+h+i=2 a+d+g=2 b+e+h=2 c+f+i=2 を満たしているとします。  行列で書くと、 「1 1 1 0 0 0 0 0 0 | |0 0 0 1 1 1 0 0 0| |0 0 0 0 0 0 1 1 1| |1 0 0 1 0 0 1 0 0|=A |0 1 0 0 1 0 0 1 0| |0 0 1 0 0 1 0 0 1 」 x=(a b c d e f g h i) c=(2 2 2 2 2 2 2 2 2) として、A(xの転置)=(cの転置) と書けます。 a~iは0か1として、解が何個あるのか調べたいのですがどのように考えたらよいのでしょうか。

  • C言語 プログラム問題

     すいません、C言語初心者です。以下のプログラムがわからないので、よければ教えてください。 #include<stdio.h> int f(int a); int g(int *a); main(){ int i, j, na =10; int a[12] = {1,2,3,4,5,6,7,8,9,10,11,12}; printf("a = "); for (i=0; i<na; i++); printf("%d ",a[i]); j = f(a[2]); j = f(a[3]); j = g(a+4); j = g(a+5); printf("\na = "); for (i=0;i<na;i++) printf("%d ",a[i]); printf("\nj = %d\n",j); } int f(int a) { static int total=0; total = total + a; a = a+50r; return total; } int g(int *a) { static int total=0; total = total+(*a); (*a) = (*a) +50; return total; } <結果> a = 1 2 3 4 5 6 7 8 9 10 a = 1 2 3 4 55 66 7 8 9 10 j = 11    まず、結果がなぜ下の段に55 56があるのか、そして関数f,gの機能、最後にj=11の意味です。j=5+6 =11とは聞きましたがどこから出ているのかがわかりません。  よろしくお願いします。

  • excel 関数作成の簡素化 ?

    A B C D E F G H I J 1784 1784 1781 1782 1809 1813 1821 1813 1784 1784 (1)A-B B-C C-D D-E E-F F-G G-H H-I I-J (1)0 3 -1 -27 -4 -8 8 29 0 (2)=SUMIF(A:I,">0",A:I) で 40になる 上記の(1)を使用せず (2)のように一気に出来ないか? もしも 表示が悪ければ 書き直し する為 回答不要

  • プログラムの間違いを教えてください。

    VBAのFFTのプログラムをCで書き直しています。 C言語ではうまく動作しません。間違いを教えていただけないでしょうか? よろしくお願いします。 (1)動くVBAのプログラム(参照 http://tsuyu.cocolog-nifty.com/blog/2007/03/publi.html) Option Explicit Public Sub fft() Dim g, h, i, j, k, l, m, n, o, p, q As Integer i = 0 j = 0 k = 0 l = 0 p = 0 h = 0 g = 0 q = 0 'データ数nを指定(2の整数乗である必要あり) n = 1024 m = Log(n) / Log(2) 'xr,xiはデータ数以上、s,cはデータ数の半分以上を指定しておく Dim xr(1024), xi(1024), xd, s(512), c(512), a, b As Single 'データの読み込み 1列目を実数部、2列目を虚数部とする For i = 1 To n xr(i - 1) = Cells(i, 1) xi(i - 1) = Cells(i, 2) Next i 'FFTの計算 a = 0 b = 3.14159265359 * 2 / n For i = 0 To n / 2 s(i) = Sin(a) c(i) = Cos(a) a = a + b Next i l = n h = 1 For g = 1 To m l = l / 2 k = 0 For q = 1 To h p = 0 For i = k To l + k - 1 j = i + l a = xr(i) - xr(j) b = xi(i) - xi(j) xr(i) = xr(i) + xr(j) xi(i) = xi(i) + xi(j) If p = 0 Then xr(j) = a: xi(j) = b Else xr(j) = a * c(p) + b * s(p) xi(j) = b * c(p) - a * s(p) End If p = p + h Next i k = k + l + l Next q h = h + h Next g j = n / 2 For i = 1 To n - 1 k = n If j < i Then xd = xr(i) xr(i) = xr(j) xr(j) = xd xd = xi(i) xi(i) = xi(j) xi(j) = xd End If k = k / 2 Do While j >= k j = j - k k = k / 2 Loop j = j + k Next i 'データの出力 For i = 1 To n '4列目に実数部、5列目に虚数部、6列目に絶対値を表示 Cells(i, 4) = xr(i - 1) Cells(i, 5) = xi(i - 1) Cells(i, 6) = (xr(i - 1) ^ 2 + xi(i - 1) ^ 2) ^ 0.5 Next i End Sub (2)上記のプログラムの書き換えている箇所 For i = 1 To n xr(i - 1) = Cells(i, 1) xi(i - 1) = Cells(i, 2) Next i 'FFTの計算 a = 0 b = 3.14159265359 * 2 / n For i = 0 To n / 2 s(i) = Sin(a) c(i) = Cos(a) a = a + b Next i l = n h = 1 For g = 1 To m l = l / 2 k = 0 For q = 1 To h p = 0 For i = k To l + k - 1 j = i + l a = xr(i) - xr(j) b = xi(i) - xi(j) xr(i) = xr(i) + xr(j) xi(i) = xi(i) + xi(j) If p = 0 Then xr(j) = a: xi(j) = b Else xr(j) = a * c(p) + b * s(p) xi(j) = b * c(p) - a * s(p) End If p = p + h Next i k = k + l + l Next q h = h + h Next g j = n / 2 For i = 1 To n - 1 k = n If j < i Then xd = xr(i) xr(i) = xr(j) xr(j) = xd xd = xi(i) xi(i) = xi(j) xi(j) = xd End If k = k / 2 Do While j >= k j = j - k k = k / 2 Loop j = j + k Next i (3)書き換えたけど変な値が発生するプログラム #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <math.h> FILE *fp; FILE *fa; char a[100]; double b[1200]; double c[1200]; double d[1200]; double e[1200]; double f[1200]; char str[100]; char *p; double h; long i; long j; long k; long l; int m; long n; long o; int q; double x[25]; long s; double t; double u[1200]; double v[20][1200]; double v2[20][1200]; double v3[20][1200]; double w[25]; double intercept[10]; double slope[10]; double frequency[12]; double dtime; double dtime2; double theta1; double theta2; double co[1200]; double si[1200]; double xd; long l2; long l3; long n3; long h3; long g3; long m3; long k3; long p3; long q3; long i3; long j3; long x3; double y3; double a3; double b3; double c3; double d3; double f3; double w2[25]; x3=0; y3=0; i3=0; j3=0; k3=0; l3=0; p3=0; h3=0; g3=0; q3=0; a3=0; b3=0; c3=0; d3=0; theta1=0; theta2=3.14159265359*2/1024; for(l=0; l<=512; l++){ si[l]=sin(theta1); co[l]=cos(theta1); theta1=theta1+theta2; } n3=1024; m3=10; l3=n3; h3=1; for(g3=1; g3<=m3; g3++){ l3=l3/2; k3=0; for(q3=1; q3<=h3; q3++){ p3=0; for(i3=k3; i3<(l3+k3); i3++){ j3=i3+1; theta1=c[i3]-c[j3]; theta2=d[i3]-d[j3]; if(p3==0){ c[j3]=theta1; d[j3]=theta2; } else{ c[j3]=theta1*co[p3]+theta2*si[p3]; d[j3]=theta2*co[p3]-theta1*si[p3]; } p3=p3+h3; } k3=k3+l3+l3; } h3=h3+h3; } j3=n3/2; for(i3=1; i3<n; i3++){ k3=n3; if(j3<i3){ xd=c[i3]; c[i3]=c[j3]; c[j3]=xd; xd=d[i3]; d[i3]=d[j3]; d[j3]=xd; } k3=k3/2; while(j3>=k3){ j3=j3-k3; k3=k3/2; } j3=j3+k3; } for(i3=0; i3<n3; i3++){ c[i3]=c[i3]/1024; d[i3]=d[i3]/1024; } (1)中の(2)箇所を(3)のように書き換えました。 どうしてもうまく動作しません。 教えていただけないでしょうか? よろしくお願いいたします。