Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Assembler in Delphi! Speichersack?

  Alt 30. Sep 2003, 15:28
Delphi-Quellcode:
// EAX = Self, EDX = aCol, ECX = @Result.TRect
asm
    TEST EDX,EDX
    JNS @@1
    XOR EAX,EAX
    MOV [ECX].TRect.Left,EAX
    MOV [ECX].TRect.Right,EAX
    MOV [ECX].TRect.Top,EAX
    MOV [ECX].TRect.Bottom,EAX
    RET
@@1:
    MOV EAX,EDX
    SHR EDX,3 // aCol div 8
    AND EAX,7 // aCol mod 8

    LEA EAX,[EAX * 16 + EAX] // X * 16 + X = X * 17
    LEA EDX,[EDX * 16 + EDX] // Y * 16 + Y = Y * 17

    MOV [ECX].TRect.Left,EAX
    MOV [ECX].TRect.Top,EDX
    ADD EAX,14
    ADD EDX,14
    MOV [ECX].TRect.Right,EAX
    MOV [ECX].TRect.Borrom,EDX
end;
{
JA  = Jump if Above, springe wenn größer, Vorzeichen wird ignoriert
JS  = Jump if Sign, springe wenn < 0
JNS = Jump not if Sign, springe nicht wenn < 0, bzw. springe wenn >= 0
LEA = Load Effective Address
}
Gruß Hagen
  Mit Zitat antworten Zitat