Modulo mit Quads?
Modulo mit Quads?
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
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
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
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

Gruß
Helle
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Hallo,
ich habe mir mal aus Spaß angekuckt, was
Für Modulo mit Integern (32 Bit):
Für Modulo mit Quads:
Danke für Eure Antworten!
Gruß, Little John
ich habe mir mal aus Spaß angekuckt, was
liefert.pbcompiler test.pb /COMMENTED
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
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]
Gruß, Little John