UP | HOME

Practice2 - 2023年度 システムプログラミング

課題内容

本課題では,以下の事を学習します.

  1. 文字(列)とCPUの関係,簡単な制御構造の記述
  2. 各種命令と擬似命令
  3. アセンブラ指令

「各種命令と擬似命令」については,個々に全ての命令を説明する訳ではありません. 適宜,教科書を参照し,必要に応じて自習する必要があります.

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の解答は,演習時間内に配布する用紙に記入して提出すること

  1. 教科書A.10節「MIPS R2000 のアセンブリ言語」によると, li 命令は「疑似命令」とある.この疑似命令とは何か調べよ. $at との関連についても調べよ.
  2. j $ra は,教科書の命令表には載っていない記法である. このような,疑似命令ではないが,SPIMが許す記法について2つ以上見付けてみよ.
  3. 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

解説

Author: Yoshinari Nomura

Emacs 27.1 (Org mode 9.3)