2013-03-08 5 views
5

Ich verfolge einige x86-Code für eine Aufgabe, und ich fragte mich, was genau "Cmpl" tut und wie man vorhersagen, ob oder nicht die "jne" erfüllt wird.x86 cmpl und jne

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

Auch dies verwendet Intel-Syntax.

Danke.

+8

BTW: Dies ist AT & T-Syntax. –

Antwort

7

cmpl subtrahiert -0x10 (% EBP) von $ 0x7 und modifiziert Fahnen: AF CF PF SF ZF.

  1. wenn -0x10 (% EBP), die eine Ihrer Funktionsargumente ist, entspricht 0x7 dann die Flagge ZF gesetzt.
  2. JNE 80484db bedeutet, dass, wenn die beiden verglichenen Zahlen unterschiedlich (ZF = 0) sind, um summerize 80484db

zu springen, ist der Code äquivalent zu:

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

Vielen Dank. Also wird ZF auf 0 gesetzt, wenn -0x10 (% ebp) minus $ 0x7 nicht gleich Null ist? Oder ist es umgekehrt? – Richarizard

+1

Gern geschehen. Ja, ZF wird auf 0 gesetzt, wenn -0x10 (% ebp) minus $ 0x7 nicht gleich ist –