メモリーの50H−57Hにある8ワード[むしろニブルと言うべきか](1ワード=4ビット)ビッグエンディアン10進数をIX、58H−5FHにあるものをIYとし、キーボードから入力する4ビット整数をIAとするとき、IX=IA*IX+IYを計算し、さらにIY=0とします。
計算結果は、8セグLEDに上の桁から順に点灯させ、その表示を繰り返します。一通り表示し終えたタイミングでキーボードから入力すると、前回の計算結果を引き継いで計算を繰り返します。
IX=1、IY=0と初期値を与えてから、キーボードからの入力を1,2,3,4・・と与えてゆくことで、階乗を十進表示で求められます。
2,5,10を飛ばすことで、末尾の二つの00を消去できるので、10桁の13!まで求められます。
| 1! | 1 |
| 2! | 2 |
| 3! | 6 |
| 4! | 24 |
| 5! | 120 |
| 6! | 720 |
| 7! | 5040 |
| 8! | 40320 |
| 9! | 362880 |
| 10! | 3628800 |
| 11! | 39916800 |
| 12! | 479001600 |
| 13! | 6227020800 |
ソースコード
プログラムは大きく3つの部分に分けられます。掛け算を行う演算部分03H-19H,結果のコピーとゼロクリアを行う部分1CH-31H,結果をLEDに表示しキーボードからの入力を受け付けるI/O部分34H-4DHです。
はじめは、掛け算のルーチンを作っていたのですが、思い直して色々サブルーチンを組み合わせたので構成がイマイチです。I/O部分の出来がいまいちです。結果はメモリーを直接読むことにして、I/Oを簡略化し、階乗専用のプログラムにすべきだったかもしれません。
| 番地 | 機械語 | ラベル | ニーモニック | コメント | |
| 00 | F 3 4 | JUMP (LED) | |||
| 03 | E 4 | init: | CAL CMPL | mult loop counter initialization | |
| 05 | 9 1 | mult_loop: | AIA 1 | mult loop counter increment | |
| 07 | F 1 C | JUMP (sum_exit) | |||
| 0A | 2 | CH | |||
| 0B | A 7 | TIY 7 | sum loop counter init | ||
| 0D | 5 | sum_loop: | MA | ||
| 0E | B 8 | AIY 8 | |||
| 10 | 1 | A O | dummy: force flag = 1 | ||
| 11 | E F | CAL DEM+ | sum loop counter increment | ||
| 13 | B 8 | AIY 8 | |||
| 15 | F 0 D | JUMP (sum_loop) | |||
| 18 | 2 | CH | |||
| 19 | F 0 5 | JUMP (mult_loop) | |||
| 1C | A 8 | sum_exit: | TIY 8 | ||
| 1E | 2 | CH | |||
| 1F | A 8 | TIY 8 | |||
| 21 | 8 0 | TIA 0 | |||
| 23 | 2 | copy_zero_loop: | CH | ||
| 24 | 5 | MA | copy | ||
| 25 | B 8 | AIY 8 | |||
| 27 | 4 | AM | |||
| 28 | B 9 | AIY 9 | end copy | ||
| 2A | 2 | CH | |||
| 2B | 4 | AM | zero | ||
| 2C | B 1 | AIY 1 | end zereo | ||
| 2E | F 3 4 | JUMP (LED) | |||
| 31 | F 2 3 | JUMP (copy_zero_loop) | |||
| 34 | A 0 | LED: | TIY 0 | ||
| 36 | 5 | LED_loop: | MA | ||
| 37 | 1 | A O | LED on | ||
| 38 | 8 7 | TIA 7 | wait 0.8sec | ||
| 3A | E C | CAL TIMER | |||
| 3C | E 0 | CAL RSTO | LED off | ||
| 3E | E C | CAL TIMER | |||
| 40 | B 1 | AIY 1 | |||
| 42 | D 8 | CIY 8 | |||
| 44 | F 3 6 | JUMP (LED_loop) | |||
| 47 | E C | CAL TIMER | |||
| 49 | 0 | KA | keyboard input | ||
| 4A | F 3 4 | JUMP (LED) | repeat LED display | ||
| 4D | F 0 3 | JUMP (init) | begin calculation |
エミュレータ コードファイル
FX-マイコン シミュレータ
このソフトを使わせていただきました。