News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

cmp

Started by ninjarider, September 13, 2005, 02:05:42 PM

Previous topic - Next topic

ninjarider

im not sure if my memory serves me right but

cmp eax, edx
jmp condition1
jmp condition2

rest of code

if eax equals edx it would jump to the label condition1
if eax does not equal edx it would jump the label condition2

are my thoughts correct or do i have to use je condition1 and jne condition2.

arafel

jmp instruction is not conditional. you should use je/jne instead.

code   mnemonic description
77 cb  JA rel8  Jump short if above (CF=0 and ZF=0)
73 cb  JAE rel8  Jump short if above or equal (CF=0)
72 cb  JB rel8  Jump short if below (CF=1)
76 cb  JBE rel8  Jump short if below or equal (CF=1 or ZF=1)
72 cb  JC rel8  Jump short if carry (CF=1)
E3 cb  JCXZ rel8  Jump short if CX register is 0
E3 cb  JECXZ rel8  Jump short if ECX register is 0
74 cb  JE rel8  Jump short if equal (ZF=1)
7F cb  JG rel8  Jump short if greater (ZF=0 and SF=OF)
7D cb  JGE rel8  Jump short if greater or equal (SF=OF)
7C cb  JL rel8  Jump short if less (SF<>OF)
7E cb JLE rel8  Jump short if less or equal (ZF=1 or SF<>OF)
76 cb JNA rel8  Jump short if not above (CF=1 or ZF=1)
72 cb  JNAE rel8  Jump short if not above or equal (CF=1)
73 cb JNB rel8  Jump short if not below (CF=0)
77 cb  JNBE rel8  Jump short if not below or equal (CF=0 and ZF=0)
73 cb  JNC rel8  Jump short if not carry (CF=0)
75 cb  JNE rel8  Jump short if not equal (ZF=0)
7E cb  JNG rel8  Jump short if not greater (ZF=1 or SF<>OF)
7C cb  JNGE rel8  Jump short if not greater or equal (SF<>OF)
7D cb  JNL rel8 Jump short if not less (SF=OF)
7F cb  JNLE rel8  Jump short if not less or equal (ZF=0 and SF=OF)
71 cb  JNO rel8  Jump short if not overflow (OF=0)
7B cb  JNP rel8  Jump short if not parity (PF=0)
79 cb  JNS rel8  Jump short if not sign (SF=0)
75 cb  JNZ rel8  Jump short if not zero (ZF=0)
70 cb  JO rel8  Jump short if overflow (OF=1)
7A cb  JP rel8  Jump short if parity (PF=1)
7A cb  JPE rel8  Jump short if parity even (PF=1)
7B cb  JPO rel8  Jump short if parity odd (PF=0)
78 cb  JS rel8  Jump short if sign (SF=1)
74 cb  JZ rel8  Jump short if zero (ZF = 1)
0F 87 cw/cd  JA rel16/32  Jump near if above (CF=0 and ZF=0)
0F 83 cw/cd JAE rel16/32  Jump near if above or equal (CF=0)
0F 82 cw/cd  JB rel16/32  Jump near if below (CF=1)
0F 86 cw/cd  JBE rel16/32  Jump near if below or equal (CF=1 or ZF=1)
0F 82 cw/cd  JC rel16/32  Jump near if carry (CF=1)
0F 84 cw/cd  JE rel16/32  Jump near if equal (ZF=1)
0F 84 cw/cd  JZ rel16/32  Jump near if 0 (ZF=1)
0F 8F cw/cd  JG rel16/32  Jump near if greater (ZF=0 and SF=OF)
0F 8D cw/cd  JGE rel16/32  Jump near if greater or equal (SF=OF)
0F 8C cw/cd  JL rel16/32  Jump near if less (SF<>OF)
0F 8E cw/cd  JLE rel16/32  Jump near if less or equal (ZF=1 or SF<>OF)
0F 86 cw/cd  JNA rel16/32  Jump near if not above (CF=1 or ZF=1)
0F 82 cw/cd  JNAE rel16/32 Jump near if not above or equal (CF=1)
0F 83 cw/cd  JNB rel16/32  Jump near if not below (CF=0)
0F 87 cw/cd  JNBE rel16/32  Jump near if not below or equal (CF=0 and ZF=0)
0F 83 cw/cd  JNC rel16/32  Jump near if not carry (CF=0)
0F 85 cw/cd  JNE rel16/32  Jump near if not equal (ZF=0)
0F 8E cw/cd  JNG rel16/32  Jump near if not greater (ZF=1 or SF<>OF)
0F 8C cw/cd  JNGE rel16/32  Jump near if not greater or equal (SF<>OF)
0F 8D cw/cd  JNL rel16/32  Jump near if not less (SF=OF)
0F 8F cw/cd JNLE rel16/32  Jump near if not less or equal (ZF=0 and SF=OF)
0F 81 cw/cd  JNO rel16/32  Jump near if not overflow (OF=0)
0F 8B cw/cd  JNP rel16/32  Jump near if not parity (PF=0)
0F 89 cw/cd  JNS rel16/32  Jump near if not sign (SF=0)
0F 85 cw/cd  JNZ rel16/32  Jump near if not zero (ZF=0)
0F 80 cw/cd  JO rel16/32  Jump near if overflow (OF=1)
0F 8A cw/cd  JP rel16/32  Jump near if parity (PF=1)
0F 8A cw/cd  JPE rel16/32  Jump near if parity even (PF=1)
0F 8B cw/cd  JPO rel16/32  Jump near if parity odd (PF=0)
0F 88 cw/cd  JS rel16/32  Jump near if sign (SF=1)
0F 84 cw/cd  JZ rel16/32  Jump near if 0 (ZF=1)

QvasiModo

This is a possible layout:

cmp eax, edx
je condition1

condition2:

; your code goes here...

jmp end_condition

condition1:

; your code goes here...

end_condition:


Note this is basically the same as:


if( a != d ) {
    /* condition 2 */
} else {
    /* condition 1 */
}


To test for different conditions, use one of the conditional jumps arafel posted above.

ninjarider

i dont know y i got confused. maybe its because its been so long since i've had to use a cmp statement in asm. bu thats for clearing it up. program actually works now. even thou it wont always display the right data