¿Cuál es la principal diferencia entre MOVC y MOVX en lenguaje ensamblador para un microcontrolador 8051?

MOVC carga el acumulador con un byte del espacio de código, memoria de programa.

Hay dos formas de la instrucción MOVC.

MOVC A, @ A + PC

Este es probablemente el uso más común. El número de 8 bits en A se agrega al número de 16 bits en el contador del programa, y ​​el byte en esta dirección se copia en A. Esto es muy útil para las tablas de búsqueda que se ensamblan en su lugar después de esta instrucción. Por ejemplo,

INC A
MOVC A, @ A + PC
JUBILADO
DB ‘0’, ‘1’, ‘2’, ‘3’, ‘4’

Esto toma un número binario 0..4 en A y lo reemplaza con ASCII 0..4 de la tabla en la línea 4. La instrucción inicial “inc” es necesaria para pasar por encima de la instrucción RET; de lo contrario, si A fuera 0x00, el byte devuelto sería el código de operación para RET.

La otra forma es

MOVC A, @ A + DPTR

Esto funciona exactamente de la misma manera que con el contador del programa, excepto que DPTR proporciona la dirección base de 16 bits.

MOVX carga el acumulador con un byte del espacio de datos de la memoria externa, o al revés. También hay dos formas de esta instrucción y, a diferencia de la instrucción MOVC, puede transferir datos en cualquier dirección.

MOVX ,

MOVX A, @ Ri carga el acumulador con el byte de memoria de datos externo direccionado por el número de 8 bits en Ri. ‘Ri’ significa registro de índice, que puede ser R0 o R1.

MOVX A, @ DPTR carga el acumulador con un byte de memoria de datos externo dirigido por el número de 16 bits en DPTR.

MOVX @ Ri, A y
MOVX @ DPTR, A

… hacer exactamente lo mismo a la inversa [matemáticas]
[/matemáticas]

La instrucción MOVX asume que la memoria externa está conectada de una manera particular y cambia las configuraciones del puerto. No debe usar una instrucción MOVX a menos que comprenda completamente la forma en que el 8051 está cableado en el circuito.

La memoria interna del 8051 se divide en dos partes: una parte para almacenar el código ensamblado (el conjunto de instrucciones) y la otra para almacenar datos.

MOVC almacenará sus datos en la memoria de código.

MOV almacenará sus datos en la memoria de datos.

MOVX almacenará sus datos en la memoria externa (dado que su microcontrolador está conectado con una memoria externa)

Movc significa datos mov de la memoria de código y movx significa datos mov de la memoria externa.