Der Compiler speichert int64-Werte einfach als 2 integer hintereinander, also
a:=4 (mit a vom int64) wird zu
Delphi-Quellcode:
asm
mov dword ptr [esp], 4 ;low integer
mov dword ptr [esp+4], 0 ;high integer
end;
Ein a mod b läfut allerdings so ab, dass er nur zwei 32bit (also nomrale) integer werte in eax<--a und edx<--b schiebt, und dann normal div macht. Dabei legt die ALU den ganzzahliegen Anteil des Ergebnisses in eax und den Rest in edx.
Anders gesagt, das mod ist eine integrierte Funktion der CPU. Diese läuft auf 32bit-CPUs auch nur in 32bit
Und du hast Recht, du müsstest dein modulo zu Fuß erledigen, so wie du es hingeschrieben hast.
Edit: Nee, Kommando zurück. Laut Debugger macht der ja etwas anderes, der hat eine Funktion namens _llmod.... und sieht alles ganz gut aus
[/delphi]
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.