Einzelnen Beitrag anzeigen

neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#8

Re: Assembler in Delphi! Speichersack?

  Alt 30. Sep 2003, 14:07
So ich habe gerade versucht das gegenstück zu verbessern!

Delphi-Quellcode:
function TColorPalette.GetColorRect(aiCol: Integer): TRect;
var x, y : Integer;
{begin
  if aiCol = -1 then
    Result := Rect(0, 0, 0, 0)
  else
    begin
      x := aiCol mod 8;
      y := aiCol div 8;
      Result := Rect(x * 17, y * 17, x * 17 + 14, y * 17 + 14);
    end;
end; }

asm
  push edi
  test edx, edx
  js @@nullrect // aiCol < 0
  mov edi, 8
  mov eax, edx
  xor edx, edx
  div edi // aiCol div 8
  mov x, edx // = x
  mov y, eax // = y
  mov edi, 17 // Abstand
  // berachne
  mov eax, x
  mul edi
  mov @Result.Left, eax
  mov eax, y
  mul edi
  mov @Result.Top, eax
  mov eax, x
  mul edi
  add eax, 14
  mov @Result.Right, eax
  mov eax, y
  mul edi
  add eax, 14
  mov @Result.Bottom, eax
  jmp @@exit
@@nullrect:
  mov @Result.Left, 0
  mov @Result.Top, 0
  mov @Result.Right, 0
  mov @Result.Bottom, 0
@@exit:
  pop edi
end;
Geht das noch eleganter?
Warum kann man ecx nicht nutzen
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat