MODEL SMALL .STACK 200 .DATA FTabulka db 'TABULKA.TAB',0 ;nazev prev. tabulky FVstup db 'VSTUP.TXT',0 ;nazev vstupniho fajlu FVystup db 'VYSTUP.TXT',0 ;nazev vystupniho fajlu FH1 dw 0 ;filehandle vstupniho FH2 dw 0 ;filehandle vystupniho Buffer db 30000 DUP (0) ;buffer pro nacitana data MTabulka db 256 DUP (0) .CODE START: mov ax, seg FTabulka ;Nejdrive nastavim DS mov ds, ax mov es, ax ;A ES mov ax, 3D00h ;Otevreni souboru, read only mov dx, offset FTabulka ;DS:DX ukazuje na nazev fajlu int 21h mov bx, ax ;filehandle do bx push bx ;uschovat na pozdeji mov ah, 3Fh ;cteni souboru mov cx, 0FFh ;FF bajtu (256) mov dx, offset MTabulka ;DS:DX kam nacist int 21h pop bx ;vyndat uschovane filehandle mov ah, 3Eh ;zavreni souboru int 21h mov ax, 3D00h ;Otevreni souboru, read only mov dx, offset FVstup ;DS:DX ukazuje na nazev fajlu int 21h mov FH1, ax ;schovat filehandle mov ah, 3Ch ;Vytvoreni souboru mov cl, 0 ;Zadny specialni atribut mov dx, offset FVystup ;DS:DX jmeno vyrabeneho fajlu int 21h mov FH2, ax ;Schovat filehandle Smycka: mov bx, FH1 ;filehandle do bx mov ah, 3Fh ;cteni souboru mov cx, 30000 ;30000 bajtu, cely buffer mov dx, offset Buffer ;DS:DX kam nacist int 21h push ax ;ulozit kolik bajtu bylo nacteno cld mov bx, offset MTabulka ;Ukazatel do tabulky mov si, offset Buffer ;Ukazatel do bufferu (cteni) mov di, si ;Ukazatel do bufferu (zapis) mov cx, ax ;Kolik bajtu budu prevadet xor ah, ah ;Znuluju AH Kolco: push bx ;Schovam si zacatek tabulky lodsb ;AL = [DS:SI] add bx, ax ;Posunu se v tabulce mov al, [ds:bx] ;Prevedu stosb ;Zapisu zpatky do bufferu pop bx ;Zase ukazuji na zacatek tab. loop Kolco ;a dalsi bajt bafru mov ah, 40h ;Zapis fajlu mov bx, FH2 ;filehandle pop cx ;kolik bajtu zapsat push cx ;jeste se to bude hodit mov dx, offset Buffer ;Kde jsou zapisovana data int 21h pop ax ;vytahnu si pocet nactenych bajtu cmp ax, 30000 ;byl to cely bafr? jnb Smycka ;a furt dokola, cely soubor mov ah, 3Eh ;zavreni fajlu mov bx, FH1 ;filehandle int 21h mov ah, 3Eh ;zavreni fajlu mov bx, FH2 ;filehandle int 21h mov ax, 4c00h ;Konec programu, navrat do DOSu int 21h END START výheň