Der Unterschied zwischen cmpl und cmp

8

Ich versuche die Montage zu verstehen, um ein Puzzle zu lösen. Ich habe jedoch die folgenden Anweisungen gefunden:

%Vor%

Was ich denke, ist es: Der Wert von 0x14 (% rsp) ist -7380. Nach meinem Verständnis vergleicht cmpl unsigned. Auch der Sprung wird durchgeführt. So kann es sein, dass (unsigned) -7380 & gt; 7 (unsigniert) 7380 & gt; 7 - & gt; springe

Ich will eigentlich nicht, dass es springt. Aber ist das die richtige Erklärung oder nicht? Spreche ich Argumente?

Auch wenn Sie einen Rat haben, wie Sie diesen Sprung manipulieren können!

    
Sarah cartenz 09.06.2014, 10:43
quelle

2 Antworten

14
  

Nach meinem Verständnis vergleicht cmpl unsigned.

Es tut beides in gewisser Weise.

Der Unterschied zwischen signed und unsigned ist hier die Verwendung der Sprunganweisungen.

Für > gibt es ja für unsigned und jg für signed (springe wenn über und springe wenn größer).

Für < gibt es jb für unsigned und jl für signed (springe wenn unten und springe wenn weniger).

Um genau zu sein, hier ist die Bedeutung von mehreren Sprungbefehlen:

  

Für vorzeichenlose Vergleiche:

%Vor%      

Für vorzeichenbehaftete Vergleiche:

%Vor%
    
glglgl 09.06.2014, 11:00
quelle
1

Ich glaube nicht, dass x86 tatsächlich eine Anweisung namens CMPL hat. Es ist wahrscheinlich Teil Ihrer Assembler-Syntax, Hinweise zu Operanden oder etwas anderem zu geben (wie JZ und JE sind gleich).

Aus dem Intel-Handbuch, was es macht:

  

Vergleicht den ersten Quelloperanden mit dem zweiten Quelloperanden und setzt den   Statusflags im EFLAGS-Register entsprechend den Ergebnissen. Der Vergleich ist   durchgeführt, indem der zweite Operand vom ersten Operanden subtrahiert und dann gesetzt wird   die Statusflags in der gleichen Weise wie der SUB-Befehl. Wenn eine sofortige   Der Wert wird als Operand verwendet, er wird vorzeichenerweitert auf die Länge des ersten Operanden.

Sign-ness ist implizit gegeben, wegen der Zweierkomplement-Repräsentation von Zahlen.

Wie manipuliere ich den Sprung? Wenn Sie sicher sind, dass der Sprung das genaue Gegenteil von dem ist, was Sie tun, müssen Sie nur JA in JBE ändern.

    
typ1232 09.06.2014 11:13
quelle

Tags und Links