• 締切済み

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

  • kbasu
  • お礼率40% (4/10)

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

で, あなたは何が分からないんですか? (特にこの程度の) C なんて「アセンブリに毛が数本生えた」程度のものでしかありません. だから, C プログラムの動作が分かっていれば, それを (MIPS の) アセンブリに変換するだけです.

関連するQ&A

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

    アセンブリプログラムの勉強をしているのですが、以下の問題がわかりません。 (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) 以上です。わかるものだけでも良いので教えてもらえますでしょうか?

  • MIPSアセンブリ言語で配列を宣言するには?

    現在MIPSアセンブリ言語を学習していますが、配列に相当するものの宣言の仕方を詳しく知りません。 int items[5] ={0,0,0,0,0}; (C言語の場合) のような配列をMIPSで用意するなら、 items: .word 0,0,0,0,0 としてやるなどすればよいことまではわかっていますが、もし配列の要素数が500だった場合、上で0を500個も書かなければならないのでしょうか。短く書ける方法はありませんか。

  • 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

  • C#のアセンブリコードの表示のさせ方

    C#2005を使っています。 良くホームページでC#のアセンブリコードはこれですと C#ソースの一部をその部分のアセンブラが書かれていますが これはどのようにして、特定の処理のアセンブリを見ているのでしょうか? 例えば以下の4行のソースの部分のアセンブリを見る方法が知りたいです。 for (i = 1; i < 10; i++) { Console.WriteLine("Hellow Word!"); }

  • SPARCアセンブリ言語

    以下のC++でかかれたコードをSPARCアセンブリ言語に変換したいのですが、なかなかうまくいきません。 C++ main () { int x, y=0; for(x=2;x<=10;x=x+3) { y=y+(x/3 + 4); } x = x * 3; よろしければSPARCでの書き方を教えて下さい。

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

    アセンブリのプログラムで質問があります。cのプログラムのオブジェクトファイルを生成して、objdumpというコマンドでアセンブリ言語を表示させてみたのですが、全然分からなくて、困っています 。どうか、アセンブリプログラムの、解説をよろしくお願いします。できれば、1文1文解説してもらえるとありがたいです。あと、スタックの動き、確保などの解説もあるとありがたいです。よろしくお願いします。 cのプログラム int fact(int p) { if(p<=1) return 1; else return fact(p-1); } アセンブリのプログラム push %ebp mov %esp,%ebp sub $0x8,%esp cmpl $0x1,0x8(%ebp) jg 15 <_fact+0x15> movl $0x1,-0x4(%ebp) jmp 24 <_fact+0x24> mov 0x8(%ebp),%eax dec %eax mov %eax,(%esp) call 0 <_fact> mov %eax,-0x4(%ebp) mov -0x4(%ebp),%eax leave ret nop nop nop

  • PICでのアセンブリで、データレジスタについて教えて!

    PICでのアセンブリについて教えてください! 使用してるPICは18f452です。 PICのデータメモリを全部使いたいんです。 たとえばソースの冒頭で data_1 equ 0x00 data_2 equ 0x01 ・ ・ ・ data_n equ 0x0x とすべて宣言する方法がありますが、452のメモリは1500バイト以上あるのでこれを千行以上かくのは疲れます。。 そこでC言語で書くところの int data [1500]; for(,,,){ data[i] = xx; } という風に大容量のメモリを作り それに値をいれたり読み出したりしたいのですが・・。 これをアセンブラで書くにはどうしたらよいでしょうか?。

  • アセンブリ言語について。

    これが何をしているのか教えていただけないでしょうか?すみません。 これの事です。 (機械語データ) (アセンブリ言語) b8 57 61 6b 61 mov $0x616b6157,%eax 53 push %ebx 50 push %eax ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eax 89 e1 mov %esp,%ecx cd 80 int $0x80 58 pop %eax 31 c0 xor %eax,%eax 5b pop %ebx c3 ret

  • 機械語とアセンブリ言語について。

    (機械語データ) (アセンブリ言語) b8 57 61 6b 61 mov $0x616b6157,%eax 53 push %ebx 50 push %eax ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eax 89 e1 mov %esp,%ecx cd 80 int $0x80 58 pop %eax 31 c0 xor %eax,%eax 5b pop %ebx c3 ret で、右側のアセンブリ言語のニーモニックとオペランドについて解説していただけないでしょうか?すみません。

  • 機械語とアセンブリ言語について。

    (機械語データ) (アセンブリ言語) b8 57 61 6b 61 mov $0x616b6157,%eax 53 push %ebx 50 push %eax ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eax 89 e1 mov %esp,%ecx cd 80 int $0x80 58 pop %eax 31 c0 xor %eax,%eax 5b pop %ebx c3 ret こちらのアセンブリ言語の命令がわかるおすすめの書籍を知らないでしょうか? 教えていただけないでしょうか?すみません。

専門家に質問してみよう