Seite 1 von 1
Modulo mit Quads?
Verfasst: 14.01.2009 15:17
von Little John
Hallo zusammen,
funktioniert der Modulo-Operator
% eigentlich auch mit Quads
zuverlässig, oder nur mit Long- bzw. Integer-Zahlen?
Die Frage klingt vielleicht komisch, aber nachdem ich im Laufe der Zeit feststellen musste dass PB lauter "Ecken und Kanten" bzw. Bugs hat, die erst auf den 2. oder 3. Blick sichtbar werden (siehe beispielsweise
hier), möchte ich nicht einfach auf die Zuverlässigkeit vertrauen. Meine ersten Tests sind positiv verlaufen, aber es würde mich freuen zu lesen welche Erfahrungen ihr damit gemacht habt.
Gruß, Little John
Verfasst: 14.01.2009 15:41
von KeyKon
Ich hatte noch keine Probleme...
Verfasst: 14.01.2009 18:57
von Little John
KeyKon hat geschrieben:Ich hatte noch keine Probleme...
Das klingt ja schon mal ganz ermutigend.

Danke!
Gruß, Little John
Verfasst: 15.01.2009 01:24
von KeyKon
Bevor keiner was schreibt^^
Verfasst: 15.01.2009 01:42
von Kaeru Gaman
meines wissens ist die Modulo direkt dieselbe CPU funktion wie Division,
nur ein anderes Register wird zurück gegeben.
Nach dem ASM-Commando DIV wird der Quotient in einem Register
gespeichert und der Rest in einem Anderen.
je nachdem ob du / oder % verwendest, setzt PB einen der beiden
Registerwerte ein.
Verfasst: 15.01.2009 17:24
von Helle
Nee, KG, so einfach geht das nicht. DIV sowieso nicht (ist unsigned), wenn dann schon IDIV (signed). Der Rest einer Integer-Division steht dann im EDX-Register, soweit schon richtig, aber was, wenn dies (eben Modulo) größer als 32-Bit ist? Es wird dann eine Exception ausgelöst (divide error, muss aber selbst ausgewertet werden), ist für Quad-Modulo somit nicht so richtig brauchbar. Die Quad-Modulo-Procedure von PB ist ein aufwändiges Gebilde; mit einem gewissen simplen Dis-Assembler (

) sehr schön anschaubar. Und ob sie fehlerfrei ist: Im Zweifel für den Angeklagten. In den letzten Versionen hatte ich keine Probleme.
Gruß
Helle
Verfasst: 15.01.2009 18:20
von Kaeru Gaman
aha... gut zu wissen. thnx.
Verfasst: 15.01.2009 21:14
von Little John
Hallo,
ich habe mir mal aus Spaß angekuckt, was
pbcompiler test.pb /COMMENTED
liefert.
Für Modulo mit Integern (32 Bit):
Code: Alles auswählen
; m.i = a.i % b.i
MOV ebx,dword [v_a]
MOV eax,ebx
CDQ
IDIV dword [v_b]
MOV ebx,edx
MOV dword [v_m],ebx
Für Modulo mit Quads:
Code: Alles auswählen
extrn Mod64
; m.q = a.q % b.q
PUSH dword [v_a+4]
PUSH dword [v_a]
LEA eax,[v_b]
PUSH dword [eax+4]
PUSH dword [eax]
PUSH dword [esp+12]
PUSH dword [esp+12]
CALL Mod64
MOV [esp],eax
MOV [esp+4],edx
POP dword [v_m]
POP dword [v_m+4]
Danke für Eure Antworten!
Gruß, Little John