実習課題
- 8ビット正数と8ビット正数の乗算
非負の2つの整数の積を計算するプログラムを作成せよ。
2つの8ビット整数は、アドレスC0(10進数の192)およびC1(10進数の193)に格納されているものとし、乗算結果(16ビット)の上位8ビットをアドレスC2(10進数の194)、下位8ビットをアドレスC3(10進数の195)に格納せよ。
課題1サンプルプログラム
- $n$ 個の数の並べ替え
任意の個数の8ビット整数を降順(大きいものから小さいものへ)に並べ替えるプログラムを作成せよ。
アドレス9F(10進数の159)に並べ替える数の個数 $n$ が格納されており、アドレスA0(10進数の160)以降に並べ替えの対象となる $n$ 個の8ビット数が連続して格納されているものとする。
並べ替えの結果は、アドレスA0(10進数の160)に最も大きい数を格納し、以降順に $(n-1)$ 個の数を連続して格納せよ。
データ例
ヒント(PDF)
- アッカーマン関数
非負整数 $x$ と $y$ に対して以下のように定義される関数 $\mathit{ack}(x,y)$ をアッカーマン関数と呼ぶ。
\[
\mathit{ack}(x,y)
=
\left\{
\begin{array}{ll}
y+1 & x=0 \\
\mathit{ack}(x-1,1) & x\neq0,y=0 \\
\mathit{ack}(x-1, \mathit{ack}(x,y-1)) & x\neq0,y\neq0
\end{array}
\right.
\]
小さな非負整数 $x$ と $y$ についてアッカーマン関数を計算するプログラムを作成せよ。
8ビットの非負整数 $x$ と $y$ はそれぞれアドレスA0(10進数の160)とアドレスA1(10進数の161)に格納されているものとし、計算結果 $\mathit{ack}(x,y)$ はアドレスA2(10進数の162)に格納せよ。
ヒント(PDF)
- 最短経路長問題の解
最短経路長を求めるプログラムを作成せよ。
最短経路長を求める対象とするグラフのデータは以下のいずれかを用いること。アドレスFF(10進数の255)にグラフの点の数、ラベルEDGESのアドレス以降に枝の情報が格納されているものとし、求めた最短経路長はアドレス100(10進数の256)以降に格納せよ。
データ1
データ2
データ3
データ4
データ5
データ6
データ7
ヒント(PDF)
- ディジタルフィルタ
以下の伝達関数を有するディジタルフィルタを実行するプログラムを作成せよ。
\[
H(z)=\frac{0.13608+0.27216z^{-1}+0.13608z^{-2}}{1-0.72057z^{-1}+0.26490z^{-2}}
\]
入力データはそれぞれ1バイトの非負整数とし、アドレス190(10進数400)から1C1(10進数449)までの50個とする。出力(フィルタ結果)はそれぞれ1バイトの非負整数として、アドレス1C2(10進数450) から1F3(10進数499)に保存せよ。50個の入力データは以下を用いること。
入力データ
ヒント(PDF)
- 16ビット数と8ビット数の除算
非負の16ビット整数(被除数)を正の8ビット整数(除数)で除算した結果の商と余りを計算するプログラムを作成せよ。
16ビットの被除数は、上位8ビットがアドレスC8(10進数の200)、下位8ビットがC9(10進数の201)に格納されており、8ビットの除数は、アドレスCA(10進数の202)に格納されているものとする。
16ビットの商は、上位8ビットをアドレスCB(10進数の203)、下位8ビットをCC(10進数の204)に格納し、余り(8ビット)をアドレスCD(10進数の205)に格納せよ。
ヒント(PDF)
- 平方根の計算
平方根を求めるプログラムを作成せよ。
開平法を二進数で実行するとよい。元数は2または3とする。(2桁二進数)
アドレス1F7(10進数503)に元の数が格納されており、平方根は32ビットまで求め、アドレス1F8(10進数504)から1FB(10進数507)までの4バイトに格納するものとする。
ヒント(PDF)
- 二進化十進数の乗算
十進数の1桁は0から9までの値をとり、4ビット二進数で表すことができる。1バイトを4ビットずつに分け、それぞれ1桁の十進数を表すことで、1バイトで2桁の十進数を表す方式を二進化十進数(Binary Coded Decimal, BCD)という。BCD表現された2つの2桁十進数の積をBCD形式で求めよ。2つの2桁十進数は、アドレス4および5に格納されているものとし、乗算結果の4桁十進数の上位2桁(8ビット)をアドレス6、下位2桁(8ビット)をアドレス7に格納せよ。
ヒント(PDF)
- 7セグメントLED
ヒント(PDF)
- ドットマトリクスLED
ヒント(PDF)
課題遂行上の注意およびレポートについて
-
レポートには、プログラムを作成した課題の一覧、およびプログラムの実行クロック数を明記すること。
-
プログラムの元として用いたアルゴリズムを説明すること。
-
課題の中には、提供されている基本命令セットに特別な命令を追加することでプログラム実行効率を改善(実行クロック数を減少)できることがある。
必要ならば適当な命令を追加せよ。その際に、なぜその命令を追加する必要があるのか、またその命令追加によりどれくらいの効果があるかをレポートで述べよ。