Practice1 - 2023年度 システムプログラミング
課題内容
本課題では,以下について学習します.
- CPUが命令を実行していく過程と機械語の関係の概略
- MIPSシミュレータ xspim の使い方
Practice1-1: CPUと機械語の関係 (演習課題)
解答は,演習時間内に配布する用紙に記入して提出すること
以下の命令表を持った CPU がある.
命令 | 値 | 意味 | 説明 |
---|---|---|---|
ADD A,B,C | 01 A B C | (A)+(B)→(C) | A番地の値とB番地の値を加えC番地に格納 |
SUB A,B,C | 02 A B C | (A)-(B)→(C) | A番地の値からB番地の値を減じC番地に格納 |
ADI A,X,C | 03 A X C | (A)+X→(C) | A番地の値にXそのものを加えC番地に格納 |
SBI A,X,C | 04 A X C | (A)-X→(C) | A番地の値からXそのものを減じC番地に格納 |
JNZ X,Y | 05 X Y | JUMP TO Y IF (X)!=0 | X番地の値が0でないならY番地に分岐 |
HLT | 06 | HALT | プログラムを停止する |
このとき,以下のプログラムをメモリ中に格納して,0番地から実行する. このプログラムは,何を計算していることになるか. また,その結果は,どうやって確認できるか.
番地 | 値 | ヒント |
---|---|---|
00 | 01 80 81 80 | ADD SUM,COUNT,SUM |
04 | 04 81 01 81 | SBI COUNT,01,COUNT |
08 | 05 81 00 | JNZ COUNT,00 |
11 | 06 | HLT |
: | ||
80 | 00 | SUMの中身 |
81 | 05 | COUNTの中身 |
Practice1-2: xspim を利用したアセンブリプログラムの実行
前問と同様の動作をするMIPS CPU上のプログラムは,以下の通りである. このプログラムを MIPSシミュレータである SPIM (xspim) を利用して実行してみよ. 実行結果を確認するには,何を見ればよいかを考えて,結果を確認せよ.
.text # text セグメントに配置する指定 .align 2 # 4バイト境界に配置する指定 main: # main (ここから実行開始) move $a0,$zero # $a0 : SUM = 0 li $v1,1 # $v1 : COUNT = 1 loop: addu $a0,$a0,$v1 # SUM += COUNT addu $v1,$v1,1 # COUNT++ slt $v0,$v1,6 # $v0 = COUNT < 6 ? 1 : 0 bnez $v0,loop # if ($v0 != 0) goto loop move $t0,$a0 # $t0 = SUM j $ra # return
以下,実際の操作方法,
- 上記のアセンブラプログラムを practice1-1.s という名前で作成する.
xspim コマンドを起動する.教育用計算機上では,
$ xspim -mapped_io&
のように入力して起動できる.
(load) のメニューから,
practice1-1.s
と入力, (assembly file) を押す.これで,SPIM のメモリ中に,
practice1-1.s
が読み込まれる.次に, (run) のメニューを選んで (ok) を押す.
すると,SPIMは,メモリ中のプログラムを実行する. 例では,一瞬で実行が終了するはずである.
また,SPIM (= xspim) の使用方法について,教科書A.9節 「SPIM」を参考に,以下の操作方法を試してみよ.
- ステップ実行
- ブレークポイント設定,解除
- 無限ループなどに陥った場合の強制中断
- プログラムを変更し,再び実行する