La copia de memoria a memoria puede considerarse un desperdicio para algunos (como se mencionó en un comentario anterior), pero se realiza todo el tiempo, por ejemplo, las funciones memcpy y an md strcpy en C programas. También memset, para llenar la memoria y strcmp para comparar cadenas.
Creo que lo más cerca que encontrarás de una memoria de movimiento de una sola instrucción es el MOVS (familia de cadenas de movimiento) en el conjunto de instrucciones 8086.
En todos los casos, la dirección de origen se configura en los registros [DS: SI] o [DS: ESI], y la dirección de destino se configura en los registros [ES: DI] o [ES: EDI].
Una vez configurado, el instrucción individual MOVSB copia el byte en [DS: SI] o [DS: ESI] a [ES: DI] o [ES: EDI], y luego aumenta o disminuciones (según el indicador de dirección: aumenta si la marca está desactivada, disminuye si está configurada) SI y DI (o ESI y EDI).
Lo que hace que esta instrucción sea tan poderosa es que puede ser precedida por una instrucción REP, que repite la siguiente instrucción la cantidad de veces contenida en el registro CX. Las variaciones permiten que se termine antes en función de un indicador cero (gee, como el cero al final de una cadena C).
Así que puedes pensar que el combo REP / MOVSB es una implementación de dos instrucciones de la parte de bucle de la función memcpy. Por supuesto, el trabajo todavía está siendo realizado por la CPU, no por el controlador de memoria en sí, pero es mucho más simple que tener que escribir un bucle de instrucciones.
Además de MOVSB, existen otras variaciones para copiar palabras (2 bytes) y palabras dobles (4 bytes) a la vez.
También hay una instrucción STOS que, con el prefijo REP, almacena un valor constante en la memoria (adivina qué, memset) y el combo CMPS / REP que compara dos áreas de la memoria (es decir, strcmp).
Como alguien señaló, en los procesadores con DMA, puede configurar los registros de origen, destino y conteo y luego dejar que el DMA haga el trabajo como el combo REP / MOVSB descrito anteriormente, para realizar una función de memoria sin el procesador. estar involucrado. Pero no creo que los DMA tengan la capacidad de detener una copia en un byte cero (corríjame si estoy equivocado), por lo que no podrían hacer una copia de seguridad. Lo mismo para memset y strcmp.