Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

64 bit zahl addieren auf 32 bit cpu??
Gehe zu Seite 1, 2  Weiter
 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Assembler
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
xxtrash



Anmeldungsdatum: 28.06.2006
Beiträge: 2

BeitragVerfasst am: 28. Jun 2006 13:32    Titel: 64 bit zahl addieren auf 32 bit cpu?? Antworten mit Zitat

hallo
habe gerade neu mit assembler angefangen und weiss gerade echt nicht weiter und zwar soll ich 2 64 bit hexa-zahlen addieren, aber wir haben ja nur 32 bit systeme. wie kann ich denn die zahlen splitten so dass ich mit denen arbeiten kann?

Bsp zahlen: 0x11111111 und 0x22222222
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ED209



Anmeldungsdatum: 30.05.2005
Beiträge: 122

BeitragVerfasst am: 28. Jun 2006 19:04    Titel: Antworten mit Zitat

Du kannst eine 64 Bit-Zahl x als 2 32-Bit-zahlen a,b darstellen mit

Hier ist a die hoeherwertige Zahl und b die niederwertige.
In so einer Darstellung kannst du dann auch 2 64 Bit Zahlen addieren, indem du nur 32-Bit Operationen brauchst.

_________________
+++++++++++++[>++++>+<<-]>.--.>---.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
xxtrash



Anmeldungsdatum: 28.06.2006
Beiträge: 2

BeitragVerfasst am: 28. Jun 2006 21:45    Titel: Antworten mit Zitat

ja aber wie definiere ich das in einem assembler programm? sorry ich weiß das sind neulings fragen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ED209



Anmeldungsdatum: 30.05.2005
Beiträge: 122

BeitragVerfasst am: 29. Jun 2006 13:01    Titel: Antworten mit Zitat

Du kannst es nicht definieren wie du es in C oder Java mit einer Struktur oder einem Objekt machen wuerdest, du kannst nur die 32-Bit Werte festlegen (Im Beispiel: a1 = 0x1111, b1=0x1111, a2=0x2222, b2=0x2222)und die Interpretation deinem Programm ueberlassen.

Gruss,
ED209

_________________
+++++++++++++[>++++>+<<-]>.--.>---.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dachdecker2
Moderator


Anmeldungsdatum: 11.06.2005
Beiträge: 106
Wohnort: Maintal / Hessen

BeitragVerfasst am: 30. Jun 2006 08:03    Titel: Antworten mit Zitat

Du nimmst einfach die Addidion mit Übertrag (Carry? hab grad keine Zeil zum nachsehen) die sorgt dafür, dass dir das bit 2^32 bei der Addition der niederwertigen Quadbytes nicht herunterfällt - natürlich musst du vorher das übertragsbit löschen, sonst ist deine Zahl nachher zu groß.
_________________
In a world without walls and fences, who needs windows and gates? [Internet]

Gruß, dachdecker2
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden MSN Messenger
ED209



Anmeldungsdatum: 30.05.2005
Beiträge: 122

BeitragVerfasst am: 30. Jun 2006 11:48    Titel: Antworten mit Zitat

Hmm mir faellt grad auf, dass die angegebenen Zahlen ueberhaupt keine 64-Bit Zahlen sind :) 0x11111111 entspricht 00010001000100010001000100010001b
Ich zaehle da 32 Stellen....

_________________
+++++++++++++[>++++>+<<-]>.--.>---.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
as_string



Anmeldungsdatum: 24.02.2006
Beiträge: 80
Wohnort: Heidelberg

BeitragVerfasst am: 24. Jul 2006 20:54    Titel: Antworten mit Zitat

Normalerweise gibt es dafür zwei verschiedene add-Befehle: "add" und "adc". add ist die normale Addition, die bei einem Überlauf das CF (Carry-Flag) setzt. adc macht auch eine normale Addition, addiert aber noch das CF zum Ergebnis dazu.
Du mußt also erst die beiden niederwertigen 32-bit Zahlen mit add addieren und direkt danach ein adc auf die beiden höherwertigen ausführen. Theoretisch kann man das so noch weiter machen, wenn man noch größere Zahlen addieren müßte.
Die genaue Syntax hängt natürlich von der verwendeten CPU ab. Außerdem könnte es vielleicht sinnvoll sein, SSE Befehle oder so zu verwenden, wenn man viele 64-bit Zahlen verrechnen müsste.

Gruß
Marco
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
madde



Anmeldungsdatum: 05.08.2006
Beiträge: 4

BeitragVerfasst am: 05. Aug 2006 11:31    Titel: Re: 64 bit zahl addieren auf 32 bit cpu?? Antworten mit Zitat

xxtrash hat Folgendes geschrieben:
hallo
habe gerade neu mit assembler

Welcher Prozessor?
32 bit sagt erst mal gar nix. Je nach Prozessor wird intern bei arithmetischen und anderen Operationen (sin,..) mit viel höherer Genauigkeit gerechnet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dachdecker2
Moderator


Anmeldungsdatum: 11.06.2005
Beiträge: 106
Wohnort: Maintal / Hessen

BeitragVerfasst am: 05. Aug 2006 14:07    Titel: Antworten mit Zitat

Mach mal bitte ein Beispiel für einen Prozessor, der für Addition von Integerzaheln, um was es hier ja geht, intern eine höhere Genauigkeit verwendet als extern. Mit welchen Befehlen implementierst du deine Addition von Zahlen, die breiter als die Wortbreite deines Prozessors sind?
_________________
In a world without walls and fences, who needs windows and gates? [Internet]

Gruß, dachdecker2
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden MSN Messenger
as_string



Anmeldungsdatum: 24.02.2006
Beiträge: 80
Wohnort: Heidelberg

BeitragVerfasst am: 05. Aug 2006 14:33    Titel: Re: 64 bit zahl addieren auf 32 bit cpu?? Antworten mit Zitat

madde hat Folgendes geschrieben:
32 bit sagt erst mal gar nix. Je nach Prozessor wird intern bei arithmetischen und anderen Operationen (sin,..) mit viel höherer Genauigkeit gerechnet.


Ich glaube Du verwechselst hier Integer mit Gleitkomma Operationen. Wenn man von einem 32-bit Prozessor redet, dann bedeutet das, dass die internen Register, wie dachdecker2 schon gesagt hat, eine Breite von 32-bit haben und jeder (mir bekannte) Prozessor führt genau mit diesen Registern Integer-Operationen aus, so dass die ALU auch genau diese Breite hat.
Das einzige, was ich mir noch denken kann, sind irgendwelche MMX/SSE Sachen. Da kann man meine ich auch Integer-Operationen ausführen und da diese Register deutlich breiter sind (eigentlich weil man ja mehrere Zahlen gleichzeitig verrechnen möchte damit), kann es sein, dass dann auch Integeroperationen mit größerer Breite möglich sind. Aber das hat dann eigentlich nicht mehr wirklich mit Integeroperationen des Prozessors an sich zu tun, weil diese Einheiten mehr so nebenher laufen. Außerdem kenne ich mich damit nicht aus. Ich denke aber mal, dass Du das auch nicht meinst.

Gruß
Marco
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Assembler Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen