Convirtiendo el ensamblaje de AVR a código de máquina: ¿direccionar registros?

4

En el ensamblaje de AVR: quiero trabajar en la representación del código de máquina de lo siguiente:

ANDI r18,$10

Sé que el código de operación para ANDI es

0010 KKKK dddd KKKK

Y sé que r18 es el registro de destino (Rd), y que $10 (16) es KKKKKKKKK. Mi intuición cree que debo reemplazar dddd con 18 , pero eso no es posible con solo 5 bits (a menos que me esté perdiendo algo aquí ...) ya que 18 en binario es 10010 .

Estoy pensando que simplemente reemplazo KKKK KKKK con 0001 0000 , pero simplemente no veo cómo se supone que debo abordar el registro 18 con solo 4 bits.

El resumen del conjunto de instrucciones dice que r16 ... r31 se pueden representar con dddd , lo que creo que también significa 4 bits, así que sé que tengo algo horriblemente incorrecto.

Cualquier ayuda sería genial.

Referencia: enlace - página 20

    

1 respuesta

4

Tiene el código de operación para ANDI incorrecto, es 0111 KKKK dddd KKKK. Al usar el ensamblador, obtengo 0x7120 como el código de máquina para ANDI r18, $ 10, que es 0111 0001 0010 0000.

0010 para dddd es 2, que representa r18, porque es el tercer registro de r16 a r31. Solo los 16 registros superiores son válidos para la instrucción ADDI. 0000 es r16, 0001 es r17 y 0010 es r18.

    
respondido por el Leon Heller

Lea otras preguntas en las etiquetas