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

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

21

18.01.2006, 19:34

sorry hab mich vertan, in meiner schusseligkeit, meine frage ist eher, warum der wert von ebx auch in edx steht
Was es alles gibt, das ich nich brauche - Aristoteles

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

22

18.01.2006, 19:49

Zitat von »"CW_Kovok"«

kannst du den Assemblerausschnitt mal genauer erläutern? Die ersten beiden befehle sind klar, aber was soll xor edx, edx?

Quellcode

1
xor edx, edx
ist dasselbe wie

Quellcode

1
mov edx, 0
, allerdings stellt die xor-Variante eine Optimierung gegenüber der mov-Variante dar.
Vor dem Aufruf von div muss edx deshalb auf 0 gesetzt werden, weil der Divisor (b) 32 Bit lang ist und das bedeutet, dass als Dividend edx:eax herangezogen wird (der Doppelpunkt hat jetzt nichts Besonderes zu sagen, das ist die übliche Schreibweise für zwei zusammengesetzte Register). Da wir wissen, dass der Dividend (a) nur 32 Bit lang ist, setzen wir die höherwertigen Bits alle auf 0 (also edx = 0).
Nach der Division steht dann -- wie gesagt -- das Modulo-Ergebnis in edx.

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

23

18.01.2006, 19:52

aso danke, sehe muss ich mir nochmal angucken, achja, wie mache ich bedingte sprünge unter assembler?
Was es alles gibt, das ich nich brauche - Aristoteles

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

24

18.01.2006, 19:54

Zitat von »"nix da"«

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.

nix da
edl und edh gibt es gar nicht. Es gibt "nur" dl, dh, dx und edx (bei 32-Bit-Maschinen)...

CW_Kovok
Kuck mal in Deinem alten Thread, da hatte ich schon 'ne sehr fixe Version gepostet...
https://www.spieleprogrammierer.de/phpBB…der=asc&start=0

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

25

18.01.2006, 19:58

Zitat von »"CW_Kovok"«

aso danke, sehe muss ich mir nochmal angucken, achja, wie mache ich bedingte sprünge unter assembler?

Da gibt es eine ganze Reihe an Möglichkeiten. Zunächst musst Du 'nen Test oder eine arithmetische Operation durchführen, damit die entsprechenden Flags gesetzt bzw. nicht gesetzt sind (z.B. Sign-Flag, Carry-Flag, Zero-Flag).
Z.B. cmp eax, ebx oder test eax, 00ff0000h oder shr eax, 3 ...
Dann gehst Du hin und machst 'nen bedingten Sprung mit beispielsweise jz oder je (Sprung, falls Zero-Flag = 1), oder jg (Sprung, falls Zero-Flag = 0 und Sign-Flag = Overflow-Flag), oder, oder, oder... musst mal in irgendeiner Referenz nachglotzen, da gibt es etliche Möglichkeiten. Zu viele für diesen Thread... ;)

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

26

18.01.2006, 19:59

aso, jetzt verstehe ic deine version aber endlich auch, danke, jz ist springe bei 0 oder?
Was es alles gibt, das ich nich brauche - Aristoteles

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

27

18.01.2006, 20:04

Zitat von »"CW_Kovok"«

aso, jetzt verstehe ic deine version aber endlich auch, danke, jz ist springe bei 0 oder?

Ja, so zu sagen...
In meinem Beispiel:

Quellcode

1
2
or ebx, ebx
jz _gcd_casm_done

wird halt geprüft, ob ebx = 0 ist. Falls dem so ist, dann erfolgt der Sprung.

Quellcode

1
or ebx, ebx
ist wiederum eine optimierte Version von

Quellcode

1
cmp ebx, 0
. Nach der Operation ist das Zero-Flag gesetzt, falls ebx gleich 0 ist...

Anonymous

unregistriert

28

18.01.2006, 20:06

Steven77
Ich dachte die gäbe es noch, werden jedoch nicht mehr benutzt? Also das es die nicht mehr gibt, kann ich mir nur sehr schwer vorstellen.

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

29

18.01.2006, 20:11

nix da
Nee, die gab es noch nie. Bei den früheren Rechnern (bis 386 SX) gab es ja nur 16-Bit-Register. Da wurde zwischen z.B. al und ah unterschieden (jeweils 8 Bit). ax stellte dann das komplette 16-Bit-Register dar. Die 32-Bit-Rechner (ab 386 DX) hatten dann zusätzlich noch eax, allerdings können die höherwertigen Bits nicht direkt angesprochen werden, sondern müssen erst geshiftet werden...
Dass es jemals sowas wie beispielsweise eah und eal gegeben hat, kann ich mir meinerseits nicht vorstellen, da wäre ich mit Sicherheit schonmal drüber gestolpert ;) Zumal eal dann ja dasselbe wäre wie ax...

Anonymous

unregistriert

30

18.01.2006, 20:32

Steven77
Wie schon gesagt, Assembler war noch nie meine Stärke und habe damit auch nichts mehr zu tun :) Mein Skill liegt mehr auf C++, ASP und MS-SQL :huhu:

Werbeanzeige