情報領域演習第二C演習第2回『論理演算,算術演算,アセンブラ言語』

演習第2回:論理演算,算術演算,アセンブラ言語(説明資料

MIPS のシミュレータSPIM上で実行可能なアセンブリ言語のコードを用いてプログラムを作成する。入出力される値は32ビットの符号付き整数であり、オーバーフロー等は発生しないと仮定してよい。正しいプログラムではレジスタの値の待避が必要になるが、今回の演習ではレジスタの値の待避は考えなくてよい。

ソースコードには要所にコメントを記し、どのような処理を行うのか書くこと。コメントの無いソースコードは評価対象外である。

ソースコードのファイル(*.s)は処理内容を表すような適切かつ簡潔な名前を付けること。

正しく動作することを証明する実行例は、必ず境界での動作を保証すること(e.g. 数列の初項、条件判断を要する場合、異常値の対応など)。これを満たす実行例が無い場合は減点する。

レポートの提出期限:2025年5月29日(木)23:59:59

課題1(レポート問題)

キーボードから読み込んだ整数値をxとするとき、93x+5を求めたい。以下の3種類のアルゴリズムのプログラムをそれぞれ作成せよ。計算結果は32ビットで表現できる範囲であることを前提とする。

その1
93倍の計算を93回の加算の繰り返し(条件分岐によるループ)で実現する。
その2
93倍の計算をmult命令で実現する。
その3
93倍の計算を左シフトと加算の組み合わせで実現する。

課題2(レポート問題)

キーボードから読み込んだ整数値が 8の倍数の場合は ”yes”、さもなくば ”no” を表示するプログラムを作成せよ。

8の倍数となる数値を2進数で表すと、下位3ビットが全て0になる。数値の特定のビットの状態を調べたい時は、調べたいビットの部分が1で他が0の値と論理積を求めることで、下位3ビット分の値のみを抽出できる。このことを利用すること。

課題3(レポート問題)

ペル数列(Pell number)を初項から第n項まで表示するプログラムを作成せよ。項数n(≧1)はキーボードから入力すること。ペル数列の第n項P(n)は以下のように定義される。

  • P(1)=1
  • P(2)=2
  • P(n)=2P(n-1)+P(n-2), if n ≧ 3

シミュレータ SPIM が提供する数値表示は、出力後に改行しないため、複数の値をそのまま出力すると区切りが分からなくなる。数値を出力するたびにコンマや改行などの区切りの出力も必要である。

SPIMプログラム開発と動作確認について

★ MIPSシミュレータSPIMの使い方については SPIM を参照のこと。

SPIMをリセットするためには reinitialize コマンドを使ってください。このコマンドは、SPIMを起動したまま修正したプログラムを読み込む前に実行します。

★ 実行例は複数示す必要があります。その他、課題実行、レポート作成にあたっては レポート に従うこと。