Lenguaje ensamblador Atmel AVR multiplicando por 2

Estoy tratando de multiplicar un número sin signo de 32 bits por 2 en los registros r18, y 19, siendo el byte más significativo. Este es mi código:2021r18

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

Solo usé 3 para un ejemplo fácil, así que sabré el resultado. No puedo determinar si es roro rolpara el resto de los registros. Para un número de 16 bits que usaría rorpara contabilizar un acarreo, ¿esto también se aplica a números de 32 bits sin signo?

¿Se supone que debo usar roro rol?

El resultado sería 0x06000000, por lo que r19through r21no se utilizará. 0x03000000por lo tanto, no es realmente útil para probar. En su lugar, use algo como 0x42424242, del cual también conocería la salida. Además, ¿estás seguro de que r18es el MSB? No estoy familiarizado con AVR Assembly, pero parece que es el LSB.
@CamilStaps sí, tampoco soy muy bueno con AVR Assembly, me dijeron que r18 es el MSB, tal vez debería estar en la parte inferior, y sí, sé que esos registros no se usan, solo quería un número fácil, así que lo haría no hay que calcularlo
Veremos qué dicen los expertos en AVR. Por cierto, multiplicar 0x42424242por dos también es bastante fácil, sería solo 0x84848484;)
@CamilStaps Sí, supongo, me confundo un poco al leer los 4 registros, porque solo me dará una representación hexadecimal y tendré que agregar 4 de ellos, eso es todo. (Creo que soy un poco basura en el montaje en este momento: s)

Respuestas (1)

Consulte el documento Conjunto de instrucciones AVR .

Para el byte menos significativo, desea un archivo LSL – Logical Shift Left. Desplace a 0en el bit menos significativo y recuerde el bit más alto en la bandera Carry.

Luego, para los bytes superiores subsiguientes, desea un archivo ROL – Rotate Left trough Carry. Cambia el bit recordado del acarreo al bit derecho (menos significativo) y el bit que se desplaza hacia afuera en el lado alto se empuja al acarreo.

Elegiste usar R18 como LSB y R21 como MSB, no hay nada de malo en eso.

veces2

Lea la imagen de arriba desde la parte superior derecha (LSB se procesa primero) hasta la parte inferior izquierda.

Una imagen dice más que mil palabras, buena explicación.
@jippie un millón de gracias, realmente ayudó, ¡salud! ¿Estás seguro sobre el LSB y el MSB? Te juro que el MSB está en la parte superior, pero tal vez lo entendí mal de mis notas.
¿Qué quiere decir con 'MSB va en la parte superior'?
@jippie nvm acabo de arreglar todo, pensé que el mSB tenía lsl, pero ahora me doy cuenta de por qué no, ¡gracias!