¿Por qué la instrucción ACALL es una instrucción de 2 bytes en el microcontrolador 8051?

-1
  

La dirección de destino de la subrutina debe estar dentro de la dirección de 2K bytes   porque solo se utilizan 11 bits de los 2 bytes para la dirección.

(Fuente: enlace )

Entonces, ¿cómo es la instrucción ACALL una instrucción de 2 bytes? Debe ser una instrucción de 3 bytes, es decir, 1 byte para opcode + 2 bytes para la dirección de destino

    
pregunta Palak Jain

2 respuestas

2
  

Entonces, ¿cómo es la instrucción ACALL una instrucción de 2 bytes? Debe ser una instrucción de 3 bytes, es decir, 1 byte para opcode + 2 bytes para la dirección de destino

La codificación de instrucciones para ACALL es un poco complicada. Consta de dos bytes en el formato:

/----- first byte ----\   /---- second byte ----\
A10 A9 A8 1  0  0  0  1   A7 A6 A5 A4 A3 A2 A1 A0

No hay un solo "código de operación" de un byte que corresponda a ACALL . Hay 8 bytes líderes diferentes que pueden ser parte de una codificación ACALL (11h, 31h, 51h, 71h, B1h, D1h, F1h), ya que los tres bits superiores del primer byte contienen los bits altos de la dirección.

    
respondido por el duskwuff
1

En el último párrafo del enlace que ha proporcionado, es muy específico:

  

La única diferencia es que la dirección de destino para LCALL puede estar en cualquier lugar dentro del espacio de direcciones de 64K bytes del 8051. La dirección de destino de ACALL debe estar dentro del rango de 2K bytes. 8051 comercializado por diferentes compañías, la ROM en chip es tan baja como 1K bytes. En este caso, el uso de ACALL en lugar de LCALL puede ahorrar la cantidad de bytes del espacio de la ROM del programa.

    
respondido por el KingDuken

Lea otras preguntas en las etiquetas