Zurück   RR:Board > Computer > Programmierung & Entwicklung

Entwicklung und Coding in verschiedenen Programmiersprachen: Assembly, C++, C#, Perl, Delphi, .NET, Visual Basic...
Antwort
 
Themen-Optionen Thema durchsuchen

[Assembler] - Multiplizieren von 32 Bit Worten
Alt 07.07.2011, 19:56   # 1
Nosferatu
Kabel Wurm
rot rot rot 
Bewertung:
Nosferatu hat mehr als 5000 PunkteNosferatu hat mehr als 5000 PunkteNosferatu hat mehr als 5000 PunkteNosferatu hat mehr als 5000 PunkteNosferatu hat mehr als 5000 PunkteNosferatu hat mehr als 5000 PunkteNosferatu hat mehr als 5000 PunkteNosferatu hat mehr als 5000 PunkteNosferatu hat mehr als 5000 PunkteNosferatu hat mehr als 5000 Punkte
Nosferatu hat mehr als 5000 Punkte
Registriert seit: Nov 2008
Internet: DSL 6000
Beiträge: 843
Power: 15
Hallo,

ich habe als Aufgabe ein Assembler Programm zu schreiben, das zwei 32 Bit Wörter mit Vorzeichen multipliziert. Als Befehlssatz habe ich zur Verfügung: ADD, SUB, AND, OR, NOT, SL, SR. Desweiteren stehen mir dafür 10 Register zur Verfügung.

Als triviale Methode fällt mir ein einfach für jede 1 im Multiplikator den Multiplikant in ein Register aufzuaddieren. Das ist allerdings sehr langsam.

Kennt da jemand einen guten Algorithmus der auch noch einfach zu implementieren ist? Wenns was fertig gibt wäre das auch optimal.

Gruß

"Keiner ist so verrückt, dass er nicht einen noch Verrückteren findet, der ihn versteht." (Friedrich Nietzsche)
  Nosferatu ist offline   Mit Zitat antworten

Alt 08.07.2011, 12:14   # 2
highpinger
Outlaw Legend
blau blau blau 
Bewertung:
highpinger hat 100 bis 199 Punktehighpinger hat 100 bis 199 Punkte
Registriert seit: Jul 2005
Beiträge: 3.341
Power: 36
sind deine zahlen denn inder betrag vorzeichen darstellung?




Beispiel für die (schriftliche) Multiplikation von zwei positiven 4Bit Zahlen:
Code:
1011 * 1100 ( = 11*12) ----------- ....1011... +....1011.. +.....0000. +......0000 ----111----- (Übertrag) = 10000100 = 128 + 4 = 132 = 11*12 check :)
Ein Beispiel für eine Multiplikation von 1011 mit einer 4Bit Zahl X=abcd:
Code:
1011 * abcd ----------- ....1011... * a +....1011.. * b +.....1011. * c +......1011 * d ----------- ist gleich ----------- (Nullen auffüllen) ....1011000 * a +....101100 * b +.....10110 * c +......1011 * d ----------- ist gleich ----------- 1011 * a * 2^3 + 1011 * b * 2^2 + 1011 * c * 2^1 + 1011 * d * 2^0
Wir haben schonmal Summen und Multiplizieren mit 2 entspricht einem ShiftLeft, 2^3 also 3*Shiftleft.
Es müssen also noch die Ausdrücke 1011 * x auswertet werden.
Es muss vergliechen werden:
-> x = 0, dann ist der Ausdruck Null,
-> x = 1, dann ist der Ausdruck 1011.


Ein Algorithmus für A*B könnte also so lauten:
1. Vergleiche die Vorzeichen Bits:
wenn => +
sonst -
2. , wenn springe zu 7.
3. wenn Bit , dann springe zu 6.
4. shifte Betrag(A) um i Stellen nach links.
5. Addiere das Teilergebnis zu deinem Gesamtergebnis
6. i++, springe zu 2.
7. fertig

Dies enthält jetzt die Multiplikation! Du hast allerdings eine Wortlänge von 32 bit und das Endergebnis hat 64 Bit!
Du musst also noch aufteilen, dass die Rechnungen alle in 32 Bit Register passen.

viel spaß damit^^




**edit**

für das mit dem high und low register:
das was zu zum high hinzuaddieren must ist der Betrag von A um (31-i)Bit nach rechts
und das zu low um i Bit nach links geshiftet

wenn ich high da rein pinge und high spiele, dann hol ich den high score
  highpinger ist offline   Mit Zitat antworten
Antwort

RR:Board > Computer > Programmierung & Entwicklung > [Assembler] - Multiplizieren von 32 Bit Worten


Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir erlaubt, Anhänge anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
von 32 bit auf 64bit BiG__1 PC Hardware 15 27.09.2010 13:16
[XP] - Bootloader von vista 64 bit mit xp 32 bit thaclone Windows 6 20.03.2009 23:38
Von Windows XP 32 Bit auf Windows Vista 64 bit? sentino Windows 8 20.10.2008 06:20
BS (XPMCE)von 32 auf 64 bit Benjamin Buford Windows 1 26.03.2008 13:05
Von 32 auf 64 bit umsteigen warden Windows 6 02.02.2007 20:18



Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr.
vBulletin Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.