追加課題

  1. 8ビット数と8ビット数の乗算
    正、ゼロ、負のいずれかの2つの8ビット整数の積を計算するプログラムを作成せよ。
    負数は、2の補数表現を用いること。
    2つの8ビット整数は、アドレスC8(10進数の200)およびC9(10進数の201)に格納されているものとし、乗算結果(16ビット)の上位8ビットをアドレスCA(10進数の202)、下位8ビットをアドレスCB(10進数の203)に格納せよ。
    なお、乗数、被乗数を事前に正にして正数の積を求めた後に符号を修正する方式はとらないこと。

  2. 16ビット数と8ビット数の除算
    正、ゼロ、負のいずれかの16ビット整数(被除数)を8ビットの非ゼロ整数(除数)によって割算した結果の商と余りを計算するプログラムを作成せよ。
    負数は、2の補数表現を用いること。
    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)に格納せよ。
    なお、除数、被除数を事前に正にして答えを求めた後に符号を修正する方式はとらないこと。

  3. 10進数演算
    計算機に数値を入力する場合は、2進数や16進数のデータを直接入力するのではなく、数値を文字に表したデータを入力し、計算機が内部で数値に直すことが一般的に行われている。 例えば、C言語のプログラム中では、数値10は文字'1'と'0'によって表されている。
    アドレス90(10進数の144)以降の5バイトに文字表記によって格納された5桁の10進数とアドレス95(10進数の149)以降の5バイトに文字表記によって格納された5桁の10進数の和を計算し、結果をアドレス9A(10進数の154)以降の6バイトに6桁の10進数として文字表記によって格納するプログラムを作成せよ。
    所定の桁数未満の場合は空白を補うこと。
    例えば、以下の2つのデータ
    	org 144
    	db ' '
    	db '1'
    	db '2'
    	db '3'
    	db '4'
    	org 149
    	db ' '
    	db '9'
    	db '1'
    	db '1'
    	db '5'
    
    に対して、結果は
    アドレス内容
    154' '
    155'1'
    156'0'
    157'3'
    158'4'
    159'9'
    となる。
    また、先頭に'-'があり負の数を表している場合にも正しく対応できるように拡張せよ。

    数字'0'の文字コードは48、数字'1'の文字コードは49となっており、以降'9'まで順に1ずつ増える。したがって、数字の文字コードから48を引くと、その数字が表す数値を得ることができる。

  4. 逆ポーランド記法と計算実行
    逆ポーランド記法は計算式の記述方法の1つであり、2つの被演算データの後ろに演算子を置く演算子後置記法である。
    我々が日常使用している演算子内置記法では、2つの被演算データの間に演算子を置く。例えば、演算子内置記法によって記した式
    	6 * 15 + 3
    
    を逆ポーランド記法によって記すと
    	6 15 * 3 +
    
    となる。この計算の手順は以下の通りである。
    逆ポーランド記法による式は、被演算データと演算子を左から順に調べる。
    まず、被演算データ(演算子以外)はスタックの頂上に格納する。上の式では、6がスタックに格納され、次いで15がその上に格納される。
    演算子'*'は、スタックの頂上にある2つのデータをスタックから取り出し、その積を求めてスタックの頂上に格納する。よってこの時点で、スタックには90だけが格納されている。
    次の3は被演算データであり、スタックの頂上に格納する。
    演算子'+'は、スタックの頂上にある2つのデータをスタックから取り出し、その和を求めてスタックの頂上に格納する。よってこの時点で、スタックには最終計算結果である93が格納されている。

    また、演算子内置記法によって記した式

    	6 * 15 + 3 * 7
    
    の四則演算の優先順を考慮して逆ポーランド記法によって記すと
    	6 15 * 3 7 * +
    
    となる。この式の実行過程とスタックの様子を以下に示す。
    式の評価  1  2  3  4  5  6 
    6 15 * 3 7 * +





    15 * 3 7 * + 6




    * 3 7 * + 615



    3 7 * + 90




    7 * + 903



    * + 9037


    + 9021




    111




    逆ポーランド記法による計算式を評価して計算結果を求めるプログラムを作成せよ。
    計算式は、文字データによって記されるものとする。すなわち、被演算データの5は'5'の1文字、10は'1'と'0'の2文字によって表され、演算子は、加算、減算、乗算、除算をそれぞれ文字'+', '-', '*', '/'によって表す。被演算データや演算子の間には空白' 'を置いて、被演算同士の区切りを表す。式の最後には、数値0を置く。
    例えば、式

    	6 15 * 3 +
    
    は、アセンブリ言語プログラム中では以下の11バイトによって表される。
    	db '6'
    	db ' '
    	db '1'
    	db '5'
    	db ' '
    	db '*'
    	db ' '
    	db '3'
    	db ' '
    	db '+'
    	db 0
    
    逆ポーランド記法による計算式がアドレスA0(10進数の160)以降に格納されているとし、計算式にしたがって計算をした結果の上位8ビットをアドレスBE(10進数の190)、下位8ビットをアドレスBF(10進数の191)に格納せよ。 (計算結果を文字列に直す必要はない)

  5. タイマ
    プロセッサがクロック周波数50 MHzで動作するとき、正確に0.25秒ごとにカウントアップするカウンタプログラムを作成せよ。 プロセッサが搭載された基板には2桁の7セグメントLEDがある。 メモリアドレスD0(10進数の208)の内容を上位4ビット、下位4ビットに分けて2桁の16進数とみなしたとき、この2桁の16進数の値がLEDに表示される。 ここでは、LED表示が00→01→02→...→09→10→11→...→99→00となるようにカウンタの動作を設計すること。