AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Assembler in Delphi! Speichersack?

Ein Thema von neolithos · begonnen am 30. Sep 2003 · letzter Beitrag vom 30. Sep 2003
 
Benutzerbild von negaH
negaH

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

Re: Assembler in Delphi! Speichersack?

  Alt 30. Sep 2003, 11:41
Du vergisst den Stack korrekt aufzuräumen.

Delphi-Quellcode:
asm
  // apt.x div 17
  mov eax, apt.x
  mov ecx, 17
  push edx <--- hier EDX auf Stack
  mov edx, 0
  div ecx
  cmp edx, 14
  jns @nowhere <---- hier EXIT ohne EDX vom Stack zu holen
  mov x, eax
  // apt.y div 17
  pop edx <---- hier EDX vom Stack
  mov eax, apt.y
  mov edx, 0
  div ecx
  cmp edx, 14
  jns @nowhere
  // Result := x + y(eax) * 8
  shl eax, 3
  or eax, x
  cmp eax, 40
  jns @nowhere
  mov @Result, eax
  jmp @1
@nowhere:
  mov @Result, -1 // Result := -1 <----- wenn obiges JNS True ist wird EDX nicht vom Stack geholt
@1:
end;
Zudem verstehe ich nicht warum du
  Result := (apt.x div 17) + (apt.y div 17) * 8 in Assembler als
Result := (apt.x div 17) or (apt.y div 17) * 8 codiert hast.

Zudem JNS = Jump if not sign, Springe wenn EAX < 0 ! ist falsch

Delphi-Quellcode:
function TColorPalette.HitColorText(apt: TPoint): Integer;
{
var x : Integer;
begin
  if PtInRect(ClientRect, apt) then
    if ((apt.x mod 17) > 14) or ((apt.y mod 17) > 14) then
        Result := -1
    else
        Result := (apt.x div 17) + (apt.y div 17) * 8
  else
    Result := -1;
end;}

asm
     // in EAX = Self, EDX = @TPoint

   PUSH EDI
   MOV ECX,17
   MOV EAX,[EDX].TPoint.X
   MOV EDI,[EDX].TPoint.Y
   TEST EAX,EAX
   JS @@Nowhere // P.X < 0 ??
   TEST EDI,EDI
   JS @@Nowhere // P.Y < 0 ??
   XOR EDX,EDX
   DIV ECX
   CMP EDX,14
   JA @@Nowhere // P.X mod 17 > 14 ??
   XCHG EAX,EDI // EDI = P.X div 17
   XOR EDX,EDX
   DIV ECX
   CMP EDX,14
   JA @@Nowhere
   LEA EAX,[EDI + EAX * 8] // Result = P.X div 17 + P.Y div 17 * 8
   JMP @@Exit
@@Nowhere:
   XOR EAX,EAX
   DEC EAX
@@Exit
   POP EDI
end;
Gruß Hagen
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz