![]() |
[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:
Soweit funktioniert es eigentlich, einzig wenn Value negativ ist, kommt ein falscher Quotient raus... Habe ich etwas bezüglich IDIV übersehen?
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 Greets |
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);
|
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