論理演算と算術演算

これまで行った算術演算の加算(ADDA)、減算(SUBA)、比較(CPA)以外に、
論理演算の加算(ADDL)、減算(SUBL)、比較(CPL)が存在します。
算術演算時はオペランドが符号ビットを取り扱った範囲の数値(-32768〜32767)として取り扱うのに対し、
論理演算時はオペランドが符号ビットを使わない(0〜65535)の範囲として取り扱います。
しかし論理演算だからといってSF(Sign Flag)が設定されなくなる分けでありません。 最上ビットが1になるとSFが1になります。
ADDAとADDL、 そしてSUBAとSUBLの違いはOF(overflow flag)です。

なお、CPL r1, r2では、0〜65535の範囲のデータとして比較し、 r1が小さい時にSFが1になります。
このサイトのシミュレータで、2009-7-31にr1の最上位bitが1で、 r2が最上位bitが0の時、SFが1になってしまうバグが発見されました。
現在は修正済みです。(発見者に感謝いたします。)


次の例の場合、ADDLでOFはセットされませんが、ADDAでOFはセットされています。確認しましょう。

問題 ADDL GR0,GR1 の実行で、ZF が1になるGR1へ設定値へ変更してみましょう。 ←わからない場合は、クリック