ITブログアルケーナム管理人のニッシーです。今回は、CASL2を使った「累乗」について見てみたいと思います。ENDシミュレータにそのままコピー&ペーストで使えます。解説このループを用いた累乗は、単純に指数で示される値分掛け算を繰り返すことで実現しています。掛け算自体は、「ループ処理を用いた乗算」を用いています。アセンブリ言語CASL2での乗算のやり方プログラム上で、赤字で示される8~11行のコードは、指数が0の場合(n0)に基数(底)がどんな値であれ必ず1になるので、その処理を行っています。それでは、机上デバッグもどきでデータの流れを見てみます。以下のデバッグは長いですが、興味のある方は見てみてください。シミュレータをお持ちの方はそちらで動作を確認してみてください。フラグレジスタに変化はありません。0ZFが0なので、JNZ命令で指定されたラベル「NX」に移動し12行を処理します。MULCALL命令で、「MUL」サブルーチンを呼び出し、20行を処理します。0GR0の値が9になるため、フラグレジスタに変化はありません。0GR3の値が4になるため、フラグレジスタに変化はありません。0ZFが0、SFが0なので、JPL命令で指定されたラベル「LP2」に移動し21行を処理します。0GR0の値が13になるため、フラグレジスタに変化はありません。0GR3の値が3になるため、フラグレジスタに変化はありません。なり、JPL命令で指定されたラベル「LP2」に移動し21行を処理します。0GR0の値が17になるため、フラグレジスタに変化はありません。0GR3の値が2になるため、フラグレジスタに変化はありません。0ZFが0、SFが0なので、JPL命令で指定されたラベル「LP2」に移動し21行を処理します。0GR0の値が21になるため、フラグレジスタに変化はありません。0GR3の値が1になるため、フラグレジスタに変化はありません。0ZFが0、SFが0なので、JPL命令で指定されたラベル「LP2」に移動し21行を処理します。0GR0の値が25になるため、フラグレジスタに変化はありません。0GR3の値が0になるため、フラグレジスタが変化します。0ZFが1、SFが0なので、JPL命令で指定されたラベル「LP2」に移動せず24行を処理します。RETRET命令で、「MUL」サブルーチンを抜けて、呼び出し元の「POW」サブルーチンに戻り16行を処理します。0GR1の値が0になるため、フラグレジスタが変化します。0ZFが1なので、JPL命令で指定されたラベル「LP1」に移動せず18行を処理します。RETRET命令で、「POW」サブルーチンを抜けて、呼び出し元の「MAIN」サブルーチンに戻り処理を終了します。以上で処理が終了し、GR0が答えです。25なので、正しい答えになっていますね。累乗とは?累乗とは、何回に渡って同じ数字を掛け合わせたのかを表すための表記です。以下のような表現を用います。2...と長い掛け算の式を書かずに済み、整然と表記できるためです。本体の大きい方の数字を「底」、右上の小さい数字を「指数」と呼びます。指数がゼロの場合、底がどんな数値であろうとも無条件で1になります。この限りではありません。0の両方の場合があるためです。して扱うことにしています。この辺の定義については偉い数学者の方々に任せておきましょう。(笑)アホの俺には分からん(^^);最後に累乗の計算は奥が深いですね~。0の0乗って本当に謎ですよね。0の0乗で、ググると賢い方々が色々と解説してくださっているので、興味のある方は是非調べてみてください。ITブログアルケーナム管理人のニッシーです。