Wie können Sie in der x86-Assembly das Null-Flag (ZF) setzen, ohne eine Vergleichsoperation auszuführen?

8

Ich habe ein kurzes Stück (x86) Assembly, das ich versuche herauszufinden, was es tut.

%Vor%

Es sieht wie seine Schleife durch, bis die "JNE" zu falsch auswertet, d. h. das Null-Flag = 0. (möglicherweise setzt es die Zahlen 1, 2, 3 ... in den Stapel?)

Von meiner kurzen Untersuchung in Assembly (ich bin neu dazu) es Naht Sie setzen das Null-Flag, indem Sie eine Vergleichsoperation (CMP), aber ich sehe keine Vergleichsoperation.

Also, unter welchen Bedingungen wird es aus dieser Schleife ausbrechen?

    
Robert 06.12.2011, 16:48
quelle

4 Antworten

11

inc setzt ZF, wenn der Wert von cl nach dem Inkrement Null ist. Ihre Schleife macht das:

%Vor%

Die Schleife wird beendet, wenn cl von 255 inkrementiert wird und auf 0 übergeht, wobei ZF gesetzt wird.

    
Stephen Canon 06.12.2011, 17:01
quelle
8

Arithmetische Anweisungen wie add, sub, inc, dec, sar, sal , aber auch bitweise Operationen wie test, shl, shr, or, and, xor, neg usw. ändern das ZF.

    
newgre 06.12.2011 18:39
quelle
2

mathematische Operationen wie inc und dec können auch das Null-Flag setzen.

    
John Knoeller 06.12.2011 16:50
quelle
1

Oder, für den Anfang, speichern [drücken] Sie die Flags auf Stapel, [Pop] Holen Sie den Stapel im Register, verwenden Sie arithmetische oder Operator mit gewünschten Bit auf dem Register, drücken Sie das Register und die Flagge.

so etwas.

%Vor%     
A-Cube 25.02.2012 20:38
quelle

Tags und Links