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.


  • Mod

    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 zero

    gibt noch weitere


  • Mod

    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


Anmelden zum Antworten