これまで行った算術演算の加算(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へ設定値へ変更してみましょう。
←わからない場合は、クリック