Augusto,
Tenes algunos problemas en el movimiento de memoria.
Por un lado, a priori deberias mover bytes no palabras, podrías utilizar DL por ejemplo en vez de DX.
Luego estás generando mal la direccion de destino. Fijate que pusiste como desplazamiento BX+SI, pero SI arranca con el desplazamiento de la "fuente" (AX), seguramente quisiste usar DI allí.
Los comentarios de los MOV que mueven memoria estan mal, no estas copiando lo que está en ES:AX a DX ni lo que estaba en ES:AX a ES:BX porque te estas "moviendo" por el buffer.
Por otro lado, este problema se puede intentar resolver "bien-bien" en el sentido de que funcione incluso si los buffers están solapados. Te sugiero en todo caso que armes primero el alto nivel y luego lo ensambles a mano a 8086; y también es buena idea que lo pruebes en el ArquiSim, allí seguramente hubieras identificado algunos de los problemas que mencioné.
Saludos,
Gustavo