Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [Assembler] - Signed Division (https://www.delphipraxis.net/98948-%5Bassembler%5D-signed-division.html)

Shaman 4. Sep 2007 14:22


[Assembler] - Signed Division
 
hey there

Ich habe Probleme bei der Division mit Vorzeichen:

Delphi-Quellcode:
type
  TInteger = record
  public
    Value: Integer;
    { ... }
    function DivBy(X: Integer): Integer;
  end;
Delphi-Quellcode:
function TInteger.DivBy(X: Integer): Integer;
// Dividiert Value durch X und gibt den Rest zurück
asm
    PUSH EBX
    MOV ECX, EAX    // ECX:= @Value
    MOV EAX, [ECX]  // EAX:= Value
    MOV EBX, EDX    // EBX:= X
    XOR EDX, EDX    // EDX:= 0
    IDIV EBX        // EAX:= EDX:EAX div EBX, Rest in EDX
    MOV [ECX], EAX  // Value:= EAX
    MOV EAX, EDX    // Result:= EDX
    POP EBX
end
Soweit funktioniert es eigentlich, einzig wenn Value negativ ist, kommt ein falscher Quotient raus... Habe ich etwas bezüglich IDIV übersehen?

Greets

Dax 4. Sep 2007 14:24

Re: [Assembler] - Signed Division
 
Soweit ich weiß, sollte vor jedem IDIV ein CDQ (Convert Double to Quad) ausgeführt werden, bei dem EAX auf EAX:EDX vorzeichenerhaltend ausgedehnt wird. Das heißt: EDX := -Sign(EAX);

Shaman 4. Sep 2007 14:35

Re: [Assembler] - Signed Division
 
Das war's, danke dir :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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