Report2 - 2024年度 システムプログラミング
課題内容
以下の各問についてレポートを作成せよ.各プログラムをMIPS用Cコンパイラとアセンブラを利用して作成すること.
file.c
を file.s
に変換する方法は以下の通り.
$ spim-gcc file.c
2-1
SPIMが提供するシステムコールを C言語から実行できるようにしたい.
教科書A.6節 「手続き呼出し規約」に従って,各種手続きをアセンブラで記述せよ.
ファイル名は, syscalls.s
とすること.
また,記述した syscalls.s
の関数をC言語から呼び出すことで,
ハノイの塔(hanoi.c とする)を完成させよ.
1: void hanoi(int n, int start, int finish, int extra) 2: { 3: if (n != 0){ 4: hanoi(n - 1, start, extra, finish); 5: print_string("Move disk "); 6: print_int(n); 7: print_string(" from peg "); 8: print_int(start); 9: print_string(" to peg "); 10: print_int(finish); 11: print_string(".\n"); 12: hanoi(n - 1, extra, finish, start); 13: } 14: } 15: main() 16: { 17: int n; 18: print_string("Enter number of disks> "); 19: n = read_int(); 20: hanoi(n, 1, 2, 3); 21: }
spim-gcc
によって hanoi.s
ができたら,
hanoi.s, syscalls.s の順に SPIM 上でロードして実行.
実行例は以下の通り:
Enter number of disks> 3 Move disk 1 from peg 1 to peg 2. Move disk 2 from peg 1 to peg 3. Move disk 1 from peg 2 to peg 3. Move disk 3 from peg 1 to peg 2. Move disk 1 from peg 3 to peg 1. Move disk 2 from peg 3 to peg 2. Move disk 1 from peg 1 to peg 2.
2-2
hanoi.s を例に
spim-gcc
の引数保存に関するスタックの利用方法について,説明せよ.
そのことは,規約上許されるスタックフレームの最小値24とどう関係しているか.
このスタックフレームの最小値規約を守らないとどのような問題が生じるかについて解説せよ.
2-3
以下のプログラム report2-1.c をコンパイルした結果をもとに, auto変数とstatic変数の違い,ポインタと配列の違いについてレポートせよ.
1: int primes_stat[10]; 2: 3: char * string_ptr = "ABCDEFG"; 4: char string_ary[] = "ABCDEFG"; 5: 6: void print_var(char *name, int val) 7: { 8: print_string(name); 9: print_string(" = "); 10: print_int(val); 11: print_string("\n"); 12: } 13: 14: main() 15: { 16: int primes_auto[10]; 17: 18: primes_stat[0] = 2; 19: primes_auto[0] = 3; 20: 21: print_var("primes_stat[0]", primes_stat[0]); 22: print_var("primes_auto[0]", primes_auto[0]); 23: }
2-4
printf
など,一部の関数は,任意の数の引数を取ることができる.
これらの関数を可変引数関数と呼ぶ.
MIPSのCコンパイラにおいて可変引数関数の実現方法について考察し,解説せよ.
2-5
printf
のサブセットを C言語で 実装し,
SPIM上でその動作を確認する応用プログラム(自由なデモプログラム)を作成せよ.
フルセットにどれだけ近いか,あるいは,よく使う重要な仕様だけをうまく切り出して,
実用的なサブセットを実装しているかについて評価する.
ただし,浮動小数は対応しなくてもよい(SPIM自体がうまく対応していない).
加えて,この printf
を利用した応用プログラムの出来も評価の対象とする.
レポートに関する注意
- 体裁に関しては,レポートの体裁と章立て を参照
- 一般的なレポートの書き方については, LaTeXによるレポート作成の基本 を参照のこと.
- レポート締切は,教員の指示に従うこと. レポート内容について,口頭にて試問を行う.
- レポートは, Moodle のレポート提出ページからアップロードし, 試問時には参照できるように持参してもらう.
以上