Hace mucho tiempo que no uso 8048, y no tengo uno disponible en este momento, así que perdóneme si está un poco incompleto ...
Al igual que el 8051 que vino después, el 8048 tiene varios espacios de direcciones. La dirección 0 de Memoria de datos es una parte físicamente diferente de la dirección de Memoria de programa 0. El 8031/8032/8051/8052 posterior reemplazó a MOVP
y MOVP3
( Instrucciones para mover desde el programa) con una sola instrucción MOVC
(mover desde código) y un puntero de datos de 16 bits. Pero el 8048 solo tiene registros de 8 bits, por lo que tiene que hacer un trabajo adicional para determinar la dirección completa en memoria de programa .
La instrucción 8048 MOVP
es similar a la última instrucción 8051 MOVC
, cargando un valor constante desde una ubicación en el espacio de direcciones Memoria de programa . Esto es útil para seleccionar un valor de una tabla constante de valores.
La Memoria de programa está organizada en varias páginas, comenzando con la página 0. Para secuencias cortas de datos, como cargar una cadena "hola mundo", era una práctica común colocar los datos constantes inmediatamente después la subrutina, de modo que los datos constantes estén en la misma página memoria de programa que la subrutina que requiere esos datos. La instrucción MOVP
se usa para acceder a esos datos.
Pero para tablas más grandes, o para tablas a las que se deba acceder desde cualquier subrutina, se usó la instrucción MOVP3
. MOVP3
es como MOVP
, excepto que los datos provienen de la página 3 del espacio de direcciones de memoria de programa .
La instrucción
MOVP
forma la dirección completa en memoria de programa combinando los 8 bits del registro A con la parte superior de la dirección desde donde se ejecuta la instrucción MOVP
. Puesto en términos de una expresión en lenguaje C, la dirección de memoria de programa sería ((programCounterAddress &~ 0x0FF) | regA_before)
Luego, el valor leído de esa dirección de memoria de programa se convierte en el nuevo valor del registro A.
La instrucción
MOVP3
forma la dirección completa en memoria de programa al combinar los 8 bits del registro A con la parte superior de la dirección de la página 3, 0x0300, independientemente de la dirección que indique MOVP3
La instrucción en sí misma se está ejecutando desde. Luego, el valor leído desde memoria de programa dirección (0x300 | regA_before)
se convierte en el nuevo valor del registro A.