Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.                                 "‘®¢¥àè¨â¥ ¢ë ¬ ááã ®âªàë⨩,
  2.                                  ¨­®£¤  ­¥ ¦¥« ï ⮣®..."
  3.                                     ¥ ¯®¬­î  ¢â®à , ­® ¯¥«
  4.                                     €­¤à¥© Œ¨à®­®¢.
  5.  
  6.               à¥¤¨á«®¢¨¥.
  7.  
  8.     ˆ¤¥ï ­ ¯¨á âì ª®¬¯¨«ïâ®à ¤«ï Win32 த¨« áì ¯à¨ ¬®¥¬ ¯¥à¢®¬
  9. §­ ª®¬á⢥ á ª®¬¯¨«ïâ®à®¬ Sphinx C-- ¨â¥à  ‘¥««¨ª  (Peter Cellik)
  10. ¢ 1996 £®¤ã, ­® ॠ«¨§®¢ âì ¥¥ 㤠«®áì «¨èì ­¥¤ ¢­®, ª®£¤ 
  11. ¯®ï¢¨« áì ¢®§¬®¦­®áâì ç¥à¥§ ˆ­â¥à­¥â ­ ©â¨ ¨á室­ë¥ ⥪áâë ¤«ï C--,
  12. ¯®áª®«ìªã ­ ç¨­ âì á ­ã«ï ¦¥« ­¨ï ­¥ ¡ë«®.
  13.     ˆâ ª, ª®à®âª® ® £« ¢­®¬. Žá­®¢­®© ¯à¨­æ¨¯ ¯®áâ஥­¨ï ¯à¨«®¦¥­¨©
  14. ¤«ï 32-à §à來®© á¨á⥬ë, ¯à¥¤« £ ¥¬ë© ¢ à §«¨ç­ëå ª®¬¯¨«ïâ®à å,
  15. § ª«îç ¥âáï ¢ à §¤¥«¥­¨¨ ª®¤  ­  ­¥áª®«ìª® ᥪ権: .text, .data,
  16. .idata, .reloc, .rsrc ¨ â.¤., ª®â®àë¥ áâà®ïâáï ¨§ á ¬¨å ¨á室­ëå
  17. ⥪á⮢ ¨ à §«¨ç­ëå ä ©«®¢ ®¯¨á ­¨© ¨ à¥áãàᮢ ­  áâ ¤¨¨ ᡮન
  18. ¯à®£à ¬¬®©-«¨­ª®¢é¨ª®¬ (link). ® áã⨠¤¥«  ®áâ « áì áâ à ï á奬 
  19. ¯®áâ஥­¨ï: compiler + linker -> exe-file. Šà®¬¥ ⮣®, ¡®«ì让 ­ ¡®à
  20. à §«¨ç­ëå ¡¨¡«¨®â¥ª... ª®â®àë¥ ª ⮬㠦¥ áãé¥á⢥­­® ¬¥­ïîâáï ®â
  21. ¢¥àᨨ ª ¢¥àᨨ, ç⮠ᮢᥬ ­¥ à ¤ã¥â. ˆ ¥á«¨ ¢ë ¯¥à¥å®¤¨â¥ ­  ­®¢ãî,
  22. ¡®«¥¥ ¯à®¤¢¨­ãâãî ¢¥àá¨î ª®¬¯¨«ïâ®à , â® ­¥â ­¨ª ª®© £ à ­â¨¨, çâ®
  23. ¢ë ᬮ¦¥â¥ ­  ­¥¬ ¯¥à¥ª®¬¯¨«¨à®¢ âì ᢮¨ áâ àë¥ ¯à®£à ¬¬ë - ¯à¨¬¥à®¬
  24. á«ã¦¨â DDK ®â MicroSoft.
  25.     Sphinx C-- ¨§­ ç «ì­® ¡ë« § ¤ã¬ ­ ¨ ॠ«¨§®¢ ­ ¤«ï ᮧ¤ ­¨ï
  26. ª®¬¯ ªâ­ëå ¯® à §¬¥àã COM-ä ©«®¢ ¨ ¯®í⮬㠢¯®«­¥ ¯®¤å®¤¨â ¤«ï
  27. £¥­¥à æ¨¨ 32-à §à來ëå ¯à¨«®¦¥­¨ï ¢ ¬®¤¥«¨ ¯«®áª®© (flat) ¯ ¬ïâ¨.
  28. ®¬¨¬® í⮣® ¡®«ì訬 ¯«îᮬ ï¥âáï ¨¤¥ï ®âªàë⮣® ª®¤  ¤«ï ¢á¥å
  29. ¢ë§ë¢ ¥¬ëå ¢ ¯à®£à ¬¬¥ ¡¨¡«¨®â¥ç­ëå ä㭪権, ॠ«¨§®¢ ­­ ï ¯®á।á⢮¬
  30. *.h-- ä ©«®¢.
  31.     …é¥ ®¤­  ¨¤¥ï ¨§ ª®¬¯¨«ïâ®à  Sphinx C--, § á«ã¦¨¢ îé ï ¢­¨¬ ­¨ï, - íâ®
  32. ¤¨­ ¬¨ç¥áª¨¥ ¯à®æ¥¤ãàë, â.¥. ¯à®æ¥¤ãàë, ª®â®àë¥ ¬®£ãâ ¡ëâì ¯®¬¥é¥­ë ¢ ⥫®
  33. ª®¬¯¨«¨à㥬®© ¯à®£à ¬¬ë ⮫쪮 ⮣¤ , ª®£¤  ª ­¨¬ ¥áâì ®¡à é¥­¨¥. ’ ª¨¬
  34. ®¡à §®¬, ¢ ¯à®æ¥áᥠ­ ¯¨á ­¨ï ¯à®£à ¬¬ë á ¨á¯®«ì§®¢ ­¨¥¬ ¤¨­ ¬¨ç¥áª¨å
  35. ¯à®æ¥¤ãà £ à ­â¨àã¥âáï ¢ª«î祭¨¥ ¢ ⥫® ¯à®£à ¬¬ë ⮫쪮 ⮣® ª®¤ ,
  36. ª®â®àë© ¤¥©á⢨⥫쭮 ­¥®¡å®¤¨¬.
  37.     ‚ ¯à®æ¥áᥠࠡ®âë ¯® ¯¥à¥¢®¤ã ª®¬¯¨«ïâ®à  Sphinx C-- ­  ¯« âä®à¬ã Win32
  38. ¯à®¨§¢¥¤¥­ë ¢¥á쬠 áãé¥á⢥­­ë¥ ¨§¬¥­¥­¨ï ª ª ¢ á ¬®¬ ª®¬¯¨«ïâ®à¥, â ª ¨ ¢
  39. ¨¤¥ïå, ­  ª®â®àëå ®­ ॠ«¨§®¢ ­. Ÿ ­¥ ¡ã¤ã §¤¥áì ¢ë¤¥«ïâì ¢á¥ ®â«¨ç¨ï
  40. ­ áâ®ï饣® ª®¬¯¨«ïâ®à  ®â ¥£® ¯à à®¤¨â¥«ï ¯® ⮩ ¯à®á⮩ ¯à¨ç¨­¥, çâ® â¥, ªâ®
  41. á ­¨¬ §­ ª®¬, ¨å ᬮ£ãâ 㢨¤¥âì á ¬¨,   ⥬, ªâ® ­¥ ¨¬¥« ¤¥«  á ‘--, ­¥â ­ã¦¤ë
  42. ¢­¨ª âì ¢ í⨠¤¥â «¨.
  43.     Žâ¬¥çã, ®¤­ ª®, çâ® ¯à¨­æ¨¯ £¥­¥à æ¨¨ ª®¤ , ¨á¯®«ì§®¢ ¢è¨©áï ¢ ‘--, § ¬¥­¥­
  44. ­  ¯à¨­æ¨¯, ¨á¯®«ì§ã¥¬ë© ¢ ¬ ªà® áᥬ¡«¥à¥ TMA ‘¢¥­  Š«®§¥ (TMA macro assembler
  45. Sven Klose), á ¯à®¢¥¤¥­¨¥¬ ¥£®  ¤ ¯â æ¨¨ ª ­ã¦¤ ¬ ‘--.
  46.     ‚ १ã«ìâ â¥ ¯®ï¢¨«áï ¤ ­­ë© ª®¬¯¨«ïâ®à, 楫ìî ª®â®à®£® ï¥âáï § ¯®«­¥­¨¥
  47. ­¨è¨ ¬¥¦¤ã ï§ëª®¬  áᥬ¡«¥à  ¨ ï§ëª®¬ ‘.
  48.  
  49.               Ž¯¨á ­¨¥ ï§ëª .
  50.  
  51.               ˆ¤¥­â¨ä¨ª â®àë.
  52.  
  53.     ˆ¤¥­â¨ä¨ª â®àë ¤®«¦­ë ­ ç¨­ âìáï á ¡ãª¢ë ¨«¨ §­ ª  ¯®¤ç¥àª¨¢ ­¨ï, ¥á«¨
  54. ïîâáï £«®¡ «ì­ë¬¨, ¨«¨ ¦¥ ¤®«¦­ë ­ ç¨­ âìáï á ᨬ¢®«  @, ¥á«¨ ®­¨ «®ª «ì­ë¥.
  55. „ «¥¥ ¬®¦¥â ¨¤â¨ «î¡ ï ª®¬¡¨­ æ¨ï æ¨äà, ¡ãª¢ ¨«¨ §­ ª®¢ ¯®¤ç¥àª¨¢ ­¨ï ¤«¨­®©
  56. ­¥ ¡®«¥¥ 63 ᨬ¢®«®¢. ãª¢ë ¬®£ãâ ¡ëâì ª ª ¨§ « â¨­áª®£®, â ª ¨ ¨§ ­ æ¨®­ «ì­®£®
  57.  «ä ¢¨â . ¥áª®«ìª® ¯à¨¬¥à®¢:
  58.     GoHome
  59.     _1234
  60.     à¨¬¥àˆ¤¥­â¨ä¨ª â®à 
  61.     @LocalLabel2
  62.  
  63.     ‚ᥠ¨¤¥­â¨ä¨ª â®àë, ªà®¬¥ § à¥§¥à¢¨à®¢ ­­ëå, ïîâáï çã¢á⢨⥫ì­ë¬¨ ª
  64. ॣ¨áâàã, â.¥. ¨¤¥­â¨ä¨ª â®àë: ToDo ¨ Todo ª®¬¯¨«ïâ®à ¢®á¯à¨¬¥â ª ª à §­ë¥.
  65.  
  66.               ‡ à¥§¥à¢¨à®¢ ­­ë¥ ¨¤¥­â¨ä¨ª â®àë
  67.  
  68.     ¨¦¥ ¯à¨¢®¤¨âáï ᯨ᮪ § à¥§¥à¢¨à®¢ ­­ëå ¨¤¥­â¨ä¨ª â®à®¢ ï§ëª , ª®â®àë¥
  69. ­¥ ¬®£ãâ ¡ëâì ¨á¯®«ì§®¢ ­ë ¯à¨ ᮧ¤ ­¨¨ ¯à®£à ¬¬ë ¨­ ç¥, ª ª íâ® ®¯à¥¤¥«¥­®
  70. ¢ ï§ëª¥:
  71.     byte      char      word      short     dword     int
  72.     if        else      cycle     do        while     return
  73.     docase    case      continue  break     extract   from
  74.     enum      struct
  75.     carryflag      overflow       zeroflag
  76.     notcarryflag   notoverflow    notzeroflag
  77.       â ª¦¥ ­ §¢ ­¨ï ॣ¨áâ஢ ¨ ¬­¥¬®­¨ª¨ ª®¬ ­¤  áᥬ¡«¥à .
  78.  
  79.     …é¥ à § ¯®¤ç¥àª­ã, çâ® § à¥§¥à¢¨à® ­­ë¥ á«®¢  ­¥ § ¢¨áïâ ®â ॣ¨áâà , â.¥.
  80. Enum ¨ eNuM ª®¬¯¨«ïâ®à ¢®á¯à¨¬¥â ¢ «î¡®¬ ¨§ ¢ à¨ ­â®¢, ª ª ­ ç «® ᯨ᪠
  81. ­ã¬¥à®¢ ­­ëå ª®­áâ ­â.
  82.  
  83.               Š®­áâ ­âë
  84.  
  85.     —¨á«®¢ë¥ ª®­áâ ­âë ¬®£ãâ ¡ëâì § ¤ ­ë ¢ ®¤­®© ¨§ ç¥âëà¥å á¨á⥬ áç¨á«¥­¨ï:
  86. ¤¥áïâ¨ç­®©, è¥áâ­ ¤æ â¨à¨ç­®©, ¢®á¬¥à¨ç­®© ¨«¨ ¤¢®¨ç­®©.
  87.     „¥áïâ¨ç­ë¥ ç¨á«®¢ë¥ ª®­áâ ­âë § ¤ îâáï ®¡ëç­ë¬ ®¡à §®¬: 444 ¨«¨ 007.
  88.     ˜¥áâ­ ¤æ â¨à¨ç­®¥ ¯à¥¤áâ ¢«¥­¨¥ ª®­áâ ­â ­ ç¨­ ¥âáï á ª®¬¡¨­ æ¨¨ 0x: 0xFFF
  89. ¨«¨ 0x088.
  90.     ‚®á¬¥à¨ç­®¥ ¯à¥¤áâ ¢«¥­¨¥ ª®­áâ ­â ­ ç¨­ ¥âáï á ª®¬¡¨­ æ¨¨ 0o: 0o777 ¨«¨
  91. 0o10.
  92.     „¢®¨ç­®¥ ¯à¥¤áâ ¢«¥­¨¥ ª®­áâ ­â ­ ç¨­ ¥âáï á ª®¬¡¨­ æ¨¨ 0b: 0b111101 ¨«¨
  93. 0b11101010.
  94.  
  95.     ‘¨¬¢®«ë ¢ ª®­áâ ­â å § ª«îç îâáï ¢ ®¤¨­®ç­ë¥ ª ¢ë窨 ('). ’ ª ¦¥ ª ª ¨ ¢ ‘
  96. ᨬ¢®«ë ¬®£ãâ § ¤ ­ë á ¯®¬®éìî 㪠§ ­¨ï ¨å ª®¤  ¯®á«¥ ᨬ¢®«  '\'. ‘¯¨á®ª
  97. ᯥæᨬ¢®«®¢:
  98.     '\a', '\b', '\f', '\l', '\n', '\r', '\t'  -  ¤«ï ä®à¬ â¨à®¢ ­¨ï ¢ë¢®¤ 
  99.     '\x??' ¨«¨ '\???' - ASCII-ᨬ¢®«. Š®¤ ᨬ¢®«  § ¤ ­ «¨¡® ¢ 16, 10 §­ ç¥­¨¥¬.
  100.     ‹î¡ë¥ ᨬ¢®«ë ¯®á«¥ '\' ¯à®áâ® ¯à¨­¨¬ îâáï ª®¬¯¨«ïâ®à®¬, â ª¨¬ ®¡à §®¬
  101. ®¤¨­®ç­ãî ª ¢ëçªã ¬®¦­® 㪠§ âì ª ª '\''.
  102.  
  103.     ‘âப®¢ë¥ ª®­áâ ­âë § ¤ îâáï ¯ã⥬ § ª«î祭¨ï ¨å ¢ ¤¢®©­ë¥ ª ¢ë窨 (").
  104. ‚­ãâਠáâப®¢®© ª®­áâ ­âë ¤®¯ã᪠¥âáï 㪠§ ­¨¥ ᯥæᨬ¢®«®¢ ¢ ®¤¨­®ç­ëå
  105. ª ¢ë窠å. à¨¬¥àë áâப®¢ëå ª®­áâ ­â:
  106.     "à¨¬¥à áâப®¢®© ª®­áâ ­âë\n"
  107.     "Need '\"'word'\"' in data declaration" -> Need "word" in data declaration
  108.  
  109.     à¨ ®¯à¥¤¥«¥­¨¨ ç¨á«®¢ëå ¨ ᨬ¢®«ì­ëå ª®­áâ ­â ¤®¯ã᪠¥âáï ¨á¯®«ì§®¢ ­¨¥
  110. ¢ëà ¦¥­¨©, ª®â®àë¥ ¢ëç¨á«ïîâáï ¢ ¯à®æ¥áᥠª®¬¯¨«ï樨. ‡­ ç¥­¨¥¬ ª®­áâ ­âë
  111. ¡ã¤¥â १ã«ìâ â ¢ëç¨á«¥­¨ï ¢ëà ¦¥­¨ï:
  112.     1*2*3/2+4 ¤ áâ §­ ç¥­¨¥ ª®­áâ ­âë 7.
  113.     ‚ëç¨á«¥­¨ï ¯à®¢®¤ïâáï á«¥¢ -­ ¯à ¢® ¡¥§ ãç¥â  ¯à¨®à¨â¥â  ®¯¥à æ¨©.
  114.  
  115.               ‘â ­¤ àâ­ë¥ â¨¯ë ¤ ­­ëå
  116.  
  117.     ˆ¬¥¥âáï è¥áâì áâ ­¤ àâ­ëå ⨯®¢ ¤ ­­ëå: byte, char, word, short, dword
  118. ¨ int. ‚ â ¡«¨æ¥ ¯à¨¢¥¤¥­ë à §¬¥à ¨ ¤¨ ¯ §®­ §­ ç¥­¨© ¤«ï ª ¦¤®£® ⨯ :
  119.   -------------------------------------------------------------------
  120.   ’¨¯        |  §¬¥à   | „¨ ¯ §®­ §­ ç¥­¨©
  121.   ¯¥à¥¬¥­­®© | ¢ ¡ ©â å | (¤¥áïâ¨ç­.)        | (hex)
  122.   -------------------------------------------------------------------
  123.   byte       |    1     | 0...255            | 0...0xFF
  124.   char       |    1     | -127...127         | 0x80...0x7F
  125.   word       |    2     | 0...65535          | 0...0xFFFF
  126.   short      |    2     | -32768...32767     | 0x8000...0x7FFF
  127.   dword      |    4     | 0...4294967295     | 0...0xFFFFFFFF
  128.   int        |    4     | -2147483648...     | 0x80000000 ...
  129.              |          |     2147483647     |    0x7FFFFFFF
  130.   -------------------------------------------------------------------
  131.  
  132.               ƒ«®¡ «ì­ë¥ ¯¥à¥¬¥­­ë¥
  133.  
  134.     Ž¡ê¥­¨¥ ¯¥à¥¬¥­­ëå ¨¬¥¥â ®¡ëç­ë© ¤«ï ‘ ᨭ⠪á¨á:
  135.  
  136.     <⨯> <ᯨ᮪ ¨¤¥­â¨ä¨ª â®à®¢>;
  137.  
  138.     ‘¯¨á®ª ¨¤¥­â¨ä¨ª â®à®¢ á®á⮨⠨§ ®¤­®£® ¨«¨ ¡®«¥¥ ¨¤¥­â¨ä¨ª â®à®¢,
  139. à §¤¥«¥­­ëå § ¯ïâ묨. ‚ ᯨ᪥ â ª¦¥ ¬®£ãâ ¯à¨áãâ᢮¢ âì ®¤­®¬¥à­ë¥ ¬ áᨢë,
  140. ®¡êï¢«ï¥¬ë¥ ¢ ¢¨¤¥:
  141.    <¨¤¥­â¨ä¨ª â®à>[<à §¬¥à­®áâì>].
  142.  
  143.    à¨¬¥àë ®¡ê¥­¨© ¯¥à¥¬¥­­ëå:
  144.    dword i,j;           // i ¨ j ⨯  dword
  145.    byte  Tab='\t';      // ¯¥à¥¬¥­­ ï Tab ⨯  byte á ­ ç «ì­ë¬ §­ ç¥­¨¥¬
  146.    char  string[]="This is a string\n";
  147.    int   z,b[6];        // z ⨯  int ¨ ¬ áᨢ 楫ëå - b
  148.  
  149.               ‚ëà ¦¥­¨ï
  150.  
  151.     ‚ëà ¦¥­¨ï á®áâ®ïâ ¨§ «¥¢®© ¨ ¯à ¢®© ç á⥩, à §¤¥«¥­­ëå «¨¡® ®¯¥à æ¨¥©
  152. ¯à¨á¢ ¨¢ ­¨ï, «¨¡® ®¯¥à æ¨¥© áà ¢­¥­¨ï. ‹¥¢ ï ç áâì ¢ëà ¦¥­¨ï ¬®¦¥â ¡ëâì
  153. «¨¡® ¯¥à¥¬¥­­®©, «¨¡® ॣ¨áâ஬. ‚ ¯à ¢®© ç á⨠¢ëà ¦¥­¨ï ¬®¦¥â ­ å®¤¨âìáï
  154. ¯à®¨§¢®«ì­®¥ ª®«¨ç¥á⢮ ¯¥à¥¬¥­­ëå, ä㭪権, ª®­áâ ­â, ᪮¡®ª ¨ §­ ª®¢ ®¯¥à æ¨©.
  155. ¨¦¥ ¯à¨¢®¤¨âáï â ¡«¨æ  ¢á¥å ¤®¯ãá⨬ëå ®¯¥à æ¨©:
  156. -------------------------------------------------------------------------
  157. Ž¯¥à æ¨ï | ‡­ ç¥­¨¥            | à¨¬¥à
  158. -------------------------------------------------------------------------
  159.   =      | ¯à¨á¢®¨âì ¨«¨       | edi = 33;
  160.          | ¯à®¢¥à¨âì à ¢¥­á⢮ | while(ch = 'a')
  161.   +      | á«®¦¨âì             | eax = Count + 5;
  162.   -      | ¢ëç¥áâì             | Count = eax - edi;
  163.   *      | 㬭®¦¨âì            | x = y * 3;
  164.   /      | à §¤¥«¨âì           | y = ecx / x;
  165.   %      | ®áâ â®ª ¤¥«¥­¨ï     | y = edi / 7;
  166.   &      | «®£¨ç¥áª®¥ AND      | a = B & c;
  167.   |      | «®£¨ç¥áª®¥ OR       | a = B | c;
  168.   ^      | «®£¨ç¥áª®¥ XOR      | a = B ^ c;
  169.   <<     | ᤢ¨£ ¡¨â ¢«¥¢®     | x = y << 5;
  170.   >>     | ᤢ¨£ ¡¨â ¢¯à ¢®    | x = y >> 6;
  171.   +=     | 㢥«¨ç¨âì ­         | a += 6;        // a = a + 6;
  172.   -=     | 㬥­ìè¨âì ­         | a -= 5;        // a = a - 5;
  173.   &=     | ¯®¡¨â­ë© AND        | a &= 0xF;      // a = a & 0xF;
  174.   |=     | ¯®¡¨â­ë© OR         | a |= 0o77;     // a = a | 0o77;
  175.   ^=     | ¯®¡¨â­ë© XOR        | a ^= 0b1101;   // a = a ^ 0b1101;
  176.   <<=    | ᤢ¨£ ¡¨â ¢«¥¢®     | a <<= 7;       // a = a << 7;
  177.   >>=    | ᤢ¨£ ¡¨â ¢¯à ¢®    | a >>= 3;       // a = a >> 3;
  178.   ><     | ®¡¬¥­(swap)         | x >< y;        // temp=y; y=x; x=temp;
  179.   ==     | ¯à®¢¥à¨âì à ¢¥­á⢮ | if( x=='7' )   // ¤«ï â¥å, ª®¬ã â ª ¯à¨¢ëç­¥¥
  180.   >      | ¡®«ìè¥ ç¥¬          | case( x > y )
  181.   <      | ¬¥­ìè¥ ç¥¬          | if( a < 0 )
  182.   >=     | ¡®«ìè¥ ¨«¨ à ¢­®    | while(( b >= a ) & ( x >= ( y - 7 )))
  183.   <=     | ¬¥­ìè¥ ¨«¨ à ¢­®    | if( y <= ( a + b - 30 ))
  184. != ¨«¨ <>| ­¥ à ¢­®            | case( a != b) ¨«¨ ¦¥ case( a <> b)
  185.   #      |  ¤à¥á ¯¥à¥¬¥­­®©    | esi = #Count;  // esi= ¤à¥á ¯¥à¥¬¥­­®© Count
  186.  
  187.               ”㭪樨
  188.  
  189.     Ž¡ê¥­¨¥ ä㭪権 ¨¬¥¥â ¢¨¤:
  190.  
  191.     <⨯> <¨¤¥­â¨ä¨ª â®à>(<ᯨ᮪ ¯ à ¬¥â஢>)
  192.  
  193. ‘¯¨á®ª ¯ à ¬¥â஢ § ¤ ¥â â¨¯ë ¨ ¨¬¥­  ä®à¬ «ì­ëå ¯ à ¬¥â஢, ¨á¯®«ì§ã¥¬ëå ¯à¨
  194. ¢ë§®¢¥ ä㭪樨. Š®¬¯¨«ïâ®à ­¥ ®áãé¥á⢫ï¥â ¯à®¢¥àªã ᮮ⢥âá⢨ï ᯨ᪠
  195. ä®à¬ «ì­ëå ¯ à ¬¥â஢ ä㭪樨 ä ªâ¨ç¥áª¨¬, ¯®í⮬ã á«¥¤ã¥â ¢­¨¬ â¥«ì­® á«¥¤¨âì
  196. §  ª®à४⭮áâìî ¢ë§®¢  ä㭪権.
  197.     ’¨¯ ¢®§¢à é ¥¬®£® ¨§ ä㭪樨 §­ ç¥­¨ï ¬®¦­® ­¥ 㪠§ë¢ âì. ‚ í⮬ á«ãç ¥
  198. ¯® 㬮«ç ­¨î áç¨â ¥âáï, çâ® äã­ªæ¨ï ¢®§¢à é ¥â §­ ç¥­¨¥ ⨯  dword. ‡­ ç¥­¨¥
  199. ¯®¬¥é ¥âáï ¯à¨ ¢®§¢à â¥ ¨§ ä㭪樨 ¢ ॣ¨áâà eax ¤«ï ⨯®¢ dword ¨ int, ¢
  200. ॣ¨áâà ax ¤«ï ⨯®¢ word ¨ short ¨ ¢ ॣ¨áâà al ¤«ï ⨯®¢ byte ¨ char.
  201.     ‚ ᯨ᪥ ¯ à ¬¥â஢ ¤«ï ª ¦¤®£® ¯ à ¬¥âà  ãª §ë¢ ¥âáï ¥£® ⨯.  à ¬¥âàë
  202. ®¤­®£® ⨯ , ¨¤ã騥 ¯®¤àï¤, à §¤¥«ïîâáï § ¯ïâ묨. ”®à¬ «ì­ë¥ ¯ à ¬¥âàë à §­®£®
  203. ⨯  ¢ ®¡ê¥­¨¨ ä㭪樨 à §¤¥«ïîâáï ᨬ¢®«®¬ ;. …᫨ ⨯ ¯ à ¬¥âà  ­¥ § ¤ ­,
  204. â® áç¨â ¥âáï, çâ® ¯ à ¬¥âà ¨¬¥¥â ⨯ dword. ¥ § ¢¨á¨¬® ®â ⨯  ¯ à ¬¥âà  ¯à¨
  205. ¢ë§®¢¥ ä㭪樨 ¤«ï ª ¦¤®£® ¯ à ¬¥âà  ¢ë¤¥«ï¥âáï 4 ¡ ©â  (dword). â® á¢ï§ ­®
  206. á ⥬, çâ® ¢ Win32 á⥪ ¢á¥£¤  ¤®«¦¥­ ¨¬¥âì ¢ëà ¢­¨¢ ­¨¥ (alignment) ­  £à ­¨æã
  207. ¤¢®©­®£® á«®¢ .
  208.     à¨¬¥àë ®¡ê¥­¨ï ä㭪権 ¨ ¨å ¢ë§®¢®¢.
  209.     Ž¡ê¥­¨¥                             à¨¬¥à ¢ë§®¢ 
  210.     char ToUpper(char ch)                  upChar = ToUpper('i');
  211.     MergeStrings(dword dest,str1,str2)     MergeStrings(#str,"One","+Two");
  212.                                            ¯®«ã稬 str="One+Two"
  213.     Convert(dword str; int number,base)    Convert(#num, -567, 16);
  214.  
  215.     à¨ ¢ë§®¢¥ ä㭪樨 ¯¥à¢ë© ¯ à ¬¥âà ¯®¬¥é ¥âáï ¢ á⥪ ¯®á«¥¤­¨¬. à¨¬¥à:
  216.     WriteFile(handle,"Hello World!\n",14,#dWriteFileCount,0);
  217. ¡ã¤¥â ॠ«¨§®¢ ­:
  218.         push 0
  219.         push #dWriteFileCount
  220.         push 14
  221.         push #"Hello World!"
  222.         push handle
  223.         call WriteFile
  224.     à¨ ¢®§¢à â¥ ¨§ ä㭪樨 á⥪ ®ç¨é ¥âáï ®â ¯ à ¬¥â஢ ª®¬ ­¤®©: ret number.
  225.  
  226.     ‚ᥠ®¡êï¢«ï¥¬ë¥ ¢ ¯à®£à ¬¬¥ ä㭪樨 ïîâáï ¤¨­ ¬¨ç¥áª¨¬¨. â® §­ ç¨â,
  227. çâ® ª®¤ ä㭪樨 ¢áâ ¢«ï¥âáï ¢ ¯à®£à ¬¬ã «¨èì ⮫쪮 ¢ á«ãç ¥ ®¡à é¥­¨ï ª ­¥©.
  228. ’® ¦¥ á ¬®¥ ®â­®á¨âáï ¨ ª «î¡ë¬ £«®¡ «ì­ë¬ ¯¥à¥¬¥­­ë¬ ¢ ¯à®£à ¬¬¥.
  229.  
  230.                ‘âàãªâãà­ë¥ ®¯¥à â®àë
  231.  
  232.     à¨¬¥­¥­¨¥ áâàãªâãà­ëå ®¯¥à â®à®¢ ¢ ¯à®£à ¬¬¥ ¤¥« ¥â ¥¥ ¡®«¥¥ 㤮¡­®© ¤«ï
  233. ç⥭¨ï ¨  ­ «¨§ . Šà®¬¥ ⮣®, ­ ¯¨á âì ­¥áª®«ìª® áâàãªâãà­ëå ®¯¥à â®à®¢ ¯à®é¥,
  234. 祬 ¯ãâ âìáï ¢ ¯®å®¦¨å ¨¬¥­ å ¡®«ì讣® ç¨á«  ¬¥â®ª ¨ ¬ãç¨âìáï, ¯à¨¤ã¬ë¢ ï
  235. ã­¨ª «ì­®¥ ¨¬ï ¤«ï ª ¦¤®© ­®¢®© ¬¥âª¨. ‚ â® ¦¥ ¢à¥¬ï ­¥ § ¯à¥é ¥âáï ¨á¯®«ì§®¢ âì
  236. ¨ ¬¥âª¨ ¢ «î¡®¬ ¬¥á⥠¯à®£à ¬¬ë.  •®à®è® ¯®áâ ¢«¥­­ ï ¬¥âª  ᯮᮡ­  §¤®à®¢®
  237. ®¡«¥£ç¨âì ­ ¯¨á ­¨¥ ¨  ­ «¨§  ¯à®£à ¬¬ë.
  238.  
  239.               Ž¯¥à â®à if.
  240.  
  241.     ‚ ®¡é¥¬ ¢¨¤¥ ãá«®¢­ë© ®¯¥à â®à ¬®¦­® § ¯¨á âì â ª:
  242.  
  243.     if(<ãá«®¢¨¥>)
  244.       <£à㯯  ®¯¥à â®à®¢1>
  245.      else
  246.       <£à㯯  ®¯¥à â®à®¢2>
  247.  
  248.     €«£®à¨â¬ ¢ë¯®«­¥­¨ï ãá«®¢­®£® ®¯¥à â®à  á®á⮨⠢ á«¥¤ãî饬:
  249. ¯à®¢¥àï¥âáï <ãá«®¢¨¥>, ¨ ¥á«¨ ®­® ¨á⨭­®, â® ¢ë¯®«­ï¥âáï <£à㯯  ®¯¥à â®à®¢1>,
  250. á«¥¤ãîé ï §  if, ¯®á«¥ 祣® ã¯à ¢«¥­¨¥ ¯¥à¥¤ ¥âáï §  ª®­¥æ ãá«®¢­®£® ®¯¥à â®à .
  251. …᫨ ãá«®¢¨¥ «®¦­®, â® ã¯à ¢«¥­¨¥ ¯¥à¥¤ ¥âáï ­  <£à㯯㠮¯¥à â®à®¢2>, á«¥¤ãîéãî
  252. §  else. ®à冷ª ¢ë¯®«­¥­¨ï ãá«®¢­®£® ®¯¥à â®à  ¢ á«ãç ¥ ®âáãâá⢨ï else
  253. ®ç¥¢¨¤¥­. ‚ ª ç¥á⢥ £àã¯¯ë ®¯¥à â®à®¢ ¬®¦¥â ¡ëâì «¨¡® ®¤¨­ ®¯¥à â®à, «¨¡® ¡«®ª
  254. ¨§ ­¥áª®«ìª¨å ®¯¥à â®à®¢ ¢ {} ᪮¡ª å. ‚®â ­¥áª®«ìª® ¯à¨¬¥à®¢:
  255.     if(edx<=2){
  256.       WriteStr("Equal or less two\n");
  257.       return();
  258.       }
  259.      else{
  260.       WriteStr("Greater than two\n");
  261.       return(0);
  262.       }
  263.  
  264.     if((x<>0)&(y<>0))
  265.       return(x/y);
  266.  
  267.               Ž¯¥à â®à cycle
  268.  
  269.     Ž¯¥à â®à 横«  cycle ¨¬¥¥â ¢¨¤:
  270.  
  271.     cycle(<áç¥â稪>) <£à㯯  ®¯¥à â®à®¢>
  272.  
  273.     –¨ª« ¢ë¯®«­ï¥âáï ¤® â¥å ¯®à ¯®ª  §­ ç¥­¨¥ áç¥â稪  ­¥ ¡ã¤¥â à ¢­® ­ã«î.
  274. à®¢¥àª  áç¥â稪  ­  à ¢¥­á⢮ ­ã«î ¨ ¥£® 㬥­ì襭¨¥ ­  ¥¤¨­¨æ㠯ந§¢®¤¨âáï
  275. ¢ ª®­æ¥ £àã¯¯ë ®¯¥à â®à®¢ 横« . „®¯ã᪠¥âáï ¢­ãâਠ横«  ¨á¯®«ì§®¢ âì ¨ ¬¥­ïâì
  276. §­ ç¥­¨¥ áç¥â稪 . …᫨ áç¥â稪 ­¥ 㪠§ ­, ⮠横« ¡ã¤¥â ¡¥áª®­¥ç­ë¬. à¨¬¥à:
  277. #import "kernel32.dll"
  278. #import "user32.dll"
  279. dword Count;
  280. dword dWriteFileCount;
  281. dword handle;
  282. byte s[20]=0;
  283. main(){
  284. handle=GetStdHandle(-11);
  285. Count=4;
  286. cycle(Count){
  287.   if(Count=2)
  288.     Count--;
  289.   wsprintfA(#s,"Count=%d\n",Count); ESP+=12;
  290.   WriteFile(handle,#s,lstrlenA(#s),#dWriteFileCount,0);
  291.   }
  292. }
  293.     à¨ ¢ë¯®«­¥­¨¨ ¡ã¤¥â ¢ë¢¥¤¥­®:
  294. Count=4
  295. Count=3
  296. Count=1
  297.  
  298.               Ž¯¥à â®à while
  299.  
  300.     Ž¯¥à â®à 横«  while ¨¬¥¥â ¢¨¤:
  301.  
  302.     while(<ãá«®¢¨¥>)
  303.       <£à㯯  ®¯¥à â®à®¢>
  304.  
  305.     ƒà㯯  ®¯¥à â®à®¢ ¢ 横«¥ while ¢ë¯®«­ï¥âáï ¯®ª  <ãá«®¢¨¥> ®áâ ¥âáï
  306. ¨á⨭­ë¬. à¨¬¥à ¨§ ®¯¨á ­¨ï ®¯¥à â®à  cycle ¬®¦¥â ¡ëâì ॠ«¨§®¢ ­ á ¯®¬®éìî
  307. while á«¥¤ãî騬 ®¡à §®¬:
  308. Count=4;
  309. while(Count){
  310.   if(Count=2)
  311.     Count--;
  312.   wsprintfA(#s,"Count=%d\n",Count); ESP+=12;
  313.   WriteFile(handle,#s,lstrlenA(#s),#dWriteFileCount,0);
  314.   Count--;
  315.   }
  316. }
  317.  
  318.               Ž¯¥à â®à do ... while
  319.  
  320.     Ž¯¥à â®à 横«  do ... while ¨¬¥¥â ¢¨¤:
  321.  
  322.     do
  323.       <£à㯯  ®¯¥à â®à®¢>
  324.     while(<ãá«®¢¨¥>)
  325.  
  326.     ƒà㯯  ®¯¥à â®à®¢ ¢ 横«¥ do ... while ¢ë¯®«­ï¥âáï ¯®ª  <ãá«®¢¨¥> ®áâ ¥âáï
  327. ¨á⨭­ë¬. à¨¬¥à ¨§ ®¯¨á ­¨ï ®¯¥à â®à  cycle ¬®¦¥â ¡ëâì ॠ«¨§®¢ ­ á ¯®¬®éìî
  328. do ... while á«¥¤ãî騬 ®¡à §®¬:
  329. Count=4;
  330. do{
  331.   if(Count=2)
  332.     Count--;
  333.   wsprintfA(#s,"Count=%d\n",Count); ESP+=12;
  334.   WriteFile(handle,#s,lstrlenA(#s),#dWriteFileCount,0);
  335.   Count--;
  336.   } while(Count)
  337. }
  338.     Žá®¡¥­­®áâìî ®¯¥à â®à  do ... while ï¥âáï â®, çâ® <£à㯯  ®¯¥à â®à®¢>
  339. ¢ 横«¥ ¢á¥£¤  ¢ë¯®«­ï¥âáï ­¥ ¬¥­¥¥ ®¤­®£® à § .
  340.  
  341.               Ž¯¥à â®à docase
  342.  
  343.     Ž¯¥à â®à ¢¥â¢«¥­¨ï docase ¨¬¥¥â ¢¨¤:
  344.  
  345.     docase
  346.       <£à㯯  ®¯¥à â®à®¢ 0>
  347.       case(<ãá«®¢¨¥1>)
  348.         <£à㯯  ®¯¥à â®à®¢ 1>
  349.         ...
  350.       case(<ãá«®¢¨¥N>)
  351.         <£à㯯  ®¯¥à â®à®¢ N>
  352.       default
  353.         <£à㯯  ®¯¥à â®à®¢ N1>
  354.  
  355.     Ž¯¥à â®à docase ¯®§¢®«ï¥â § ¬¥­¨âì ¢«®¦¥­­ë¥ £àã¯¯ë ¨§ if ... else if ...
  356. else ... . Šà®¬¥ ⮣® ¤ «¥¥ ¡ã¤¥â ¯®ª § ­  ­  ¯à¨¬¥à¥ ã­¨¢¥àá «ì­®áâì í⮣®
  357. ®¯¥à â®à . à¨¬¥à ¨§ ®¯¨á ­¨ï ®¯¥à â®à  cycle ¬®¦¥â ¡ëâì ॠ«¨§®¢ ­ á ¯®¬®éìî
  358. docase á«¥¤ãî騬 ®¡à §®¬:
  359. Count=4;
  360. docase{
  361.   if(Count=2)
  362.     Count--;
  363.   wsprintfA(#s,"Count=%d\n",Count); ESP+=12;
  364.   WriteFile(handle,#s,lstrlenA(#s),#dWriteFileCount,0);
  365.   Count--;
  366.   case(Count=0)
  367.     break;
  368.   default
  369.     continue;
  370.   }
  371. }
  372.  
  373.               Ž¯¥à â®àë continue ¨ break
  374.  
  375.     â¨ ®¯¥à â®àë ¨á¯®«ì§ãîâáï ¢­ãâਠ¢ëè¥ ®¯¨á ­­ëå ®¯¥à â®à®¢ 横«  cycle,
  376. while, do...while ¨ ®¯¥à â®à¥ docase ¤«ï ¯¥à¥å®¤  ­  ­ ç «® 横«  ¨«¨ docase
  377. ¯® ®¯¥à â®àã continue ¨ ­  ¢ë室 §  ª®­¥æ ®¯¥à â®à  ¯® break. à¨¬¥à:
  378.   while(cond1){<--Ô
  379.     ...           |
  380.     if(cond2)     |
  381.       continue; --+
  382.     ...           |
  383.     if(cond3)     |
  384.       break; ---+ |
  385.     ...         | |
  386.     } ----------|-+
  387.      <----------+
  388.  
  389.               Ž¯¥à â®à enum
  390.  
  391.      §­ ç¥­¨¥ ®¯¥à â®à  § ª«îç ¥âáï ¢ ᮧ¤ ­¨¨ £à㯯 ­ã¬¥à®¢ ­­ëå ª®­áâ ­â.
  392. à¨¬¥à:
  393.     enum { ab, ac=2, ad, ae=6}; ¯à¨ í⮬ ¡ã¤¥â: ab=0, ac=2, ad=3, ae=6.
  394.  
  395.               Ž¯¥à â®à struc
  396.  
  397.     ‘«ã¦¨â ¤«ï ®¯¨á ­¨ï áâàãªâãà¨à®¢ ­­ëå ¤ ­­ëå,  ­ «®£¨ç­® ‘.
  398. ®ª  ­¥ ॠ«¨§®¢ ­. Œ®¦­®, ¨á¯®«ì§ãï enum, ¡¥§ ¢áïª¨å ¯à®¡«¥¬ à ¡®â âì á
  399. ¤ ­­ë¬¨ «î¡®© áâàãªâãàë. à¨¬¥à:
  400. „«ï ¨á¯®«ì§®¢ ­¨ï áâàãªâãàë:
  401. struct localrec{
  402.   struct localrec *next;
  403.              char localid[IDLENGTH];
  404.               int localtok;
  405.               int localnumber;
  406.   };
  407. ᮧ¤ ¤¨¬:
  408. // ---- ‘âàãªâãà  localrec - ®¯¨á ­¨¥ «®ª «ì­®© ¯¥à¥¬¥­­®©
  409. enum{ localnext=0,                      // “ª § â¥«ì ­  á«¥¤ãîéãî localrec
  410.       localid=4,                        // ˆ¬ï «®ª «ì­®© ¯¥à¥¬¥­­®©
  411.       localtok=localid+IDLENGTH,        // ‡­ ç¥­¨¥ token
  412.       localtype=localtok+4,             // ⨯ ¯¥à¥¬¥­­®©
  413.       localnumber=localtype+4,          // ®§¨æ¨ï ¢ á⥪¥
  414.       local_size=localnumber+4};        //  §¬¥à áâàãªâãàë
  415. ˆ ⥯¥àì ¢ ¯à®£à ¬¬¥ ¬®¦­® ¨á¯®«ì§®¢ âì ­ã¬¥à®¢ ­­ë¥ ª®­áâ ­âë ¤«ï ®¡à é¥­¨ï
  416. ª í«¥¬¥­â ¬ áâàãªâãàë localrec:
  417. // ---- „®¡ ¢¨âì «®ª «ì­ãî ¯¥à¥¬¥­­ãî ¢ ᯨ᮪
  418. AddLocalvar(dword str,tk,ltype,num)
  419. dword ptr,newptr;
  420. {
  421. newptr=LocalAlloc(0x40, local_size);
  422. if(newptr==NULL){
  423.   preerror("Compiler out of memory for local symbol linked list");
  424.   ExitProcess(e_outofmemory);
  425.   }
  426. if(locallist==NULL)
  427.   locallist = newptr;
  428.  else{
  429.   ptr = locallist; EBX=ptr;
  430.   docase{
  431.     EAX=[EBX+localnext];
  432.     case(EAX!=0){
  433.       EBX=EAX; continue;
  434.       }
  435.     }
  436.   [EBX+localnext]=newptr;
  437.   }
  438. EBX=newptr; lstrcpyA(EBX+localid, str);
  439. EBX=newptr; [EBX+localtok] = tk; [EBX+localtype] = ltype;
  440. [EBX+localnumber] = num; [EBX+localnext] = NULL; localptr = EBX;
  441. }
  442.  
  443.               Œ¥âª¨
  444.  
  445.     ’ॡ®¢ ­¨ï ª ¨¬¥­ ¬ ¬¥â®ª ⥠¦¥, çâ® ¨ ª ¨¤¥­â¨ä¨ª â®à ¬. ˆáª«î祭¨¥¬
  446. ïîâáï «®ª «ì­ë¥ ¬¥âª¨ - ®­¨ ¤®«¦­ë ­ ç¨­ âìáï á ᨬ¢®«  '@'. ‹®ª «ì­ë¥
  447. ¬¥âª¨ ¤®áâ㯭ë ⮫쪮 ¢ ¯à¥¤¥« å ⮩ ä㭪樨, ¢ ª®â®à®© ®­¨ ®¯à¥¤¥«¥­ë,  
  448. £«®¡ «ì­ë¥ - ¯® ¢á¥© ¯à®£à ¬¬¥. à¨ ᮧ¤ ­¨¨ ¨¬¥­ «®ª «ì­ëå ¬¥â®ª á«¥¤ã¥â
  449. ãç¨â뢠âì, çâ® ª®¬¯¨«ïâ®à ¯à¨ ॠ«¨§ æ¨¨ áâàãªâãà­ëå ®¯¥à â®à®¢ £¥­¥à¨àã¥â
  450. ¬¥âª¨ ¢¨¤ : @l<ç¨á«®>. —â®¡ë ¨§¡¥¦ âì ª®««¨§¨©, á«¥¤ã¥â ¤«ï ᢮¨å ¬¥â®ª ­¥
  451. ¯à¨¬¥­ïâì â ª®£® ¢¨¤ . ‹î¡ ï ¬¥âª  § ¢¥àè ¥âáï ᨬ¢®«®¬ ¤¢®¥â®ç¨ï (:).
  452. à¨¬¥àë ¬¥â®ª:
  453.   NotUpperCase:         // íâ® £«®¡ «ì­ ï ¬¥âª 
  454.   @NotUpperCase:        //   íâ® «®ª «ì­ ï ¬¥âª 
  455.  
  456.               ˆ­¤¥ªá æ¨ï ¬ áᨢ®¢
  457.  
  458.     «¥¬¥­âë ¬ áᨢ  «î¡®£® ⨯  ¨­¤¥ªá¨àãîâáï ¢ ¡ ©â®¢ëå ¥¤¨­¨æ å, ­¥§ ¢¨á¨¬®
  459. ®â ⨯  ¤ ­­ëå. â® ‚‘…ƒ„€ á«¥¤ã¥â ¯®¬­¨âì ¯à¨ à ¡®â¥. ˆ­¤¥ªáë ¨¬¥îâ ¢¨¤,
  460. ¯à¨­ïâë© ¢  áᥬ¡«¥à¥ ¤«ï 386 CPU:
  461.  
  462.     <¯¥à¥¬¥­­ ï>[<¡ §®¢ë© ॣ¨áâà>+<¬ áèâ ¡>*<¨­¤¥ªá­ë© ॣ¨áâà>+<¨­¤¥ªá>]
  463.  
  464.     ‚®â ­¥áª®«ìª® ¯à¨¬¥à®¢:
  465.     Str[7];                     // ᥤ쬮© ¡ ©â ¨§ ¬ áᨢ  Str
  466.     IntArray[4*ebx];            // ebx í«¥¬¥­â ¨§ ¬ áᨢ  楫ëå - IntArray
  467.     ByteArray[esi+8*ecx+300];
  468.  
  469.               ‘¯¥æ¨ «ì­ë¥ ãá«®¢­ë¥ ¢ëà ¦¥­¨ï
  470.  
  471.     ˆ¬¥¥âáï è¥áâì ᯥ樠«ì­ëå ãá«®¢­ëå ¢ëà ¦¥­¨©:
  472.     CarryFlag, NotCarryFlag, Overflow, NotOverflow, ZeroFlag, NotZeroFlag. Ž­¨
  473. á«ã¦ â ¤«ï £¥­¥à æ¨¨ ª®¤  ¯à®¢¥àïî饣® á®áâ®ï­¨¥ ä« £®¢ CPU.
  474.  
  475.               Š®¬¬¥­â à¨¨
  476.  
  477.     Š®¬¬¥­â à¨¨ § ¤ îâáï  ­ «®£¨ç­® ‘.
  478.  
  479.               „¨à¥ªâ¨¢ë ª®¬¯¨«ïâ®à 
  480.  
  481.     ‚ᥠ¤¨à¥ªâ¨¢ë ª®¬¯¨«ïâ®à  ­ ç¨­ îâáï á ᨬ¢®«  '#'. ‘¯¨á®ª ¤¨à¥ªâ¨¢ ¨ ¨å
  482. ­ §­ ç¥­¨¥ ¯à¨¢®¤ïâáï ­¨¦¥:
  483.     #debug      // 㪠§ë¢ ¥â ª®¬¯¨«ïâ®àã ­  ­¥®¡å®¤¨¬®áâì £¥­¥à æ¨¨
  484.                 // ®â« ¤®ç­®© ¨­ä®à¬ æ¨¨ ¤«ï ª®¬¯¨«¨à㥬®© ¯à®£à ¬¬ë
  485.     #define     // ®¯à¥¤¥«¨âì ª®­áâ ­âã ¨«¨ ¨¤¥­â¨ä¨ª â®à. à¨¬¥à:
  486.                 // #define MAXLINES 400
  487.                 // #define less <
  488.                 // #define SetTrue "eax=1"
  489.                 //   if(lines less MAXLINES)   --> if(lines<400)
  490.                 //     SetTrue;                -->   eax=1;
  491.     #dll        // 㪠§ë¢ ¥â ª®¬¯¨«ïâ®àã ­  £¥­¥à æ¨î DLL-ä ©« . Ž¡ëç­® - exe.
  492.     #include    // ¯®¤ª«î祭¨¥ ä ©«  á ¨á室­ë¬ ⥪á⮬. €­ «®£¨ç­® ‘.
  493.     #import     // ¨¬¯®àâ ä㭪権 ¨§ DLL-ä ©«  ¯® ¨¬¥­¨.
  494.     #importN    // ¨¬¯®àâ ä㭪権 ¨§ DLL-ä ©«  ¯® ­®¬¥àã. à¨¬¥à ᬮâà¨â¥ ¢
  495.                 // ®¯¨á ­¨¨ áâàãªâãà­ëå ®¯¥à â®à®¢ cycle, while ¨ â.¤.
  496.     #list       // 㪠§ë¢ ¥â ª®¬¯¨«ïâ®àã ­  £¥­¥à æ¨î ä ©«  á «¨á⨭£®¬ (.lst)
  497.     #map        // 㪠§ë¢ ¥â ª®¬¯¨«ïâ®àã ­  £¥­¥à æ¨î map-ä ©«  (.map)
  498.  
  499.               ‚áâ஥­­ë©  áᥬ¡«¥à
  500.  
  501.     €áᥬ¡«¥à ¯®¤¤¥à¦¨¢ ¥â ¡®«ìèãî ç áâì ¨­áâàãªæ¨© ¨§ ­ ¡®à  386, 486 ¨ 586
  502. ¯à®æ¥áá®à®¢. Œ­¥¬®­¨ª¨  áᥬ¡«¥à  ¬®£ãâ ¡ëâì ¯®¬¥é¥­ë ¢­ãâਠ⥫  «î¡®© ä㭪樨
  503. ¡¥§ ª ª¨å-«¨¡® ®£à ­¨ç¥­¨©. à¨¬¥à:
  504. // ‚뤥«¥­¨¥ á«®¢  ¢ Dest ¨§ áâப¨ ᨬ¢®«®¢ Source
  505. dword GetWord(dword Source,Dest){
  506.   push esi; push edi; esi=Source; edi=Dest;
  507. // ˆé¥¬ ¯¥à¢ë© ­¥¯ãá⮩ ᨬ¢®«
  508. @up: lodsb; cmp al,' '; jz @up;         // à®¡¥«
  509.      cmp al,0; jz @down                 // Š®­¥æ áâப¨ Source
  510. // Š®¯¨à㥬 á«®¢® ¢ Dest
  511. @up1: stosb; cmp al,0; jz @down;        // Š®­¥æ áâப¨ Source
  512.      lodsb; cmp al,' '; jnz @up1;       // ¥ ¯à®¡¥«
  513.      al=0; jmp @up1                     // Žâ¬¥â¨¬ ª®­¥æ á«®¢ 
  514. @down:
  515. // ‘«®¢® ¢ë¤¥«¥­® ¨ ᪮¯¨à®¢ ­® ¢ Dest
  516.   eax=esi-Source; eax--;                // ‚ëç¨á«¨¬ ¤«¨­ã á«®¢ 
  517.   pop edi; pop esi                      // ‚®ááâ ­®¢¨¬ esi ¨ edi
  518. }
  519.  
  520.               ‡ ª«î祭¨¥
  521.  
  522.     ¥ ¢á¥ ¨§ ¢ë襮¯¨á ­­®£® ॠ«¨§®¢ ­®. â® ®¡ãá«®¢«¥­® ¢ ¯¥à¢ãî ®ç¥à¥¤ì ⥬,
  523. çâ® ¤ ­­ ï ¢¥àá¨ï ï¥âáï ¯à¥¤¢ à¨â¥«ì­®© ¨ ®á­®¢­®© ¥¥ 楫ìî ï¥âáï
  524. ¢ë¥­¨¥ ¨­â¥à¥á  ª®¬¯ìîâ¥à­®© ®¡é¥á⢥­­®á⨠ª â ª®¬ã ª®¬¯¨«ïâ®àã.
  525.     …᫨ ‚ë § ¨­â¥à¥á®¢ «¨áì í⨬ ¯à®¤ãªâ®¬ ¨«¨ 㠂 á ¢®§­¨ª«¨ ª ª¨¥-«¨¡®
  526. ¢®¯à®áë, ¨¤¥¨ ¨«¨ ¯à¥¤«®¦¥­¨ï, â® ¯à®èã ® ­¨å á®®¡é¨âì ¬­¥ ¯®  ¤à¥áã:
  527. halimovskiy@usa.net.
  528.  
  529.               ‘ 㢠¦¥­¨¥¬ €.• «¨¬®¢áª¨©  E-mail: halimovskiy@usa.net
  530.