2 votos

Multiplicación de 32 bits sin signo en ensamblador AVR

¿Cómo puedo realizar una multiplicación por 2 de la cantidad de 32 bits sin signo en los registros r18:r19:r20:r21 donde r18 es el byte más significativo?

Mi respuesta es la siguiente: rol r18; rol r19; rol r20; rol r21 .

Mi proceso de pensamiento es que, dado que se trata de un número sin signo, podemos excluir el uso de ASL ya que no hay carry out en MSB. Pero no lo he hecho bien; ¿puedo saber qué parte está mal?

5voto

Bernd Puntos 61

Para hacer esto correctamente para multiplicar un valor de 4 bytes por dos, tienes que asegurarte de que el bit inferior del byte inferior tiene un '0' desplazado. En el conjunto de instrucciones del AVR esto se puede lograr con la siguiente secuencia de instrucciones asumiendo un valor en r18:r19:r20:r21.

CLC
ROL R21
ROL R20
ROL R19
ROL R18

Nótese la necesidad de desplazar primero el byte bajo y luego propagar los bits a través del carry para el resto de los desplazamientos. La primera instrucción CLC se encarga de asegurar que el LSB de R21 termine siendo '0'.

0voto

Scott Hoppe Puntos 66

Ahorra una instrucción. LSL se desplaza a la izquierda insertando un bit cero en el LSBit de R21.

LSL R21
ROL R20
ROL R19
ROL R18

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X