2013-03-08 6 views
5

Sto tracciando un codice x86 per un compito, e mi chiedevo cosa fa esattamente "cmpl" e come prevedere se il "jne" sarà soddisfatto.x86 cmpl e jne

80484bf: 83 7d f0 07    cmpl $0x7,-0x10(%ebp) 
80484c3: 75 16     jne 80484db 

Inoltre, questo utilizza la sintassi Intel.

Grazie.

+8

BTW: Questa è la sintassi AT & T. –

risposta

7

cMpl -0x10 (% ebp) sottrae da $ 0x7 e modifica bandiere: AF CF DI PF SF ZF.

  1. se -0x10 (% ebp), che è uno dei tuoi argomenti della funzione, è uguale a 0x7 poi la bandiera ZF è impostato.
  2. jne 80484db significa che se i due numeri confrontati sono diversi (ZF = 0), passare alla 80484db

Per summerize, il codice è equivalente a:

compare A to B 
jump into 80484db if they are different. 
+0

Grazie mille. Quindi ZF è impostato su 0 se -0x10 (% ebp) meno $ 0x7 non è uguale a zero? O è il contrario? – Richarizard

+1

Siete i benvenuti. Sì, ZF è impostato su 0 se -0x10 (% ebp) meno $ 0x7 non equivale –