Hola Flavio! Cómo estás?
El programa tiene un problemita relacionado con lo que decís. La instrucción MOV DX, ES:[BX] carga 16 bits (2 bytes) desde la memoria al registro DX. En la primer iteración copiás los bytes 0 y 1, en la siguiente iteración copiás los bytes 1 y 2, en la siguiente iteración copiás los bytes 2 y 3, y así sucesivamente. Como se pude ver, la mayoría de los bytes los terminás moviendo dos veces. Eso no es terrible, pero el programa sí funciona mal para la última transferencia, porque cuando ejecutás la última iteración, se copian los bytes N y N+1, cuando el último debería ser el N.
La solución para esto es utilizar registros de 8 bits y realizar el movimiento de 1 byte en cada iteración del FOR. Es decir, cambiar:
MOV DL, ES:[BX]
...
...
MOV ES:[BX], DL
El resto del programa está muy bien!
Saludos,
Federico
El programa tiene un problemita relacionado con lo que decís. La instrucción MOV DX, ES:[BX] carga 16 bits (2 bytes) desde la memoria al registro DX. En la primer iteración copiás los bytes 0 y 1, en la siguiente iteración copiás los bytes 1 y 2, en la siguiente iteración copiás los bytes 2 y 3, y así sucesivamente. Como se pude ver, la mayoría de los bytes los terminás moviendo dos veces. Eso no es terrible, pero el programa sí funciona mal para la última transferencia, porque cuando ejecutás la última iteración, se copian los bytes N y N+1, cuando el último debería ser el N.
La solución para esto es utilizar registros de 8 bits y realizar el movimiento de 1 byte en cada iteración del FOR. Es decir, cambiar:
MOV DL, ES:[BX]
...
...
MOV ES:[BX], DL
El resto del programa está muy bien!
Saludos,
Federico