en si mandar a imprimir(por imtpresora) el contenido de la pantalla no es muy dificil con la ayuda de un servicio de DOS es menos complicado(siempre y cuando el DOS no se haga problemas con ciertas impresora por decir impresorascon puertos USB),de modo que mandamos a imprimir byte por byte y los byte que mandamos a imprimir podemos leer en un arreglo de memria o hacerlo de la mismoa forma byte por byte,leyendo del direccinde memria de la pantalla ubicada en 0b800h(cada caracter de la pantalla esta representado por 2 bytes en memoria el codigo ASCII y su propiedad color y color de fondo), para esto hay que tener en cuenta lagunos detalles como la resolucion de la pantalla(modo texto,eje:80x25), el orden de la impresion no aumenta tanto la dificultad, haber que tal esto:
;;IMPRIMIR PANTALLA EN MODO TEXTO DE 40x80
mov cx,200;;80x25;;# de caracteres a imprimir
mov ax,0b800H;;direccion de la pantalla[segmento]
mov es,ax
xor si,si;;puntero a memoria de pantalla[desplazamiento]
G1: mov dx,es:[si];;DH->propiedad vvvv DL->caracter
mov ah,5 ;; servicio para imprimir DL en la imresora
int 21h
add si,2 ;; la lectura de la memoria se hace de 2 en 2
loop G1
eso es basicamente, ahora se puede jugar con el orden de impresion; pero el hecho de como hacer dicha impresion fue la principal duad en este tema pues si se va a sustituir la INT 5h por otra interrupcion se debe alterar el vector de interrupcion......
aqui le dejo el codigo funete + el ejecutable, este se ejecuta e imprime no hece nada con el vector de interrupcion.