El microcontrolador AT89S52 de ATMEL forma parte de la familia 8051 creada por Intel hace unas décadas. Éste es un microcontrolador de 8 bits, misma cantidad de bits que utiliza para definir sus instrucciones, o sea que cuenta con 255 instrucciones más una que no está definida. El 8051 cuenta con 8K bytes de memoria Flash para código. El 8051 es capaz de direccionar hasta 64K bytes de memoria para código en páginas de 2K bytes. Por lo que se deduce que puede usar HASTA 32 PAGINAS (desde la 0 a la 31).
Las instrucciones ACALL y AJMP (de 2 bytes) son las únicas que utilizan el direccionamiento absoluto. Este direccionamiento solo es posible realizarlo DENTRO DE LA MISMA PAGINA DE 2K. Por ejemplo:
En la imagen de arriba serían válidos los 2 primeros bloques como paginas de 2K. Puede verse que la primera página (página 0) va desde 0000H hasta 07FFH y la segunda desde 0800H hasta 0FFFH.
Las instrucciones ACALL y AJMP utilizan los primeros 5 bits más significativos de la dirección destino a "saltar" para definir la página sobre la que están trabajando. Por ejemplo, la etiqueta AQUI representa una instrucción en la dirección 0F46H.
AJMP AQUI
Podemos ver que la dirección destino en binario es 0000 1111 0100 0110.
Tomando los primeros 5 bits deducimos que la página en la que estamos trabajando es la página 1 (0000 1) cuyas direcciones van desde 0800H hasta 0FFFH.
La duda es que en el mapa de los códigos de operaciones del 8051, las instrucciones ACALL solo están definidas para la página 0 hasta la página 7 es decir sus códigos de operación son
AJMP(P0) 01H
ACALL(P0) 11H
AJMP(P1) 21H
ACALL(P1) 31H
AJMP(P2) 41H
ACALL(P2) 51H .... HASTA
AJMP(P7) E1H
ACALL(P7) F1H
De estos OP codes se utilizan solo los primeros 5 bits para armar los bytes de instrucción ACALL (O AJMP). De hecho el modo de direccionamiento absoluto es así:
aaa(+ 5 primeros bits del OP CODE)aaaaaaaa
se puede ver que son 16 bits (2 bytes) y las letras a' representan los primeros 11 bits de la dirección de destino, que en nuestro ejemplo serían: 111 0100 0110. Los 5 bits mas significativos están como implicitos porque se suponen estan en la misma página de la dirección origen desde donde se llamó la instrucción o de hecho, el mismo opcode (en nuestro ejemplo es 31H) nos indica en cual página se está trabajando.
entonces ¿No es válido utilizar una página superior a la 7 en un programa que yo escriba dado que no están definidas en el set de operaciones? Pero entonces ¿Por qué se da espacio para utilizar hasta 5 bits (justos los necesarios para combinarlos y usar hasta 32 paginas) en el direccionamiento absoluto para el 8051?
Las instrucciones ACALL y AJMP (de 2 bytes) son las únicas que utilizan el direccionamiento absoluto. Este direccionamiento solo es posible realizarlo DENTRO DE LA MISMA PAGINA DE 2K. Por ejemplo:

En la imagen de arriba serían válidos los 2 primeros bloques como paginas de 2K. Puede verse que la primera página (página 0) va desde 0000H hasta 07FFH y la segunda desde 0800H hasta 0FFFH.
Las instrucciones ACALL y AJMP utilizan los primeros 5 bits más significativos de la dirección destino a "saltar" para definir la página sobre la que están trabajando. Por ejemplo, la etiqueta AQUI representa una instrucción en la dirección 0F46H.
AJMP AQUI
Podemos ver que la dirección destino en binario es 0000 1111 0100 0110.
Tomando los primeros 5 bits deducimos que la página en la que estamos trabajando es la página 1 (0000 1) cuyas direcciones van desde 0800H hasta 0FFFH.
La duda es que en el mapa de los códigos de operaciones del 8051, las instrucciones ACALL solo están definidas para la página 0 hasta la página 7 es decir sus códigos de operación son
AJMP(P0) 01H
ACALL(P0) 11H
AJMP(P1) 21H
ACALL(P1) 31H
AJMP(P2) 41H
ACALL(P2) 51H .... HASTA
AJMP(P7) E1H
ACALL(P7) F1H
De estos OP codes se utilizan solo los primeros 5 bits para armar los bytes de instrucción ACALL (O AJMP). De hecho el modo de direccionamiento absoluto es así:
aaa(+ 5 primeros bits del OP CODE)aaaaaaaa
se puede ver que son 16 bits (2 bytes) y las letras a' representan los primeros 11 bits de la dirección de destino, que en nuestro ejemplo serían: 111 0100 0110. Los 5 bits mas significativos están como implicitos porque se suponen estan en la misma página de la dirección origen desde donde se llamó la instrucción o de hecho, el mismo opcode (en nuestro ejemplo es 31H) nos indica en cual página se está trabajando.
entonces ¿No es válido utilizar una página superior a la 7 en un programa que yo escriba dado que no están definidas en el set de operaciones? Pero entonces ¿Por qué se da espacio para utilizar hasta 5 bits (justos los necesarios para combinarlos y usar hasta 32 paginas) en el direccionamiento absoluto para el 8051?
Última edición: