lenguaje ensamblador AVR de Atmel multiplicado por 2

5

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

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é la salida. No puedo averiguar si es ror o rol para el resto de los registros. Para un número de 16 bits, usaría ror para dar cuenta de un acarreo, ¿esto también se aplica a los números de 32 bits sin firmar?

¿Se supone que debo usar ror o rol ?

    
pregunta Sim

1 respuesta

12

Consulte el documento Conjunto de instrucciones AVR .

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

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

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

Lea la imagen anterior desde la parte superior derecha (LSB se está procesando primero) hasta la parte inferior izquierda.

    
respondido por el jippie

Lea otras preguntas en las etiquetas