Macht das Sinn?
-
Hallo,
macht dieser Code sinn?test eax, eax jge Irgendwo
Beim JGI muss dass SF-Flag == OF-Flag sein. SF ist nach test immer 0, und OF wird nur gesetzt, wenn das Vorzeichen von AND eax, eax von eax unterschiedlich ist, was natürlich nicht der Fall ist?!
Ich bin verwirrt.
-
lolla schrieb:
SF ist nach test immer 0
oh?
-
probiers mal so
xor edx, edx ;edx = 0/null cmp eax,edx ;is 0 ? jnz jumpthere ;jump if no zero
Edit:
Vlt hilft das:jnz = jump not zero
je = jump eqal
jz = jump zerogibt noch weitere
-
lolla schrieb:
Hallo,
macht dieser Code sinn?test eax, eax jge Irgendwo
Beim JGI muss dass SF-Flag == OF-Flag sein. SF ist nach test immer 0, und OF wird nur gesetzt, wenn das Vorzeichen von AND eax, eax von eax unterschiedlich ist, was natürlich nicht der Fall ist?!
Ich bin verwirrt.
SF ist das Vorzeichen des Ergebnisses, die zugrunde liegende Operation bei test ist eine und-Verknüpfung (und das Ergebnis dieser Opeartion der Inhalt von eax selbst) - folglich ist SF genau dann gesetzt, wenn eax negativ ist, und nur dann ist SF != OF (da OF nach dieser Operation nie gesetzt sein wird). mithin wird der Sprung bei nichtnegativem eax ausgeführt (jump if greater or equal). Statt test eax, eax könntest du auch schreiben: and eax, eax oder or eax,eax oder cmp eax,0 oder sub eax,0