home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / softcrc / tools / silogex.lzh / SILOGEX.ASM < prev    next >
Encoding:
Assembly Source File  |  1997-01-12  |  8.8 KB  |  427 lines

  1. comment $
  2.  
  3.              Simple Log Program Example
  4.              ìπ Ñú« ¡áσαÑ¡, ß ¼«¿¼ á¡ú½¿⌐߬¿¼...
  5.          Åα¿¼Ñα »α«ßΓ«⌐ »α«úαá¼¼δ óÑñÑ¡¿∩ »α«Γ«¬«½á.
  6.                    éÑαß¿∩ 1.0beta.
  7.        ÇóΓ«α ñá¡¡«ú« »α¿¼Ñαá: Alexey Kulentsov, 2:5020/449.14
  8.  
  9.     ä½∩ ¬«¡Σ¿úπα¿α«óá¡¿∩ ΓαÑíπÑΓß∩ «Γñѽ∞¡á∩ ¿¡ßΓá½½∩µ¿«¡¡á∩ »α«úαá¼¼á.
  10.  
  11. $
  12.  
  13. ;DEBUG        equ    1
  14.  
  15. StackSize    =    512
  16.  
  17.         .model    tiny
  18. ;
  19. ; é¡¿¼á¡¿Ñ! àß½¿ σ«Γ¿ΓÑ »π߬áΓ∞ φΓπ »α«úαá¼¼π ¡á "Å«¿ß¬Ñ" ¿½¿ XT,
  20. ; πíÑα¿ΓÑ .286 ¿ »ÑαÑñѽá⌐ΓÑ óßÑ ¡á 8086 áßßѼíÑα. èα«¼Ñ Γ«ú«, ¿ß»«½∞ºπÑΓß∩
  21. ; Σπ¡¬µ¿∩ DOS 6Ch, ¬«Γ«αá∩ »«∩ó¿½áß∞, ¡áτ¿¡á∩ c MS-DOS 4.0.
  22. ;
  23.         .286
  24.  
  25.         .code
  26.         org    100h
  27.  
  28.  
  29. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  30. ; ¥Γ« »α«µÑñπαá, ¿¡ßΓá½½¿απεΘá∩ αѺ¿ñÑ¡Γ¡πε τáßΓ∞
  31. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  32. Work        proc    far
  33. ;
  34. ; ìáñ»¿ßÑ⌐ ¡¿¬á¬¿σ ¡Ñ óδó«ñ¿¼, τΓ«íδ ¡Ñ ¡Ñαó¿α«óáΓ∞ »áµ¿Ñ¡Γ«ó
  35. ;
  36.         ;mov    dx,offset sHeader
  37.         ;mov    ah,9
  38.         ;int    21h
  39. ;
  40. ; Åα«óÑα∩Ѽ ßÑí∩ ó »á¼∩Γ¿.
  41. ; ExecParamRec ¡Ñ ñ«½ªÑ¡ ¿ß»«½∞º«óáΓ∞ß∩, »«φΓ«¼π ¡Ñ ßΓáó¿¼
  42. ;
  43.         mov    ax,4B00h
  44.         mov    dx,offset FakeName+2
  45.         int    21h
  46.         jc    SetStack
  47.         jmp    QuitInstall
  48. ;
  49. ; æΓáó¿¼ ßΓѬ ¡á Γ«τ¬π DataEnd+StackSize
  50. ;
  51.     SetStack:
  52.         mov    bx,StackSize+offset BlockBegin
  53.         add    bx,NewBlockSize
  54.         mov    sp,bx
  55. ;
  56. ; ÄíαѺáѼ ßó«⌐ í½«¬ »á¼∩Γ¿ »« ßá¼δ⌐ ßΓѬ
  57. ;
  58.         add    bx,15
  59.         shr    bx,4
  60.         mov    ah,4Ah
  61.         int    21h
  62. ;
  63. ; çừ¼¿¡áѼ UMB link state
  64. ;
  65.         mov    ax,5802h
  66.         int    21h
  67.         push    ax
  68. ;
  69. ; æΓáó¿¼ link=on
  70. ;
  71.         mov    al,3
  72.         mov    bx,1
  73.         int    21h
  74. ;
  75. ; çừ¼¿¡áѼ ßΓαáΓÑú¿ε αáß»αÑñѽѡ¿∩ »á¼∩Γ¿
  76. ;
  77.         mov    ax,5800h
  78.         int    21h
  79.         push    ax
  80. ;
  81. ; îÑ¡∩Ѽ ßΓαáΓÑú¿ε ¡á ¡πª¡πε ¡á¼, ñóá αáºá,
  82. ; »«Γ«¼π τΓ« ½Ñ¡∞ »α«óÑα∩Γ∞ óÑαß¿ε, ¼á½« ½¿ τΓ«..
  83. ;
  84.         mov    ax,5801h
  85.         mov    bx,2
  86.         push    ax
  87.         int    21h
  88.         pop    ax
  89.         mov    bl,82h
  90.         int    21h
  91. ;
  92. ; ÅδΓáѼß∩ óδñѽ¿Γ∞ »á¼∩Γ∞..
  93. ;
  94.         mov    ah,48h
  95.         mov    bx,NewBlockSize
  96.         add    bx,15
  97.         shr    bx,4
  98.         int    21h
  99. ;
  100. ; ìÑ »«½πτ¿½«ß∞- ó«ßßΓá¡áó½¿óáѼ ßΓpáΓÑú¿ε ¿ ¼«½τá óδσ«ñ¿¼.
  101. ;
  102.         jc    RestoreStrat
  103.  
  104.     BlockExist:
  105.         push    ax
  106.         push    ax
  107. ;
  108. ; üÑαѼ ßΓáαδ⌐ óÑ¬Γ«α 21
  109. ;
  110.         mov    ax,3521h
  111.         int    21h
  112.         mov    word ptr OldInt_21,bx
  113.         mov    word ptr OldInt_21+2,es
  114. ;
  115. ; è«»¿απѼ αѺ¿ñÑ¡Γ ¡á Ñú« αáí«τÑÑ ¼ÑßΓ«
  116. ;
  117.         pop    es
  118.         xor    di,di
  119.         mov    si,offset BlockBegin
  120.         cld
  121.         mov    cx,NewBlockSize
  122.         rep    movsb
  123. ;
  124. ; æΓáó¿¼ Ñú« ó½áñѽ∞µÑ¼ DOS
  125. ;
  126.         mov    ax,es
  127.         dec    ax
  128.         mov    ds,ax
  129.         mov    word ptr ds:[1],8
  130. ;
  131. ; æΓáó¿¼ ¡á ¡Ñú« óÑ¬Γ«α
  132. ;
  133.         pop    ds
  134.         mov    ax,2521h
  135.         mov    dx,offset NewInt_21-offset BlockBegin
  136.         int    21h
  137. ;
  138. ; é«ßßΓá¡áó½¿óáѼ ßΓáαπε ßΓpáΓÑú¿ε
  139. ;
  140.     RestoreStrat:
  141.         push    cs
  142.         pop    ds
  143.         pop    bx
  144.         mov    ax,5801h
  145.         int    21h
  146. ;
  147. ; é«ßßΓá¡áó½¿óáѼ link ¬á¬ í佫
  148. ;
  149.         mov    ax,5803h
  150.         pop    bx
  151.         int    21h
  152. ;
  153. ; Å¿ΦѼ ß««íΘÑ¡¿Ñ « ßó«Ñ¼ ßΓáαΓÑ
  154. ;
  155.         mov    ax,4B00h
  156.         mov    dx,offset sStartMessage
  157.         int    21h
  158. ;
  159. ; ôßÑ ú«Γ«ó«, ÿÑΣ!
  160. ; (éδσ«ñ¿¼ ó DOS)
  161. ;
  162. QuitInstall:
  163.         mov    ax,4C00h
  164.         int    21h
  165. Work            endp
  166.  
  167. ;
  168. ; ¥Γ« ñá¡¡δÑ ñ½∩ óδΦÑπ¬áºá¡¡«⌐ »α«µÑñπαδ,
  169. ; ¬«Γ«αδÑ ¡¿¬«ú«, ¬α«¼Ñ ¡ÑÑ, ¡Ñ ¿¡ΓÑαÑßπεΓ.
  170. ;
  171. ;sHeader        db    'Åα¿¼Ñα ºáΘ¿Γ¡«⌐ »α«úαá¼¼δ. (ß) 1997 Ç½Ñ¬ßÑ⌐ èπ½Ñ¡µ«ó.',13,10,'$'
  172. sStartMessage    db    '<------------ Started at this time -------------',0
  173.  
  174. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  175. ; ¥Γ« ¡áτ¿¡áÑΓß∩ αѺ¿ñÑ¡Γ¡á∩ τáßΓ∞, ¬«Γ«απε ¼δ
  176. ; ¬«»¿απѼ ó óδñѽѡ¡δ⌐ í½«¬
  177. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  178.         even
  179. BlockBegin    label    unknown
  180.  
  181. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  182. ; ¥Γ« ¡áΦ «íαáí«Γτ¿¬ Int 21h
  183. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  184. NewInt_21    proc
  185. ;
  186. ; ¥Γ« «ñ¡á ¿º Σπ¡¬µ¿⌐ ºá»π߬á?
  187. ;
  188.         cmp    ah,4Bh
  189.         jne    Pass_21    ; àß½¿ ¡ÑΓ- »p«»π߬áѼ
  190. ;
  191. ; ê¡ΓÑαΣÑ⌐ß: "ƒ πªÑ ºáúαπªÑ¡".
  192. ;
  193.         pusha
  194.         mov    di,dx
  195.     FakeName:
  196.         cmp    word ptr ds:[di],'>:'
  197.         jne    Work_21
  198.         ; ¥Γ« ¼δ Γ¿»á π¼πñα¿½¿ß∞ ºá»πßΓ¿Γ∞ »α«úαá¼¼π ß ':>'.
  199.         popa
  200.         clc
  201.         retf    2
  202.  
  203.     Work_21:
  204.         push    ds es
  205. ;
  206. ; æ¡áτá½á »α«óÑα¬á ¡á ¡Ñ «Γ«íαáªáѼδѠ󠽫úÑ ¿¼Ñ¡á
  207. ;
  208.         call    CheckName
  209.         jnz    QuitWork
  210. ;
  211. ; Å¿ΦѼ ó »α«Γ«¬«½
  212. ;
  213.         call    WriteToLog
  214.     QuitWork:
  215.         pop    es ds
  216.         popa
  217.     Pass_21:
  218.         db    0EAh    ; Jmp far
  219. OldInt_21    dd    ?
  220. NewInt_21       endp
  221.  
  222. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  223. ; Åp«µÑñπpá CheckName - »α«µÑñπαá, »α«óÑα∩εΘá∩, ¡áσ«ñ¿Γß∩ ½¿ ¿¼∩ óδºδóáѼ«⌐
  224. ; »α«úαá¼¼δ ó ß»¿ß½Ñ ºáαѺÑαó¿α«óá¡¡δσ ¿¼Ñ¡.
  225. ; éσ«ñ¡δÑ »áαá¼ÑΓαδ: DS:DI - π¬áºáΓѽ∞ ¡á ¿¼∩ »α«úαá¼¼δ
  226. ; éδσ«ñ¡δÑ »áαá¼ÑΓαδ: ßΓáó¿Γß∩ ZF, Ñß½¿ ¿¼∩ ¡Ñ ¡áΦ½¿, ¿¡áτÑ ßíαáßδóáÑΓß∩.
  227. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  228. CheckName    proc
  229.         push    di ds es
  230.         push    ds
  231.         pop    es
  232. ;
  233. ; êΘѼ ¬«¡Ñµ ¿¼Ñ¡¿ »« ºáóÑαΦáεΘѼπ ¡π½ε. æΓáó¿¼ ¡á ¡Ñú« es:di.
  234. ;
  235.         cld
  236.         xor    ax,ax
  237.         mov    cx,not 0
  238.         repne    scasb
  239.         dec    di
  240. ;
  241. ; æΓáó¿¼ ds:si ¡á ¡áτὫ ¡áΦÑ⌐ Γáí½¿µδ ¿¼Ñ¡.
  242. ;
  243.         push    cs
  244.         pop    ds
  245.         mov    si,offset NamesTable-offset BlockBegin
  246. ;
  247. ; ìáτὫ µ¿¬½á »« ¿¼Ñ¡á¼.
  248. ; üÑαѼ ñ½¿¡π «τÑαÑñ¡«ú« ¿¼Ñ¡¿, Ñß½¿ 0, Γ« óδσ«ñ¿¼ ¿º µ¿¬½á.
  249. ;
  250.     NextName:
  251.         lodsb
  252.         mov    cx,ax
  253.         jcxz    QuitNameLoop    ; ê¼Ñ¡á ¬«¡τ¿½¿ß∞- AX=0
  254. ;
  255. ; ÄΓßΓπ»áѼ «Γ ¬«¡µá »α«óÑα∩Ѽ«⌐ ßΓ᫬¿ ¡á ¡πª¡«Ñ αáßßΓ«∩¡¿Ñ ¿ ßαáó¡¿óáѼ
  256. ; ÑÑ σó«ßΓ ß ¿¼Ñ¡Ñ¼. àß½¿ πß»ÑΦ¡«- óδσ«ñ¿¼ ¿º µ¿¬½á.
  257. ;
  258.         sub    di,ax
  259.         repe    cmpsb
  260.         jcxz    QuitNameLoop    ; ìáΦ½¿ ¿¼∩- AX!=0
  261. ;
  262. ; é ß½πτáÑ ¡Ñπß»ÑΦ¡«ú« ßαáó¡Ñ¡¿∩ ñó¿úáѼ π¬áºáΓѽ¿ ñ« ¬«¡µá, ú«Γ«ó∩ ΓѼ ßá¼δ¼
  263. ; ßαáó¡Ñ¡¿Ñ ß« ß½ÑñπεΘ¿¼ ¿¼Ñ¡Ñ¼.
  264. ;
  265.         add    si,cx
  266.         add    di,cx
  267. ;
  268. ; è«¡Ñµ µ¿¬½á ßαáó¡Ñ¡¿∩
  269. ;
  270.         jmp    NextName
  271.  
  272. ;
  273. ; è«¡Ñµ »α«µÑñπαδ.
  274. ;
  275. QuitNameLoop:
  276.         test    ax,ax
  277.         pop    es ds di
  278.         ret
  279. CheckName       endp
  280.  
  281. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  282. ; Åp«µÑñπpá WriteToLog «Γ¬αδóáÑΓ Σá⌐½ »α«Γ«¬«½á ¿ »¿ΦÑΓ Γπñá ¿¼∩ ºá»π߬áѼ«⌐
  283. ; »α«úαá¼¼δ ¿ óαѼ∩.
  284. ; éσ«ñ¡δÑ »áαá¼ÑΓαδ: DS:DI - π¬áºáΓѽ∞ ¡á ¿¼∩ »α«úαá¼¼δ
  285. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  286. WriteToLog    proc
  287.         mov    bp,ds
  288.         push    cs
  289.         pop    ds
  290. ;
  291. ; öπ¡¬µ¿∩ «Γ¬αδΓ∞/ß«ºñáΓ∞
  292. ;
  293.         mov    ah,6Ch
  294.         ; íπΣÑਧ«óá¡¡δ⌐, íѺ Int 24h, τ¿ΓáΓ∞/»¿ßáΓ∞, ñ«ßΓπ»Ñ¡ óßѼ.
  295.         mov    bx,0010000011000010b
  296.         mov    cx,00100010b    ; áασ¿ó¡δ⌐ ¿ ß¬αδΓδ⌐
  297.         mov    dx,11h        ; ß«ºñáΓ∞ ¿½¿ «Γ¬αδΓ∞, Ñß½¿ ¿¼ÑÑΓß∩
  298.         mov    si,cs:[offset LogNameOfs-offset BlockBegin]
  299.         int    21h
  300.         jc    QuitLog
  301.         mov    bx,ax
  302. ;
  303. ; ÅÑαÑñó¿¡π½¿ π¬áºáΓѽ∞ ¡á ¬«¡Ñµ Σá⌐½á
  304. ;
  305.         mov    ax,4202h
  306.         xor    cx,cx
  307.         mov    dx,cx
  308.         int    21h
  309. ;
  310. ; CΣ«α¼¿α«ó὿ ßΓ᫬π ß ñáΓ«⌐ ¿ óαѼѡѼ
  311. ;
  312.         push    di
  313.         call    TypeData
  314. ;
  315. ; çỿß὿ ÑÑ ó Σá⌐½
  316. ;
  317.         mov    di,offset DaTime-offset BlockBegin
  318.         call    WriteString
  319.         pop    di
  320. ;
  321. ; çỿß὿ Γπñá ¿¼∩
  322. ;
  323.         mov    ds,bp
  324.         call    WriteString
  325.         push    cs
  326.         pop    ds
  327.         mov    di,offset sEOL-offset BlockBegin
  328.         call    WriteString
  329. ;
  330. ; çá¬α뫨 Σá⌐½ ºá ß«í«ε
  331. ;
  332.         mov    ah,3Eh
  333.         int    21h
  334.     QuitLog:
  335.         ret
  336. sEOL        db    13,10,0
  337. WriteToLog    endp
  338.  
  339. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  340. ; Åp«µÑñπpá TypeData Σ«α¼¿απÑΓ ßΓ᫬π ß ΓѬπΘ¿¼¿ ñáΓ«⌐ ¿ óαѼѡѼ
  341. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  342.  
  343. TypeData    proc
  344.         push    cs
  345.         pop    es
  346.         mov    di,offset DaTime-offset BlockBegin
  347.         mov    ah,2Ah
  348.         int    21h
  349.         mov    al,dl
  350.         call    TypeAL
  351.         mov    al,dh
  352.         call    TypeAL
  353.         mov    ah,2Ch
  354.         int    21h
  355.         mov    al,ch
  356.         call    TypeAL
  357.         mov    al,cl
  358.         call    TypeAL
  359.         mov    al,dh
  360.         call    TypeAL
  361.         ret
  362. DaTime        db    'xx/xx xx:xx:xx File Run: ',0
  363. TypeData        endp
  364.  
  365. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  366. ; Åp«µÑñπpá TypeAL Σ«α¼¿απÑΓ ñÑß∩Γ¿τ¡«Ñ ¡á»¿ßá¡¿Ñ τ¿ß½á ó AL (ñ« 99).
  367. ; éσ«ñ¡δÑ »áαá¼ÑΓαδ: ES:DI - ô¬áºáΓѽ∞ ¡á ßΓ᫬π
  368. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  369.  
  370. TypeAL        proc
  371.         xor    ah,ah
  372.         aam
  373.         xchg    ah,al
  374.         add    ax,3030h
  375.         stosw
  376.         inc    di
  377.         ret
  378. TypeAL         endp
  379.  
  380. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  381. ; Åp«µÑñπpá WriteString »¿ΦÑΓ ó Σá⌐½ C-ßΓ᫬π.
  382. ; éσ«ñ¡δÑ »áαá¼ÑΓαδ:
  383. ;     BX - file handle
  384. ;     DS:DI - pointer to zero-terminated string
  385. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  386. WriteString    proc
  387.         push    ds
  388.         pop    es
  389.         mov    ax,4000h
  390.         mov    cx,not 0
  391.         mov    dx,di
  392.         repne    scasb
  393.         neg    cx
  394.         sub    cx,2
  395.         int    21h
  396.         ret
  397. WriteString     endp
  398.  
  399. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  400. ; Ç φΓ« ñá¡¡δÑ, ¬«Γ«αδÑ íπñπΓ ºá»«½¡Ñ¡δ ¿¡ßΓá½½∩µ¿«¡¡«⌐ »α«úαá¼¼«⌐.
  401. ; ƒ ßΓαѼ¿½ß∩ ¼¿¡¿¼¿º¿α«óáΓ∞ ¿σ ¬«½¿τÑßΓó«,
  402. ; σ«Γ∩ φΓ« πß½«ª¡∩ÑΓ ¡ÑαѺ¿ñÑ¡Γ¡πε τáßΓ∞ »α«úαá¼¼δ.
  403. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  404. LogNameOfs    dw    offset LogName-offset BlockBegin
  405. NewBlockSize    dw    offset EndLabel-offset BlockBegin
  406.  
  407. ; Æáí½¿µá ¿¼Ñ¡ - íπñÑΓ ºá»«½¡Ñ¡á ¿¡ßΓá½½∩Γ«α«¼
  408. NamesTable    label    unknown
  409. ifdef DEBUG
  410.         db    11,'COMMAND.COM'
  411.         db    6,'VC.COM'
  412.         db    8,'hiew.exe'
  413.         db    11,'arcview.exe'
  414.         db    0
  415. endif
  416. LogName        label    byte
  417. ifdef DEBUG
  418.         db    'c:\log.tmp',0
  419. endif
  420. ;  --- ìá φΓ«¼ αѺ¿ñÑ¡Γ¡á∩ τáßΓ∞ ºáóÑαΦáÑΓß∩.
  421. EndLabel    label    unknown
  422. ;
  423. ;  Å«ß½Ñ Γáí½¿µ ÑΘÑ ¿ñÑΓ ßΓѬ, óδñѽ∩Ѽδ⌐ ¡ÑαѺ¿ñÑ¡Γ¡«⌐ τáßΓ∞ε.
  424. ;
  425.  
  426.         end    Work
  427.