In x86 assembly, wie kann man das einstellen das zero-flag (ZF), ohne dabei ein compare-operation?
Habe ich ein kurzes Stück (x86) Versammlung, dass ich versuche herauszufinden, was es tut.
...
6: 81 ec 00 01 00 00 sub $0x100, %esp
c: 31 c9 xor %ecx , %ecx
e: 88 0c 0c mov %cl , (%esp, %ecx, 1)
11: fe c1 inc %cl
13: 75 f9 jne 0xe
....
Es sieht aus wie seine looping-obwohl bis die "JNE" zu false ausgewertet wird, D. H. das zero-flag = 0. (möglicherweise setzen Sie die zahlen 1, 2, 3 ... in den stack??)
Aus meiner kurzen Untersuchung in der Montage (ich bin neu in diesem) es Naht legen Sie die zero-flag durch eine Vergleichsoperation (CMP), aber ich sehe nicht ein compare-operation.
Also, unter welchen Bedingungen wird es diese Schleife?
Du musst angemeldet sein, um einen Kommentar abzugeben.
inc
setzt ZF, wenn der Wert dercl
nachdem das Inkrement null ist. Ihre Schleife ist, dies zu tun:Die Schleife endet, wenn
cl
erhöht von 255 und wickelt sich um auf 0, Einstellung der ZF.mov %cl, (%esp, %ecx, 1)
. In Englisch würde ich sagen: "bewegen Sie den unteren 8 bits von CX (CL) in den RAM-Speicher an der Adresse ESP+ECX", die Sinn macht, aber was ist das1
operand? Ist das wirklicharray[cl + 1] = cl
(stack overflow?) oder vielleichtarray[cl] = cl + 1
? Wahrscheinlich bin ich etwas fehlt nuance, x86 assembly, aber ich bin neugierig.mov [esp+ecx], cl
in Intel-syntax.[esp+1*ecx]
(mit speziell keine Verschiebung, sondern als disp8=0 oder disp32=0), obwohl es ist nicht wirklich zweideutig in diesem Fall, daesp
kann nicht verwendet werden, als ein index-register.Arithmetische Anweisungen wie
add, sub, inc, dec, sar, sal
, aber auch bitweise Operationen wietest, shl, shr, or, and, xor, neg
und so weiter, ändern der ZF.mathematische Operationen wie z.B. inc und dec können auch festlegen, dass das zero-flag.
Oder, für den Anfang, speichern [push] die flags auf den stack, [pop] Holen Sie sich die Stapel in register, verwenden Sie arithmatic oder Betreiber mit den gewünschten bit in dem register, drücken Sie die register und pop auf die fahne.
etwas wie dieses.