Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

riCo

Treue Seele

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

11

18.01.2006, 10:52

Alle Rechenoperationen müssen ja auf Addition zurückgeführt werden, da der Rechner ja "dumm" ist und nur Addieren kann. Vor einigen Tagen erwähnte mein Informatik-Dozent, dass Modulo Schaltkreistechnisch in der CPU mit verankert ist und daher super schnell ist. Genauer erläutern kann ich dir das leider auch nicht, aber wie meinte mein Mathelehrer doch so schön? Nehmen Sie es als gegeben hin. ;-)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

12

18.01.2006, 10:59

Wenn es "verankert" ist, meint er wohl als Befehl im Befehlsregister enthalten. Aber setzt das nicht vorraus, dass es ein ASM Befehl dafür geben muss?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

13

18.01.2006, 12:21

Zitat von »"Nox"«

Wenn es "verankert" ist, meint er wohl als Befehl im Befehlsregister enthalten. Aber setzt das nicht vorraus, dass es ein ASM Befehl dafür geben muss?

a mod b errechnet sich in Assembler wie folgt:

Quellcode

1
2
3
4
mov eax, a
mov ebx, b
xor edx, edx
div ebx

Nach der Operation findet sich in eax das Ergebnis der Division und in edx das Modulo-Ergebnis wieder. edx ergibt sich nach der Division einfach zu (Pseudo-Code): edx = a - (eax * b).

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

14

18.01.2006, 18:52

kannst du den Assemblerausschnitt mal genauer erläutern? Die ersten beiden befehle sind klar, aber was soll xor edx, edx?
Was es alles gibt, das ich nich brauche - Aristoteles

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

15

18.01.2006, 19:13

und eine neue schnellere Euklidversion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
inline long ggte (long left, long right)
{
    while (right != 0)
    {
        if (right > left) 
            shift<long> (&right, &left, right-left);

        else
            shift<long> (&left, &right, left-right);
    }

    return (left);
}


nun ist es 5.8 zu 3.5 sekunden
Was es alles gibt, das ich nich brauche - Aristoteles

Anonymous

unregistriert

16

18.01.2006, 19:19

XOR = eXclusive OR (Kennt man aus der Elektrotechnik)
EDX = Das Register: Extended Data. EDL wäre der untere Registerbreiech und EDH wäre der obere Registerbereich, EDX sagt aus, das der Komplette Registerbereich benutzt wird.

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

17

18.01.2006, 19:24

dass ist mir schon klar, aber da wurde noch nix reingeschrieben oder? Aso hier die neue version von ggtm:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
inline long ggtm (long left, long right)
{
    if (right > left) swap<long> (&left, &right);

    while (right != 0)
    {
        _asm
        {
            mov eax, left
            mov ebx, right
            xor edx, edx
            div ebx
            mov right, edx
            mov left, ebx
        }
    }
    return (left);
}


@nix da: sorry dass ich deinen code zerhacke

jetzt ist die funktion nochmal 50% schneller
Was es alles gibt, das ich nich brauche - Aristoteles

Anonymous

unregistriert

18

18.01.2006, 19:26

CW_Kovok
Kein Problem, meine Codes stehen sowieso immer unter der CPL1.0 ;)

Quellcode

1
2
3
4
mov eax, a 
mov ebx, b  << B wird in das EDX Register geschrieben
xor edx, edx  << XOR wird auf EDX Register durchgeführt und das Ergebnis wird wieder ins EDX Register gestopft
div ebx

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

19

18.01.2006, 19:28

aber wieso, WIESO?? Ich meine erst läd man die beiden zahlen in die register eax (der Akku oder?) und ebx, aber dann tausche ich per xor edx mit sich selbst, was bewirkt dass denn?
Was es alles gibt, das ich nich brauche - Aristoteles

Anonymous

unregistriert

20

18.01.2006, 19:32

CW_Kovok
XOR ist doch kein Vertauschen? XOR ist genau wie AND, NAND, OR und co. Operatoren die man täglich in der Gattertechnik antrifft.

Vertauschen sieht anders aus.

Werbeanzeige