Frage:
Atmel AVR Assemblersprache multipliziert mit 2
Sim
2013-05-04 14:22:00 UTC
view on stackexchange narkive permalink

Ich versuche, eine vorzeichenlose 32-Bit-Zahl mit 2 über die Register r18 , 19 , 20 und 21 zu multiplizieren , wobei r18 das höchstwertige Byte ist. Dies ist mein Code:

  ldi r18, 0x03ldi r19, 0x00ldi r20, 0x00ldi r21, 0x00lsl r18ror r19ror r20ror r21  

Ich habe gerade 3 als einfaches Beispiel verwendet, damit ich die Ausgabe kenne. Ich kann nicht herausfinden, ob es für den Rest der Register ror oder rol ist. Für eine 16-Bit-Nummer würden Sie ror verwenden, um einen Übertrag zu berücksichtigen. Gilt dies auch für vorzeichenlose 32-Bit-Nummern?

Soll ich ror verwenden? oder rol ?

Das Ergebnis wäre "0x06000000", daher werden "r19" bis "r21" nicht verwendet. `0x03000000` ist daher nicht wirklich nützlich zum Testen. Verwenden Sie stattdessen "0x42424242", von dem Sie stattdessen auch die Ausgabe kennen. Sind Sie auch sicher, dass "r18" das MSB ist? Ich bin mit AVR Assembly nicht vertraut, aber es sieht so aus, als wäre es das LSB.
@CamilStaps Ja, ich bin auch nicht besonders gut mit AVR Assembly. Mir wurde gesagt, dass R18 das MSB ist. Vielleicht sollte es ganz unten stehen. Und ja, ich weiß, dass diese Register nicht verwendet werden. Ich wollte nur eine einfache Nummer, also würde ich nicht. Ich muss es nicht berechnen
Wir werden sehen, was die AVR-Experten sagen. Übrigens ist das Multiplizieren von "0x42424242" mit zwei auch ziemlich einfach, wäre nur "0x84848484";)
@CamilStaps Ja, ich denke, ich bin ein wenig verwirrt, wenn ich über die 4 Register lese, weil es mir nur eine hexadezimale Darstellung gibt und ich 4 von ihnen addieren muss, ist alles. (Ich denke, bin im Moment ein bisschen Müll bei der Montage: s)
Einer antworten:
jippie
2013-05-04 15:18:24 UTC
view on stackexchange narkive permalink

Weitere Informationen finden Sie im Dokument AVR Instruction Set.

Für das niedrigstwertige Byte möchten Sie eine LSL - Logical Shift Left . Verschieben Sie eine 0 in das niedrigstwertige Bit und merken Sie sich das höchste Bit im Carry-Flag.

Dann möchten Sie für die nachfolgenden höheren Bytes eine ROL - Nach links drehen Tragen Sie . Sie verschieben das gespeicherte Bit vom Übertrag in das rechte (niedrigstwertige) Bit, und das Bit, das auf der oberen Seite verschoben wird, wird in den Übertrag verschoben.

Sie haben R18 als LSB und R21 als MSB verwendet. Daran ist nichts auszusetzen.

times2

Lesen Sie das obige Bild von oben rechts (LSB wird zuerst verarbeitet) bis unten links.

Ein Bild sagt mehr als tausend Worte, eine schöne Erklärung.
@jippie bedankt sich bei einer Million, hat wirklich geholfen, Prost! Sind Sie sicher über das LSB und MSB? Ich schwöre, dass MSB ganz oben steht, aber vielleicht habe ich das aus meinen Notizen falsch verstanden
Was meinst du mit "MSB geht an die Spitze"?
@jippie nvm Ich habe gerade alles geklärt, ich dachte, der mSB hat lsl'd, aber mir ist klar, warum es jetzt nicht so ist, danke!


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...