Practice2 - 2024年度 システムプログラミング
課題内容
本課題では,以下の事を学習します.
- 文字(列)とCPUの関係,簡単な制御構造の記述
- 各種命令と擬似命令
- アセンブラ指令
「各種命令と擬似命令」については,個々に全ての命令を説明する訳ではありません. 適宜,教科書を参照し,必要に応じて自習する必要があります.
Practice2-1: ポーリングによる文字列出力
まず,教科書A.8節 「入力と出力」に示されている方法で, 文字 'A' を表示するアセンブラプログラムを記述せよ. プログラムでは,以下の手順を記述する必要がある.
(1) 0xffff0008番地の内容を読んで,$t0 に保存 (2) $t0レジスタの最下位ビット(LSB) が 0 ならば(1)に戻る (3) 0xffff000c番地に 'A' のASCIIコードを書き込む
これをMIPSのアセンブリコードで記述すると,以下のようになる.
.text .align 2 # 引数 $a0 の ASCII コードに対応する文字を出力する main: li $a0, 65 # $a0 に引数 'A' == 65 putc: lw $t0, 0xffff0008 # $t0 = *(0xffff0008) li $t1, 1 # $t1 = 1 and $t0, $t0, $t1 # $t0 &= $t1 beqz $t0, putc # if ($t0 == 0) goto putc sw $a0, 0xffff000c # *(0xffff000c) = $a0 j $ra # return
次に,これを2文字以上の文字列に対応させて, Hello を表示させるプログラムを記述し,SPIMで動作を確認せよ.
Practice2-2: 命令セットとレジスタの役割
以下について調査せよ. 特に3の解答は,演習時間内に配布する用紙に記入して提出すること
- 教科書A.10節「MIPS R2000 のアセンブリ言語」によると,
li
命令は「疑似命令」とある.この疑似命令とは何か調べよ.$at
との関連についても調べよ. j $ra
は,教科書の命令表には載っていない記法である. このような,疑似命令ではないが,SPIMが許す記法について2つ以上見付けてみよ.jal
命令は, jump and link 命令といわれるが,通常のジャンプ命令とどう違うのか.$ra
レジスタとの関連と,用途について調べよ.
Practice2-3: アセンブラ指令
以下のプログラムは,何をするプログラムか,
.data
と .text
.align
, .byte
とは何か.
1: .data 2: .align 2 3: msg: 4: .byte 72, 101, 108, 108, 111, 0 5: 6: .text 7: .align 2 8: main: 9: la $a0, msg 10: jal printf