Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
xxtrash
Anmeldungsdatum: 28.06.2006 Beiträge: 2
|
Verfasst am: 28. Jun 2006 13:32 Titel: 64 bit zahl addieren auf 32 bit cpu?? |
|
|
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 |
|
|
|
ED209
Anmeldungsdatum: 30.05.2005 Beiträge: 122
|
Verfasst am: 28. Jun 2006 19:04 Titel: |
|
|
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 |
|
|
xxtrash
Anmeldungsdatum: 28.06.2006 Beiträge: 2
|
Verfasst am: 28. Jun 2006 21:45 Titel: |
|
|
ja aber wie definiere ich das in einem assembler programm? sorry ich weiß das sind neulings fragen |
|
Nach oben |
|
|
ED209
Anmeldungsdatum: 30.05.2005 Beiträge: 122
|
Verfasst am: 29. Jun 2006 13:01 Titel: |
|
|
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 |
|
|
dachdecker2 Moderator
Anmeldungsdatum: 11.06.2005 Beiträge: 106 Wohnort: Maintal / Hessen
|
Verfasst am: 30. Jun 2006 08:03 Titel: |
|
|
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 |
|
|
ED209
Anmeldungsdatum: 30.05.2005 Beiträge: 122
|
Verfasst am: 30. Jun 2006 11:48 Titel: |
|
|
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 |
|
|
as_string
Anmeldungsdatum: 24.02.2006 Beiträge: 80 Wohnort: Heidelberg
|
Verfasst am: 24. Jul 2006 20:54 Titel: |
|
|
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 |
|
|
madde
Anmeldungsdatum: 05.08.2006 Beiträge: 4
|
Verfasst am: 05. Aug 2006 11:31 Titel: Re: 64 bit zahl addieren auf 32 bit cpu?? |
|
|
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 |
|
|
dachdecker2 Moderator
Anmeldungsdatum: 11.06.2005 Beiträge: 106 Wohnort: Maintal / Hessen
|
Verfasst am: 05. Aug 2006 14:07 Titel: |
|
|
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 |
|
|
as_string
Anmeldungsdatum: 24.02.2006 Beiträge: 80 Wohnort: Heidelberg
|
Verfasst am: 05. Aug 2006 14:33 Titel: Re: 64 bit zahl addieren auf 32 bit cpu?? |
|
|
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 |
|
|
|