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:20
21
r18
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 ror
o rol
para el resto de los registros. Para un número de 16 bits que usaría ror
para contabilizar un acarreo, ¿esto también se aplica a números de 32 bits sin signo?
¿Se supone que debo usar ror
o rol
?
Consulte el documento Conjunto de instrucciones AVR .
Para el byte menos significativo, desea un archivo LSL – Logical Shift Left
. Desplace a 0
en 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.
Lea la imagen de arriba desde la parte superior derecha (LSB se procesa primero) hasta la parte inferior izquierda.
usuario17592
0x06000000
, por lo quer19
throughr21
no se utilizará.0x03000000
por lo tanto, no es realmente útil para probar. En su lugar, use algo como0x42424242
, del cual también conocería la salida. Además, ¿estás seguro de quer18
es el MSB? No estoy familiarizado con AVR Assembly, pero parece que es el LSB.Sim
usuario17592
0x42424242
por dos también es bastante fácil, sería solo0x84848484
;)Sim