GMC-4 の演算は2進加算、減算、ビット反転(NOT)、右ビットシフトしかない。したがって、ビットマスクなどのビット演算がやりにくい。それでも、無理にビット演算をやらせてみた。
例1 データニブルのビット1の値を取り出す 00 0 (KA) #00~06まではキー入力のルーチン。入力された値はAレジスタに存在。 01 F 0 0 (JUMP 0 0) 04 1 (AO) 05 E 9 (CAL SHTS) 07 A F (TIY F) #メモリ5F番地をYレジスタで指定する。 09 4 (AM) Aレジスタの値を5F番地のメモリにコピー。 0A E 6 (CAL SIFT) #Aレジスタの値を右シフト 0C A E (TIY E) #メモリ5E番地をYレジスタで指定。 0E 4 (AM) #Aレジスタの値を5E番地にコピー。 0F 6 (M+) #A = A+<5E>。つまりAレジスタの値を2倍にする。 10 A F (TIY F) #メモリ5F番地をYレジスタで指定する。 12 7 (M-) #A = <5F> - A 13 1 (AO) #Aレジスタの値を表示 14 F 0 0 (JUMP 0 0) #ループの先頭へ戻る。 例2 データニブルのビット4の値を取り出す。 00 0 (KA) #00~06まではキー入力のルーチン。入力された値はAレジスタに存在。 01 F 0 0 (JUMP 0 0) 04 1 (AO) 05 E 9 (CAL SHTS) 07 A F (TIY F) #メモリ5F番地をYレジスタで指定する。 09 4 (AM) Aレジスタの値を5F番地のメモリにコピー。 0A 6 (M+) #A = A+<5F>。つまりAレジスタの値を2倍にする。 0B 3 3 (CY CY) #AレジスタとYレジスタの値の交換を2回するので何もしない。実行フラグを1にするため。 0D E 6 (CALL SIFT) #Aレジスタを右シフト。Aレジスタのビット4が0になる。 0F 7 (M-) #A = <5F> - A 10 1 (AO) #Aレジスタの値を表示 11 F 0 0 (JUMP 0 0) #ループの先頭へ戻る。 例3 データニブルのビット1の値のチェック 00 0 (KA) #00~06まではキー入力のルーチン。入力された値はAレジスタに存在。 01 F 0 0 (JUMP 0 0) 04 1 (AO) 05 E 9 (CAL SHTS) 07 E 6 (CAL SIFT) #Aレジスタの値を右シフト 09 E 9 (CAL SHTS) #ビット1が0の時ベルを鳴らす。 0A F 0 0 (JUMP 0 0) 例4 データニブルのビット4の値のチェック 00 0 (KA) #00~06まではキー入力のルーチン。入力された値はAレジスタに存在。 01 F 0 0 (JUMP 0 0) 04 1 (AO) 05 E 9 (CAL SHTS) 07 6 8 (M+ 8) #A = A+8 09 E 9 (CAL SHTS) #ビット4が1の時ベルを鳴らす。 0A F 0 0 (JUMP 0 0) 注意!! GMC-4 のCAL命令(E)は実行フラグが1のときだけ実行される。また、右シフトではビット1の値が0の時、実効ビットが1になる。GMCの仕様はやはりちょっと変な気がする。しかし、命令数が少ないのですぐに使えるようになる。GMC-4のようなマイコンに見せかけたエミュレータは便利だ。教育用の最少インストラクションで構成されたマイコンを同じような感じで作れば有用なような気がする。
by tnomura9
| 2009-07-15 13:23
| 話のネタ
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||