2016/11/12 13:00- compiler seminer [前回] 急ぎすぎて、失速(墜落)し感がある。 CPU の設計と実装を進めながら、処理系も少しずつ、実現する 最終ゴールは、とうぜん、その先だが、今回は、 副ゴールを下げて、すこしずつ進む事にする [今回] # ラベルは後回しにして、 「動く Assembler を作る」を目標にする # 前回のコード、とりあえず、全面破棄 !! 将来命令がふえた時に、そのふえた部分のコードに !! 対応する、プログラム自動生成を配慮する !! 色々な CPU 命令がふえても、プログラムに追加する !! 部分は共通な事が多い [Ver 0] 命令をコード化するだけ 命令も CPU1 しか考えない エラー処理 エラーが起きた時に、どこで何がおきたかをしりたい エラーメッセージの工夫(行番号) エラー回復 エラーがおきても、そこでは停止せず、 エラーメッセージを出力して、 残り部分を処理する機能 => エラーの個数だけ、コンパイルするのは無駄 一回のコンパイルで、できるだけ多くのエラーを見付けたい http://www7b.biglobe.ne.jp/~robe/pf/pf012.html#44 http://www.bookshelf.jp/texi/bison/bison-ja_9.html コメント処理 コメントは基本 .l で、読み飛ばす C 言語風に「/* 〜 */」でコメント 16 進数で処理 123 -> 10 進 123 0x123 -> 16 進 123 = 256 + 32 + 3 = 291 http://www.asahi-net.or.jp/~wg5k-ickw/html/online/flex-2.5.4/flex_11.html [課題 1] キーボードから二つの数字を入力し、 それぞれを一桁の数と考え、 その数の和を出力する ただし、結果は、一桁と考えてよい [課題 2] [課題 1] で、結果が二桁になる場合も考える # 二桁の数を出力するにはどうすればよいか ? [課題 3] [1000] と [1001] に一桁の数値をいれ、その 積を[1002] 番地にいれ、出力する [課題 4] [1000] に二桁の数、[1001] に一桁の数をいれ [1000] を[1001] で割った時の商を[1002] に いれ、その結果を出力する [課題 5] [1000] に二桁の数、[1001] に一桁の数をいれ [1000] を[1001] で割った時の余りを[1002] に いれ、その結果を出力する [課題 6] [1000] に、三桁の数(例えば 123) を入れ、 その内容を画面に出力するプログラムを考える。 なお、三桁を満さない場合(12)は、先頭に 0 を補い 三桁にする (012 とする) [課題 7] [1000] と [1001] にそれぞれ、三桁の 数値(例えば、123 と 456)を保存し、その和を、 [1001] に結果をいれ、その結果を画面に出力する 結果は三桁と考えてよい [課題 8] acc に入っている正の数を、十進数で、出力するプログラム 例: LD A, 123 /* ここにプログラム */ LD A, 10 OUT A HALT とすると、画面に「123」と表示されるようにする。