8048 instrucción movp

-1

Estoy tratando de entender la instrucción MOVP y MOVP3 del microcontrolador 8048. Ahora en los manuales no se da ningún ejemplo específico, claro. ¿Cuáles son las funciones de estas instrucciones?

  • MOVP A, @A - > mueva los datos del programa a la página actual en el acumulador, ¿qué datos de ubicación se copian aquí?
  • MOVP3 A,@A - > Aquí también lo mismo es la pregunta?

Y en el manual se da --- "instrucciones como MOVP y MOVP3 permiten un fácil acceso a las tablas de 'búsqueda' de datos". Ahora cual es el significado de eso? Tabla de búsqueda: todas las entradas deben ser necesarias, pero aquí solo se copia una ubicación (?).

    
pregunta coderredoc

1 respuesta

0

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.

    
respondido por el MarkU

Lea otras preguntas en las etiquetas