比較命令


無意味な引き算

前回のジャンプ命令によって、かなりプログラムの可能性が広がったと思います
しかし、条件ジャンプのたびに演算をしなければいけないというのは面倒です
そのたびに、演算結果から元のデータを守らなければいけませんね

そこで、条件判断のための比較命令CMPがあります
一般的に、条件ジャンプにはこのCMP命令を用いてジャンプします
条件ジャンプ命令表に書いてあった「より大きい」などは、この命令での結果を表しています

CMPには、第一オペランドに比較対象のレジスタまたはメモリを指定し
第二オペランドに比較する数を指定します

実際には、このCMP命令はSUB命令と同じ演算を行います
しかし、その結果は破棄されフラグだけがセットされるのです
-A 100
15F2:0100 CMP AX , 10
15F2:0103 JA 120
15F2:0105 JB 130
15F2:0107 JE 140
15F2:0109
-A 120
15F2:0120 MOV DX , A
15F2:0123 JMP 109
15F2:0125
-A 130
15F2:0130 MOV DX , B
15F2:0133 JMP 109
15F2:0135
-A 140
15F2:0140 MOV DX , C
15F2:0143 JMP 109
15F2:0145
このプログラムでは、AXレジスタと即値 0010 を比較します
その結果がより大きいか、より小さいか、同じかでDXレジスタへロードする値が決定されます
//Pentium Pro プロセッサでは、条件転送という命令も実装しています

また、条件ジャンプの比較命令で使われる数が符号無しの場合は JA , JB などを使い
負数を扱う条件ジャンプの場合は JL , JG 系列の命令を使います
これは、条件判断でSFとOFを使うか使わないかの違いです



前のページへ戻る次のページへ