Atmel AVR Assemblersprache multipliziert mit 2

Ich versuche, eine 32-Bit-Zahl ohne Vorzeichen über die Register r18, 19, 20und 21, r18die das höchstwertige Byte sind, mit 2 zu multiplizieren. Das ist mein Code:

ldi r18, 0x03
ldi r19, 0x00
ldi r20, 0x00
ldi r21, 0x00
lsl r18
ror r19
ror r20
ror r21

Ich habe gerade 3 für ein einfaches Beispiel verwendet, damit ich die Ausgabe kenne. Ich kann nicht herausfinden, ob es roroder rolfür den Rest der Register ist. Gilt dies für eine 16-Bit-Zahl, die Sie rorzur Berücksichtigung eines Übertrags verwenden würden, auch für vorzeichenlose 32-Bit-Zahlen?

Soll ich roroder verwenden rol?

Das Ergebnis wäre 0x06000000, also wird r19through r21ungenutzt bleiben. 0x03000000ist daher zum Testen nicht wirklich sinnvoll. Verwenden 0x42424242Sie stattdessen etwas wie , von dem Sie auch die Ausgabe kennen würden. Bist du dir sicher, dass r18es sich um MSB handelt? Ich bin mit AVR Assembly nicht vertraut, aber es sieht so aus, als wäre es das LSB.
@CamilStaps ja, ich bin auch nicht so gut mit AVR Assembly, mir wurde gesagt, dass r18 das MSB ist, vielleicht sollte es ganz unten sein, und ja, ich weiß, dass diese Register unbenutzt sind, ich wollte nur eine einfache Nummer, also würde ich es tun muss man nicht berechnen
Mal sehen, was die AVR-Experten sagen. Übrigens, Multiplizieren 0x42424242mit zwei ist auch ganz einfach, wäre nur 0x84848484;)
@CamilStaps Ja, ich denke, ich werde ein wenig verwirrt, wenn ich über die 4 Register lese, weil es mir nur eine Hex-Darstellung gibt und ich 4 davon addieren muss, ist alles. (Ich glaube, bin im Moment etwas faul beim Zusammenbauen :s)

Antworten (1)

Siehe AVR-Anweisungssatz- Dokument.

Für das niedrigstwertige Byte möchten Sie eine LSL – Logical Shift Left. Verschieben Sie a 0in 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 – Rotate Left trough Carry. Sie verschieben das erinnerte Bit vom Übertrag in das rechte (niedrigstwertige) Bit und das Bit, das auf der hohen Seite verschoben wird, wird in den Übertrag geschoben.

Sie haben sich entschieden, R18 als LSB und R21 als MSB zu verwenden, daran ist nichts auszusetzen.

mal2

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

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