Multiplicado sin firmar de 32 bits en el ensamblaje de AVR

2

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

Mi respuesta es esta: rol r18; rol r19; rol r20; rol r21 .

Mi proceso de pensamiento es que, dado que se trata de un número sin firma, podemos excluir el uso de ASL ya que no hay ninguna actividad en MSB. Pero no lo entendí bien; ¿Puedo saber qué parte es incorrecta?

    
pregunta Jay Sun

1 respuesta

5

Para hacer esto correctamente, para multiplicar un valor de 4 bytes por dos, debe asegurarse de que el bit bajo del byte bajo obtenga un '0' cambiado en él. En el conjunto de instrucciones 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

Tenga en cuenta la necesidad de desplazar primero el byte bajo y luego propagar los bits a través del acarreo durante el resto de los turnos. La primera instrucción CLC se encarga de asegurar que el LSB de R21 termine siendo '0'.

    
respondido por el Michael Karas

Lea otras preguntas en las etiquetas