mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler MUL und DIV


Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
da krieg ich noch was nicht hin:
-Wie können Sie eine 8 Bit Zahl mit 2 oder 4 multiplizieren, ohne den
langsamen Befehl MUL AB zu verwenden?
-Wie können sie eine 8 Bit Zahl durch 8 dividieren ohne den Befehl DIV
AB zu verwenden?

Wäre toll, nochmals so super Hilfe zu kriegen wie bei meinen letzten
"Problemen".

Schon mal ein ganz herzliches Dánkeschön!

Anja

Autor: Thomas Burkhardt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Potenzen von 2 kann man sich mit den Shift-Befehlen zur
Multiplikation bzw. Division behelfen. Wichtig ist dann natürlich zu
bedenken, dass die Zahl aus dem Wertebereich des Registers rauslaufen
kann.

PS: iss nich ein wenig spät für Hausaufgaben g

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Immer diese Hausaufgaben...

Wie machste das denn dezimal, wenn du eine Zahl mit einer Zehnerpotenz
multiplizieren musst oder durch eine Zehnerpotenz dividieren musst? Ich
schiebe da nur am Komma...

Und deine Beispiele sind Zweierpotenzen, Dualzahlen haben die Basis 2.

...

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Konkret kann man das bei den 8051´ern mit den Befehlen "RRC A" und
"RLC A" machen (Rotate right/left trough Carry).
Bei den 8051´ern gibt es leider keine Shift-Befehle welche einfach eine
0 an die freie Stelle setzen.
Berichtigt mich wenn ich mich irre!

Multiplikation mit 2:
 CLR C   ;Carry-Flag löschen
 RLC A   ;Akku durch links rotieren verdoppeln (*2)

Für A*4 einfach das ganze 2 mal und A*8 3 mal.
3 mal verdoppeln = * 8 (2, 4, 8, 16, 32...)

Division:
 CLR C   ;Carry-Flag löschen
 RRC A   ;Akku durch rechts rotieren halbieren (/2)

Da auch für A/4 das ganze 2 mal und A/8 3 mal.
3 mal halbieren = / 8

Gruß
Andi

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wollte ja nur einen Denkanstoß geben aber nun sind die Hausaugaben
doch gemacht.

...

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schön!!!!
Sind keine "Hausaufgaben", bin dabei, alte Prüfungen durchzumachen.
Mit programmieren steh' ich leider immer noch etwas auf Kriegsfuß.
Gibt's denn nicht für einige Dinge vorgefertigte Puzzleteile, die man
dann einfach wieder zusammensetzt?
Guten Start in den Montag!!
Anja

Autor: Wolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ES ist so eine Sache, mit vorgefertigten Dingen.....
Erstens muß man sie verstehen und nachvollziehen können und Zweitens
lernt man dabei nichts.
Codeschnipsel gibt's zu Hauf - z. B. unter "Codesammlung".
Aber da schlägt dann gaaaanz schnell der Fehlerteufel zu - wegen meiner
anfänglichen Bemerkung.......
Das Beste ist, sich aus eigenen oder nachvollzogenen Codes eine eigene
Bibliothek anzulegen und die dann, angepasst auf das Projekt, zu
verwenden.

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soo langsam ist "MUL AB" nun auch wieder nicht (4 Zyklen).

Und *4 ist auch nur dann schneller, wenn man kein 16 Bit Ergebnis
braucht, d.h. die Zahl <64 ist:

ADD A, ACC ;*2
ADD A, ACC ;*2

= 2 Zyklen

/ 4 dauert 3 Zyklen:

RRC A
RRC A
ANL A, #03Fh


Peter

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Soo langsam ist "MUL AB" nun auch wieder nicht

Kommt auf den Prozessor an. Der 8086 hat für eine Multiplikation unter
Anwendung von "MUL" mindestens 70 Takte (8-bit Multiplikation)
gebraucht, das Schieben hingegen war nach 2 Takten erledigt.

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein ganz herzliches DANKE!!
Eine vielleicht etwas blöde Frage noch: Assembler, ist das für jeden µC
gleich, oder gibt es da gravierende Unterschiede? Wir haben nämlcih nur
den 80C535.
Das war in Sachen Theorie vorerst die letzte Frage. Jetzt sind
Programme dran (C und Assembler).
Grüße
Anja

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Innerhalb einer µC-Familie sind die Befehle i. d. R. gleich, es können
jedoch mit zunehmender Leistungsfähigkeit der µC zusätzliche Befehle
hinzu kommen. Wenn du dann allerdings zu einem anderen Hersteller
wechselst, kriegst du schonmal die Krise. Z. B. der Befehlssatz der
PICs von Microchip ist teilweise schon sehr schräg. Da könnte man
meinen, man hat noch nie in Assembler programmiert. Vom 80535 habe ich
keine Ahnung, aber ich glaube der gehört zu den 8051er und deren
Befehlssatz ist wieder anders.

Gruß
Thorsten

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieder anders?
Also hilft es mir nichts, ein Buch wie zB "Assembler ge-packt" zu
holen für meinen 8051er?

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde dir empfehlen etwas zu kaufen, das den Assembler eures
Mikrocontrollers behandelt. Da dürfte es massenhaft Literatur geben.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.