![]() |
div-Fehler
Morgen.
Ich habe folgenden ASM-Code:
Delphi-Quellcode:
Das gibt einen Integer-Overflow. Und nicht nur das. Immer wenn ich div ausführe und in edx was anderes drinsteht als 0 gibt es das.
function DivMod(Dividend, Divisor: Cardinal): TDivModResult;
asm div edx mov [ecx], eax mov [ecx+$04], edx end; Außerdem kann ich in dem Code kein anderes Register verwenden - in eax steht der erste Parameter, ebx darf ich seltsamerweise nciht überschreiben weil sonst alles abschmiert, in ecx steht die Adresse des results und edx geht wegen o.g. Gründen nicht. |
Re: div-Fehler
Zitat:
Bei einer Division mit einem 32-Bit-Divisor wird als Dividend das Doppel-Register EDX:EAX benutzt ( ![]() Gruß Hawkeye |
Re: div-Fehler
div benutzt als Dividend einen 64-Bit Operanden aus EDX:EAX - und EDX:EAX / EDX ist immer größer als 32 Bits.
// Hab den roten Kasten einfach mal ignoriert. |
Re: div-Fehler
Aaah, verstehe. Wenn ich jetzt div dx machen würde, würde es gehen?
|
Re: div-Fehler
Nein. div dx benutzt dx:ax als Dividenden. Du musst den Divisor erst in ein anderes Register kopieren und dann auf 0 setzen.
|
Re: div-Fehler
Und wenn ich keins mehr frei hab, muss ich pushen und poppen?
|
Re: div-Fehler
Zitat:
Delphi-Quellcode:
function DivMod(Dividend, Divisor: Cardinal): TDivModResult;
asm push ecx mov ecx, edx xor edx, edx div ecx pop ecx mov [ecx], eax mov [ecx+$04], edx end; |
Re: div-Fehler
Zitat:
Delphi-Quellcode:
// ROTER KASTEN
function DivMod(Dividend, Divisor: Cardinal): TDivModResult;
asm push edx xor edx, edx div dword ptr [esp] // das alte EDX mov [ecx], eax add esp, 4 mov [ecx+$04], edx end; Irgendwie bin ich heute zu langsam... :???: |
Re: div-Fehler
So ähnlich hatte ich das schon - nur ich hatte einen Befehl mehr.
Seit ich weiß, dass div edx:eax als Dividend nimmt, wenn ich das mit div edx mache, macht das mit dem Integerüberlauf natürlich auch Sinn. Danke @all. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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