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
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
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. ...
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
Ich wollte ja nur einen Denkanstoß geben aber nun sind die Hausaugaben doch gemacht. ...
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
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.
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
>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.
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
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
Wieder anders? Also hilft es mir nichts, ein Buch wie zB "Assembler ge-packt" zu holen für meinen 8051er?
Ich würde dir empfehlen etwas zu kaufen, das den Assembler eures Mikrocontrollers behandelt. Da dürfte es massenhaft Literatur geben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.