2017-02-28 17 views
2

ゼロフラグの設定に問題があります。私はオンラインでいくつかの調査をしましたが、それはもっと私を混乱させるようになってきました。私が間違っている場合は私を修正しますが、MOV、ADD、SUB、INC、DECを使用してフラグを設定しクリアすることができます。だから、この作品のような何か?フラグの設定と解除

.data 
Num1 = 18 
Num2 = 18 

.code 
main PROC 
    sub num2, num1 
main ENDP 
END main 

これは、たとえばZFを設定しますか?それが事実なら、どうすればそれをクリアすることができますか?

+1

結果がゼロでない数学演算を行いますか? –

答えて

1

このコードは、理由スペルケースチェックの、ZEROフラグを設定しません!:
Num1 = num1Num2 = num2が。

Num1 = 18Num2 = 18はそれぞれ定数割り当てであり、データ値を定義していないため、.dataの値は定義していません。

したがって、OpCode(CMP)で定数を定数と比較しようとしていますが、これは無効であり、アセンブラの構文チェックをパスしません。私が間違っている場合

1

は私を修正しますが、それはあなたがMOVを使用することができます私の理解だ、ADD、SUB、INC、およびDECとセットとクリアフラグ?

それはaddsubincdecは/ ZFなど、明確ないくつかのフラグを設定するというのは本当です。一方、
movは決してフラグを変更しません!

sub num2, num1 

これは非常に不可能命令です。

sub命令の必須の2つのオペランドは、即値(単なる数値)でも両方の変数(メモリ位置)でも構いません。あなたがの結果からフラグを確認することができ、あなたの例では

mov ax, Num2 
sub ax, Num1 

両方の値が同じであるため、以下、ZFが設定されます。

関連する問題