Subversion Repositories Kolibri OS

Rev

Rev 7496 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. <html>
  2. <head>
  3.         <title>Äîêóìåíòàöèÿ íà C--</title>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  5.         <style>
  6.         body, a, pre {
  7.                 font-family: 'Courier New', Courier, 'Lucida Sans Typewriter', 'Lucida Typewriter', monospace !important;
  8.         }
  9.         a {
  10.                 color: #0000ff;
  11.         }
  12.         #contents a {
  13.                 font-weight: bold;
  14.                 text-decoration: none;
  15.         }
  16.         h1 {
  17.                 color: #F000F0;
  18.                 font-size: 200%;
  19.         }
  20.         h2 {
  21.                 color: #f00;
  22.                 font-size: 100%;
  23.                 margin-bottom: 0;
  24.         }
  25.         </style>
  26. </head>
  27. <body LINK="#0000ff" VLINK="#800080">
  28. <h1>Ñîäåðæàíèå</h1>
  29. <pre>
  30. <div id="contents">
  31. <a href="#intro">1      Ââåäåíèå.
  32. 1.1    Èñòîðèÿ ñîçäàíèÿ è ðàçâèòèÿ.</A>
  33. <a href="#1.2">1.2    ×òî òàêîå C--?</a>
  34. <a href="#1.3">1.3    Êàê óñòàíîâèòü C--.</a>
  35. <A name=contents2>
  36. <a href="#2.1">2.     Óïðàâëåíèå êîìïèëÿöèåé.
  37. 2.1    Ïàðàìåòðû êîìàíäíîé ñòðîêè êîìïèëÿòîðà C--.</a>
  38. <a href="#2.1.1">2.1.1  /ON - Îïòèìèçàöèÿ ÷èñëîâûõ âûðàæåíèé.</a>
  39. <a href="#2.1.2">2.1.2  /DE - Âðåìåííîå ðàñøèðåíèå ðàçðÿäíîñòè ïåðåìåííîé.</a>
  40. <a href="#2.1.3">2.1.3  /ARGC - Àëüòåðíàòèâíûé îáðàáîò÷èê êîìàíäíîé ñòðîêè.</a>
  41. <a href="#2.1.4">2.1.4  /OST - ñëèÿíèå îäèíàêîâûõ ñòðîêîâûõ êîíñòàíò.</a>
  42. <a href="#2.1.5">2.1.5  /D - óñòàíîâêà èäåíòèôèêàòîðà â TRUE èç êîìàíäíîé ñòðîêè.</a>
  43. <a href="#2.1.6">2.1.6  /IA - óïðîùåííûé ââîä àññåìáëåðíûõ èíñòðóêöèé.</a>
  44. <a href="#2.1.7">2.1.7  /CRI - ïðîïóñê ïîâòîðíî âêëþ÷àåìîãî ôàéëà.</a>
  45. <a href="#2.1.8">2.1.8  /IND - èìïîðò èìåí ïðîöåäóð èç DLL.</a>
  46. <a href="#2.1.9">2.1.9  /WS - çàäàòü èìÿ stub ôàéëà äëÿ ïðîãðàìì ïîä windows.</a>
  47. <a href="#2.1.10">2.1.10 /WBSS - ðàçìåñòèòü íå èíèöèàëèçèðîâàííûå äàííûå â îòäåëüíîé ñåêöèè.</a>
  48. <a href="#2.1.11">2.1.11 /DBG - ñîçäàíèå îòëàäî÷íîé èíôîðìàöèè.</a>
  49. <a href="#2.1.12">2.1.12 /J0 /J1 /J2.</a>
  50. <a href="#2.1.13">2.1.13 /LST - Ñîçäàíèå àññåìáëåðíîãî ëèñòèíãà.</a>
  51. <a href="#2.1.14">2.1.14 /ENV - Ñîõðàíåíèå àäðåñà ïåðåìåííûõ îêðóæåíèÿ.</a>
  52. <a href="#2.1.15">2.1.15 /CPA - Î÷èñòêà post-îáëàñòè äàííûõ.</a>
  53. <a href="#2.1.16">2.1.16 /W - âûâîä ïðåäóïðåæäåíèé.</a>
  54. <a href="#2.1.17">2.1.17 /NW - Âûáîðî÷íîå îòêëþ÷åíèå òèïîâ ïðåäóïðåæäåíèé.</a>
  55. <a href="#2.1.18">2.1.18 /WSI - êîðîòêàÿ òàáëèöà èìïîðòà.</a>
  56. <a href="#2.2">2.2    Äèðåêòèâû òðàíñëÿòîðà.</a>
  57. <a href="#2.2.1">2.2.1  ?ifdef/?ifndef</a>
  58. <a href="#2.2.2">2.2.2  ?initallvar</a>
  59. <a href="#2.2.3">2.2.3  ?usestartup</a>
  60. <a href="#2.2.4">2.2.4  ?startusevar</a>
  61. <a href="#2.2.5">2.2.5  ?atexit</a>
  62. <a href="#2.2.6">2.2.6  ?startuptomain</a>
  63. <a href="#2.2.7">2.2.7  ?undef</a>
  64. <a href="#2.2.8">2.2.8  ?align è ?aligncode</a>
  65. <a href="#2.2.9">2.2.9  ?pragma</a>
  66. <A name=contents3>
  67. <a href="#3.1">3.     Êîíñòàíòû.
  68. 3.1    ×èñëîâûå êîíñòàíòû.</a>
  69. <a href="#3.2">3.2    Ñèìâîëüíûå êîíñòàíòû.</a>
  70. <a href="#3.3">3.3    Ñòðîêîâûå êîíñòàíòû.</a>
  71. <a href="#3.4">3.4    Ïîñòîÿííûå âûðàæåíèÿ.</a>
  72. <A name=contents4>
  73. <a href="#4.1">4.     Âûðàæåíèÿ.
  74. 4.1    Òèïû âûðàæåíèé.</a>
  75. <a href="#4.2">4.2    Âûðàæåíèÿ òèïà EAX/AX/AL.</a>
  76. <a href="#4.3">4.3    Âûðàæåíèÿ èñïîëüçóþùèå ïîëó÷àòåëü ïðè âû÷èñëåíèè âûðàæåíèÿ.</a>
  77. <a href="#4.4">4.4    Íå - EAX/AX/AL âûðàæåíèÿ.</a>
  78. <a href="#4.5">4.5    Óñëîâíûå âûðàæåíèÿ.</a>
  79. <a href="#4.5.1">4.5.1  Ïðîñòûå óñëîâíûå âûðàæåíèÿ.</a>
  80. <a href="#4.5.2">4.5.2  Ñëîæíûå óñëîâíûå âûðàæåíèÿ.</a>
  81. <a href="#4.6">4.6    Èçìåíåíèå òèïà âûðàæåíèÿ ïðè ïðèñâàèâàíèè.</a>
  82. <a href="#4.7">4.7    Âû÷èñëåíèå â ðåãèñòðû EAX/AX/AL ñî çíàêîì.</a>
  83. <A name=contents5>
  84. <a href="#5.1">5.     Èäåíòèôèêàòîðû.
  85. 5.1    Ôîðìàò èäåíòèôèêàòîðà.</a>
  86. <a href="#5.2">5.2    Çàðåçåðâèðîâàííûå èäåíòèôèêàòîðû.</a>
  87. <a href="#5.3">5.3    Óíèâåðñàëüíûå ðåãèñòðû äëÿ 16 è 32-áèòíîãî ðåæèìà.</a>
  88. <a href="#5.4">5.4    Ïðåäîïðåäåëåííûå èäåíòèôèêàòîðû.</a>
  89. <A name=contents6>
  90. <a href="#6.1">6.     Ïåðåìåííûå.
  91. 6.1    Òèïû ïåðåìåííûõ.</a>
  92. <a href="#6.2">6.2    Îáúÿâëåíèå ïåðåìåííûõ.</a>
  93. <a href="#6.3">6.3    Ãëîáàëüíûå ïåðåìåííûå.</a>
  94. <a href="#6.4">6.4    Ëîêàëüíûå ïåðåìåííûå.</a>
  95. <a href="#6.5">6.5    Äèíàìè÷åñêèå ïåðåìåííûå è ñòðóêòóðû.</a>
  96. <a href="#6.6">6.6    Ïðèñâàèâàíèå îäíîãî çíà÷åíèÿ íåñêîëüêèì ïåðåìåííûì.</a>
  97. <a href="#6.7.1">6.7    Ïåðåìåííûå òèïà float.
  98. 6.7.1  Ôîðìàò ïåðåìåííûõ òèïà float.</a>
  99. <a href="#6.7.2">6.7.2  Êîíñòàíòû ñ ïëàâàþùåé òî÷êîé.</a>
  100. <a href="#6.7.3">6.7.3  Äèàïàçîí äîïóñòèìûõ çíà÷åíèé.</a>
  101. <a href="#6.7.4">6.7.4  Ìàòåìàòè÷åñêèå îïåðàöèè.</a>
  102. <a href="#6.7.5">6.7.5  Ïðåîáðàçîâàíèÿ òèïîâ.</a>
  103. <a href="#6.7.6">6.7.6  Îïåðàöèè ñðàâíåíèÿ.</a>
  104. <a href="#6.7.7">6.7.7  Ñðàâíåíèå ïåðåìåííûõ òèïà float ñ 32-áèòíûì ðåãèñòðîì.</a>
  105. <a href="#6.8">6.8    Óêàçàòåëè.</a>
  106. <A name=contents7>
  107. <a href="#7.1">7.     Àäðåñàöèÿ.
  108. 7.1    Îòíîñèòåëüíàÿ àäðåñàöèÿ.</a>
  109. <a href="#7.2">7.2    Àáñîëþòíàÿ àäðåñàöèÿ.</a>
  110. <A name=contents8>
  111. <a href="#8.1.1">8.     Ðàáîòà ñ áëîêàìè äàííûõ.
  112. 8.1    Ñòðóêòóðû.
  113. 8.1.1  ×òî òàêîå ñòðóêòóðû.</a>
  114. <a href="#8.1.2">8.1.2  Ñèíòàêñèñ.</a>
  115. <a href="#8.1.3">8.1.3  Èíèöèàëèçàöèÿ ñòðóêòóð ïðè îáúÿâëåíèè.</a>
  116. <a href="#8.1.4">8.1.4  Èíèöèàëèçàöèÿ ñòðóêòóðû ïðè âûïîëíåíèè ïðîãðàììû.</a>
  117. <a href="#8.1.5">8.1.5  Îïåðàöèè ñ ýëåìåíòàìè ñòðóêòóð.</a>
  118. <a href="#8.1.6">8.1.6  Âëîæåííûå ñòðóêòóðû.</a>
  119. <a href="#8.1.7">8.1.7  Îòîáðàæåíèå òåãà ñòðóêòóðû íà áëîê ïàìÿòè.</a>
  120. <a href="#8.1.8">8.1.8  Áèòîâûå ïîëÿ ñòðóêòóð.</a>
  121. <a href="#8.2">8.2    Îáúåäèíåíèÿ.</a>
  122. <a href="#8.3">8.3    Êîìàíäû FROM è EXTRACT.</a>
  123. <A name=contents9>
  124. <a href="#9.1">9.     Îïåðàòîðû.
  125. 9.1    Óñëîâíûå èíñòðóêöèè.</a>
  126. <a href="#9.2">9.2    Öèêëû do{} while.</a>
  127. <a href="#9.3">9.3    Öèêëû loop, LOOPNZ, loopnz.</a>
  128. <a href="#9.4">9.4    Öèêë while, WHILE.</a>
  129. <a href="#9.5">9.5    Öèêë for, FOR.</a>
  130. <a href="#9.6">9.6    Îïåðàòîð ïåðåêëþ÷àòåëü switch.</a>
  131. <a href="#9.7">9.7    Îïåðàòîð ïåðåõîäà goto, GOTO.</a>
  132. <a href="#9.8">9.8    Îïåðàòîð ðàçðûâà break, BREAK.</a>
  133. <a href="#9.9">9.9    Îïåðàòîð ïðîäîëæåíèÿ continue, CONTINUE.</a>
  134. <a href="#9.10">9.10   Ëîãè÷åñêîå îáúåäèíåíèå óñëîâèé.</a>
  135. <a href="#9.11">9.11   Ïåðåõîä ÷åðåç öèêëû.</a>
  136. <a href="#9.12">9.12   Èíâåðòèðîâàíèå ôëàãà ïðîâåðêè óñëîâèé.</a>
  137. <a href="#9.13">9.13   Âû÷èñëåíèå âûðàæåíèÿ, à çàòåì ïðîâåðêà óñëîâèÿ.</a>
  138. <a href="#9.14">9.14   Ïðîâåðêà áèòîâ ïðè îïåðàöèè ñðàâíåíèÿ.</a>
  139. <a href="#9.15">9.15   Îïåðàòîð ïåðåñòàíîâêè.</a>
  140. <a href="#9.16">9.16   Îïåðàòîð îòðèöàíèÿ.</a>
  141. <a href="#9.17">9.17   Îïåðàòîð èíâåðñèè.</a>
  142. <a href="#9.18">9.18   Ñïåöèàëüíûå óñëîâíûå âûðàæåíèÿ.</a>
  143. <a href="#9.19">9.19   Ñèìâîë $ - âñòàâëÿåò òåêóùèé àäðåñ ïðîãðàììû.</a>
  144. <a href="#9.20">9.20   Êëþ÷åâîå ñëîâî static è îïåðàòîð ::.</a>
  145. <a href="#9.21">9.21   Îïåðàòîð sizeof.</a>
  146. <a href="#9.22">9.22   Ìåòêè ïåðåõîäà.</a>
  147. <A name=contents10>
  148. <a href="#10.1">10.    Àññåìáëåð.
  149. 10.1   Ïîääåðæêà êîìàíä àññåìáëåðà.</a>
  150. <a href="#10.2">10.2   Êëþ÷åâîå ñëîâî asm.</a>
  151. <a href="#10.3">10.3   Ïðåôèêñ dup - ïîâòîðåíèå èíñòðóêöèé DB/DW/DD.</a>
  152. <a href="#10.4">10.4   Èíñòðóêöèè ïðîöåññîðà Pentium III.</a>
  153. <A name=contents11>
  154. <a href="#11.1">11.    Ïðîöåäóðû.
  155. 11.1   Òèïû ïðîöåäóð, ôóíêöèé è ìàêðîêîìàíä.</a>
  156. <a href="#11.2">11.2   Ñòåêîâûå ïðîöåäóðû.</a>
  157. <a href="#11.3">11.3   Ðåãèñòðîâûå ïðîöåäóðû.</a>
  158. <a href="#11.4">11.4   Äèíàìè÷åñêèå ïðîöåäóðû.</a>
  159. <a href="#11.4.1">11.4.1 Óñòàíîâêà äèíàìè÷åñêîé ïðîöåäóðû â îïðåäåëåííîå ìåñòî ïðîãðàììû.</a>
  160. <a href="#11.5">11.5   inline-ïðîöåäóðû.</a>
  161. <a href="#11.5.1">11.5.1 Äðóãîå ïðèìåíåíèå inline.</a>
  162. <a href="#11.6">11.6   Ïðîöåäóðû îáðàáîòêè ïðåðûâàíèé.</a>
  163. <a href="#11.7">11.7   Çàìåíà return íà goto.</a>
  164. <a href="#11.8">11.8   Âîçâðàùàåìûå çíà÷åíèÿ.</a>
  165. <a href="#11.9">11.9   Îáúÿâëåíèå ïàðàìåòðîâ â ðåãèñòðîâûõ ïðîöåäóðàõ.</a>
  166. <a href="#11.10">11.10  Îáúÿâëåíèå ïàðàìåòðîâ â ñòåêîâûõ ïðîöåäóðàõ.</a>
  167. <a href="#11.11">11.11  Èñïîëüçîâàíèå ìàêðîêîìàíä.</a>
  168. <a href="#11.12">11.12  Ïåðåäà÷à ïàðàìåòðîâ â ñòåêîâûå ïðîöåäóðû ÷åðåç ðåãèñòðû.</a>
  169. <a href="#11.13">11.13  Âûçîâ ïðîöåäóð ñ àäðåñîì â ðåãèñòðå.</a>
  170. <a href="#11.14">11.14  Âñòîåííûå â êîìïèëÿòîð ïðîöåäóðû.</a>
  171. <a href="#11.14.1">11.14.1 Ïðîöåäóðû ABORT, ATEXIT è EXIT.</a>
  172. <a href="#11.14.2">11.14.2 Ïðîöåäóðû inp/inportb, inport, inportd, outp/outportb, outport è
  173.         outportd.</a>
  174. <a href="#11.14.3">11.14.3 Ïðîöåäóðû äëÿ ðàáîòû ñ âåùåñòâåííûìè ÷èñëàìè.</a>
  175. <a href="#11.15.1">11.15  Êëàññû.
  176. 11.15.1 Îáúÿâëåíèå ïðîöåäóð â ñòðóêòóðàõ.</a>
  177. <a href="#11.15.2">11.15.2 Íàñëåäîâàíèå.</a>
  178. <a href="#11.15.3">11.15.3 Íàñëåäîâàíèå ïðîöåäóð.</a>
  179. <A name=contents12>
  180. <a href="#12.1">12.    Òèïû âûõîäíûõ ôàéëîâ.
  181. 12.1   Âûõîäíûå ôàéëû òèïà COM.</a>
  182. <a href="#12.2">12.2   Âûõîäíûå ôàéëû òèïà EXE.</a>
  183. <a href="#12.3">12.3   Âûõîäíîé ôàéë *.EXE ñ ìîäåëüþ ïàìÿòè tiny.</a>
  184. <a href="#12.4">12.4   Îáúåêòíûé âûõîäíîé ôàéë OBJ.</a>
  185. <a href="#12.5.1">12.5   COM ôàéë symbiosis.
  186. 12.5.1 ÑÈÌÁÈÎÇ - ÷òî ýòî òàêîå?</a>
  187. <a href="#12.5.2">12.5.2 Êàê ýòî äåëàòü.</a>
  188. <a href="#12.5.3">12.5.3 Èñïîëüçîâàíèå.</a>
  189. <a href="#12.5.4">12.5.4 Çëîóïîòðåáëåíèÿ.</a>
  190. <a href="#12.6">12.6   SYS - äðàéâåðû óñòðîéñòâ.</a>
  191. <a href="#12.7">12.7   Êîìïèëÿöèÿ êîäà ðàñøèðèòåëåé ROM-BIOS.</a>
  192. <a href="#12.8.1">12.8   32-áèòíûå ôàéëû.
  193. 12.8.1 32-áèòíûé êîä ïîä DOS.</a>
  194. <a href="#12.8.2">12.8.2 32-áèòíûé êîä ïîä Windows.</a>
  195. <a href="#12.8.3">12.8.3 Âûçîâ API ïðîöåäóð ïî îðäèíàëàì.</a>
  196. <a href="#12.8.4">12.8.4 Ñîçäàíèå DLL ïîä Windows.</a>
  197. <a href="#12.8.5">12.8.5 Èíèöèàëèçàöèÿ DLL ïðè çàãðóçêå.</a>
  198. <a href="#12.8.6">12.8.6 Êîìïèëÿöèÿ ðåñóðñîâ.</a>
  199. <a href="#12.9">12.9   Âûõîäíûå ôàéëû äëÿ MeOS.</a>
  200. <A name=contents13>
  201. <a href="#13.1">13.    Ïðèëîæåíèÿ.
  202. 13.1   Ïîèñê âêëþ÷àåìûõ ôàéëîâ.</a>
  203. <a href="#13.2">13.2   Ðåãèñòðû, êîòîðûå äîëæíû áûòü ñîõðàíåíû.</a>
  204. <a href="#13.3">13.3   C--.ini ôàéë.</a>
  205. <a href="#13.4">13.4   startup.h-- ôàéë.</a>
  206. <a href="#13.5">13.5   mainlib.ldp ôàéë.</a>
  207. <a href="#13.6">13.6   C-- ñèìâîëû.</a>
  208. </div>
  209.  
  210.  
  211. <h2 id=intro>1. Âñòóïëåíèå.
  212.  
  213.   1.1 Èñòîðèÿ ñîçäàíèÿ è ðàçâèòèÿ.
  214. </h2>
  215.  
  216.       Àâòîðîì ÿçûêà SPHINX C-- ÿâëÿåòñÿ Peter Cellik (CANADA). Ïîñëåäíÿÿ
  217.   àâòîðñêàÿ âåðñèÿ SPHINX C-- v0.203 îò 28.Oct.96. Ê ñîæàëåíèþ àâòîð
  218.   îòêàçàëñÿ îò äàëüíåéøåãî ðàçâèòèÿ ÿçûêà. Ñ 1998 ãîäà, óæå ïî÷òè óìåðøèé
  219.   ïðîåêò, ïîäõâàòèë Ìèõàèë Øåêåð (Ðîññèÿ). Èçíà÷àëüíî êîìïèëÿòîð áûë freeware
  220.   (è äàæå greenware, êàê åãî íàçûâàë Peter Cellik). Òàêèì ñòàòóñ êîìïèëÿòîðà
  221.   îñòàëñÿ è ïîíûíå.
  222.  
  223.       Ïåðâîíà÷àëüíî êîìïèëÿòîð ìîã ñîçäàâàòü òîëüêî *.com ôàéëû è áûë
  224.   ðàññ÷èòàí íà ñîçäàíèå íåáîëüøèõ demo-ïðîãðàìì è ðåçèäåíòîâ (TSR). Â
  225.   äàëüíåéøåì âîçìîæíîñòè êîìïèëÿòîðà ðàñøèðÿëèñü, òàê êàê ýòîãî òðåáîâàëî
  226.   íàøå áóðíîå âðåìÿ.
  227.  
  228.       Ïðè ðàçâèòèè êîìïèëÿòîðà, áûëî ñòðåìëåíèå ïðèäåðæèâàòüñÿ ñëåäóþùèõ
  229.   ïðèíöèïîâ:
  230.  
  231.       1. Ìàêñèìàëüíî âîçìîæíàÿ ñîâìåñòèìîñòü ñèíòàêñèñà ñ ïîñëåäíåé âåðñèåé
  232.   êîìïèëÿòîðà íàïèñàííîãî Peter Cellik. Ýòî äàâàëî âîçìîæíîñòü ñ ìèíèìàëüíûìè
  233.   çàòðàòàìè (à ÷àùå âñåãî áåç âñÿêèõ çàòðàò) àäàïòèðîâàòü ïðîãðàììû,
  234.   íàïèñàííûå äëÿ 0.203 âåðñèè êîìïèëÿòîðà, ê ïîñëåäíåé íà ýòîò ìîìåíò âåðñèè
  235.   êîìïèëÿòîðà.
  236.  
  237.       2. Ñáëèçèòü ñèíòàêñèñ êîìïèëÿòîðà ñî ñòàíäàðòíûì ÿçûêîì C. Ýòî ìîãëî
  238.   çíà÷èòåëüíî îáëåã÷èòü ïåðåíîñ ïðîãðàìì íàïèñàííûõ íà C.
  239.  
  240.       3. Òàêæå ïðèëàãàëèñü óñèëèÿ, äëÿ òîãî, ÷òîáû ÷åëîâåê çíàþùèé òîëüêî
  241.   àññåìáëåð ìîã áû ñ ìèíèìàëüíûìè çàòðàòàìè îñâîèòü C--.
  242.  
  243.       Âîò ýòè, çà÷àñòóþ ïðîòèâîðå÷àùèå äðóã äðóãó ïðèíöèïû, âëèÿëè íà âûáîð
  244.   ðåàëèçàöèè âîçìîæíîñòåé êîìïèëÿòîðà. Íàñêîëüêî ýòî óäàëîñü - ñóäèòü Âàì.
  245.  
  246.       Åñëè ó Âàñ åñòü ïðåäëîæåíèÿ è èäåè ïî óëó÷øåíèþ êîìïèëÿòîðà - ïèøèòå.
  247.   Ìîé e-mail <a href="mailto:sheker@mail.ru">sheker@mail.ru</a> . ß ñ óäîâîëüñòâèåì âûñëóøàþ Âàøè ïðåäëîæåíèÿ, íî
  248.   íå ãàðàíòèðóþ, ÷òî âñå îíè áóäóò ðåàëèçîâàíû. Åñëè ðåàëèçîâûâàòü âñå
  249.   ïîñòóïàþùèå ïðåäëîæåíèÿ, òî êîìïèëÿòîð ïðåâðàòèòñÿ â ñâàëêó. Íî åñëè Âàøå
  250.   ïðåäëîæåíèå áóäåò öåííûì (íà ìîé âçãëÿä, òàê ÷òî Âàì ïðèäåòñÿ ñâîå
  251.   ïðåäëîæåíèå õîðîøî àðãóìåíòèðîâàòü) è åãî áóäåò âîçìîæíûì ðåàëèçîâàòü, îíî
  252.   áåç ñîìíåíèÿ íàéäåò ìåñòî â êîìïèëÿòîðå.
  253. <a href="#contents"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  254.  
  255.  
  256. <h2 id=1.2>
  257.   1.2 ×òî òàêîå C--?
  258. </h2>
  259.  
  260.       C-- áûë ðàçðàáîòàí, äëÿ òîãî ÷òîáû ñòðîèòü ìàëåíüêèå è áûñòðûå
  261.   ïðîãðàììû. Ýòî íàèáîëåå ïîäõîäèò äëÿ ñîçäàíèÿ ðåçèäåíòíûõ ïðîãðàìì (TSR),
  262.   ïðîãðàìì, òðåáóþùèõ îáðàáîòêó ïðåðûâàíèé èëè ïðîãðàìì ó êîòîðûõ îãðàíè÷åíû
  263.   ðåñóðñû.
  264.  
  265.       C-- çàíèìàåò ïðîìåæóòî÷íîå ïîëîæåíèå ìåæäó ñè è àññåìáëåðîì.  ñâÿçè ñ
  266.   ýòèì ïðîìåæóòî÷íûì ïîëîæåíèåì, Âàì, äëÿ òîãî ÷òîáû ïèñàòü ïðîãðàììû íà C--,
  267.   íåîáõîäèìî çíàòü è àññåìáëåð è ñè. Åñëè Âàì íàäîåëî âîçèòüñÿ ñ îãðîìíûìè
  268.   àññåìáëåðíûìè ëèñòèíãàìè, à èçëèøíÿÿ ñòðîãîñòü ÿçûêà C Âàñ óãíåòàåò, òî ýòîò
  269.   ÿçûê äëÿ ÂÀÑ.
  270.  
  271.       Ñåé÷àñ êîìïèëÿòîð C-- ìîæåò ñîçäàâàòü 32-áèòíûå ïðîãðàììû ïîä Windows
  272.   (EXE-ôàéëû ôîðìàòà PE) è 32-áèòíûå ïðîãðàììû ïîä DOS (LE-ôîðìàò). Èìååò
  273.   âñòðîåííûé êîìïèëÿòîð ðåñóðñîâ è äèçàññåìáëåð äëÿ ãåíåðàöèè ëèñòèíãà
  274.   îòêîìïèëèðîâàííîãî ôàéëà. Ïîääåðæèâàåò àññåìáëåðíûå èíñòðóêöèè ïðîöåññîðà
  275.   Pentium III è àññåìáëåðíûå èíñòðóêöèè FPU. Êîìïèëÿòîð ìîæåò ãåíåðèðîâàòü
  276.   îòëàäî÷íóþ èíôîðìàöèþ ñîâìåñòèìóþ ñ îòëàä÷èêàìè ôèðìû Borland. Êîìïèëÿòîð
  277.   ìîæåò ñîçäàâàòü îáúåêòíûå ôàéëû (obj), íî òîëüêî äëÿ DOS ïðîãðàìì.
  278.  
  279.       C-- ðàçðàáîòàí òîëüêî äëÿ èñïîëüçîâàíèÿ íà êîìïüþòåðàõ ñ ïðîöåññîðàìè
  280.   ñîâìåñòèìûìè ñ ñåìåéñòâîì 80x86. Êîìïèëÿòîð ìîæåò ðàáîòàòü òîëüêî ñ
  281.   îïåðàöèîííûìè ñèñòåìàìè DOS è ñåìåéñòâîì Windows.
  282. <a href="#contents"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  283.  
  284.  
  285. <h2 id=1.3>
  286.   1.3 Êàê óñòàíîâèòü C--.
  287. </h2>
  288.  
  289.       Êîìïèëÿòîðó C-- äëÿ ðàáîòû íóæíû ñîâñåì íåçíà÷èòåëüíûå ðåñóðñû:
  290.   ïðîöåññîð 386 èëè ëó÷øå, ÷óòü áîëåå 1 Ìá äèñêîâîãî ïðîñòðàíñòâà è 4Ìá
  291.   îïåðàòèâíîé ïàìÿòè. Êîìïèëÿòîð ìîæåò áûòü óñòàíîâëåí íà êîìïüþòåðû ñ
  292.   îïåðàöèîííîé ñèñòåìîé Windows 95 èëè ëó÷øå. Êîìïèëÿòîð òàêæå ìîæåò ðàáîòàòü
  293.   â ñðåäå ÷èñòîãî DOS.  îñíîâíîì ïàêåòå êîìïèëÿòîðà íàõîäèòñÿ 32-áèòíàÿ DOS
  294.   âåðñèÿ êîìïèëÿòîðà. Íà ñàéòå <a href="http://sheker.chat.ru">http://sheker.chat.ru</a> èëè
  295.   <a href="http://c--sphinx.narod.ru">http://c--sphinx.narod.ru</a> ìîæíî íàéòè è êîíñîëüíóþ âåðñèþ êîìïèëÿòîðà.
  296.   Êîíñîëüíàÿ âåðñèÿ êîìïèëÿòîðà ìîæåò ðàáîòàòü òîëüêî â ñðåäå Windows, íî
  297.   îíà, â îòëè÷èå îò DOS âåðñèè, ìîæåò ðàáîòàòü ñ äëèííûìè èìåíàìè èñõîäíûõ
  298.   ôàéëîâ.
  299.  
  300.       Óñòàíîâèòü êîìïèëÿòîð C-- íà Âàø êîìïüþòåð î÷åíü ïðîñòî. Ïðåäïîëîæèì,
  301.   ÷òî Âû ðåøèëè óñòàíîâèòü C-- íà äèñê C. Ñîçäàéòå íà äèñêå C äèðåêòîðèþ
  302.   (ïàïêó) ñ èìåíåì <b>C--</b> èëè ñ äðóãèì, óäîáíûì è ïîíÿòíûì äëÿ Âàñ èìåíåì
  303.   (íàïðèìåð, ÄÎÑîâñêîé êîìàíäîé: <b>MD C--</b> èëè äðóãèì äîñòóïíûì Âàì ñïîñîáîì).
  304.   Çàòåì ñ ñàéòà <a href="http://sheker.chat.ru">http://sheker.chat.ru</a> èëè <a href="http://c--sphinx.narod.ru">http://c--sphinx.narod.ru</a> ñêà÷àéòå
  305.   ôàéëû full_c--.zip è ful_c--2.zip è ðàçàðõèâèðóéòå èõ â ýòîé äèðåêòîðèè.
  306.   Çàòåì â ôàéëå autoexec.bat ìîæíî ïðîïèñàòü ïóòü ê äèðåêòîðèè ñ
  307.   êîìïèëÿòîðîì. È âñå. Êîìïèëÿòîð ãîòîâ ê ðàáîòå. Åñëè Âû äîáàâëÿëè ïóòü ê
  308.   êîìïèëÿòîðó â ôàéë autoexec.bat, òî Âàì ïðèäåòñÿ ïåðåãðóçèòü îïåðàöèîííóþ
  309.   ñèñòåìó.
  310.  
  311.       Ïåðåìåííàÿ îêðóæåíèÿ äëÿ êîìïèëÿòîðà C-- çàäàåòñÿ ëèáî èç êîìàíäíîé
  312.   ñòðîêè ëèáî èç êîìàíäíîãî ôàéëà (ëó÷øå âñåãî åå ïðîïèñàòü â autoexec.bat).
  313.   Ýòà ïåðåìåííàÿ äîëæíà óêàçûâàòü êîìïèëÿòîðó, ãäå íàõîäÿòñÿ åãî áèáëèîòå÷íûå
  314.   ôàéëû. Ïðèìåð:
  315.  
  316.     <b>set C--=c:\c--\lib</b>
  317.  
  318.   Áîëüøîé íåîáõîäèìîñòè â ïåðåìåííîé îêðóæåíèÿ äëÿ ñåãîäíÿøíåé âåðñèè
  319.   êîìïèëÿòîðà íåò. Ñóùåñòâóåò íåñêîëüêî äðóãèõ ñïîñîáîâ, óêàçàòü êîìïèëÿòîðó
  320.   ìåñòî ðàñïîëîæåíèÿ áèáëèîòåê. Ïîýòîìó îïðåäåëÿòü èëè íå îïðåäåëÿòü
  321.   ïåðåìåííóþ îêðóæåíèÿ äåëî âàøåãî âêóñà è ïðèâû÷åê.
  322. <a href="#contents"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  323.  
  324.  
  325. <h2 id=2.1>
  326. 2. Óïðàâëåíèå êîìïèëÿöèåé.
  327.  
  328.   2.1 Ïàðàìåòðû êîìàíäíîé ñòðîêè êîìïèëÿòîðà C--.
  329. </h2>
  330.  
  331.       Ôîðìàò êîìàíäíîé ñòðîêè âûçîâà êîìïèëÿòîðà C--:
  332.  
  333.   C-- [Ïàðàìåòðû] [ÈÌß INI ÔÀÉËÀ] [ÈÌß ÈÑÕÎÄÍÎÃÎ ÔÀÉËÀ]
  334.  
  335.       Èìÿ èñõîäíîãî ôàéëà ìîæíî çàäàâàòü áåç ðàñøèðåíèÿ. Êîìïèëÿòîð èùåò
  336.   ôàéë ñ ðàñøèðåíèåì <b>c--, cmm, c</b>.
  337.  
  338.       Ïàðàìåòðû âûäåëÿþòñÿ ïðåäøåñòâóþùèì ñèìâîëîì <b>/</b> èëè <b>-</b>.
  339.   Èíâåðòèðîâàòü ôóíêöèþ îïöèè ìîæíî çàâåðøàþùèì ñèìâîëîì <b>-</b>.
  340.  
  341.   Ñïèñîê ïîääåðæèâàåìûõ ïàðàìåòðîâ:
  342.  
  343.   <b>/0</b>          èñïîëüçîâàòü òîëüêî êîìàíäû 8086/8088 ïðîöåññîðà (óñòàíîâëåíî
  344.               ïî óìîë÷àíèþ ïðè êîìïèëÿöèè 16-áèòíûõ ïðîãðàìì).
  345.   <b>/1</b>          èñïîëüçîâàòü êîìàíäû 80186 ïðîöåññîðà.
  346.   <b>/2</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ 80286 ïðîöåññîðà.
  347.   <b>/3</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ 80386 ïðîöåññîðà.
  348.               (óñòàíîâëåíî ïî óìîë÷àíèþ äëÿ 32-áèòíûõ ïðîãðàìì).
  349.   <b>/4</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ 80486 ïðîöåññîðà.
  350.   <b>/5</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium ïðîöåññîðà.
  351.   <b>/6</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium MMX ïðîöåññîðà.
  352.   <b>/7</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium Pro ïðîöåññîðà.
  353.   <b>/8</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium II ïðîöåññîðà.
  354.   <b>/9</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium III ïðîöåññîðà
  355.               (ïîêà íå ðåàëèçîâàíî èç-çà îòñóòñòâèè èíôîðìàöèè).
  356.   <b>/A</b>          âûðàâíèâàíèå äàííûõ íà ÷åòíûé àäðåñ
  357.               ïî óìîë÷àíèþ ðàçðåøåíî, ïîääåðæèâàåò èíâåðñèþ
  358.   <b>/AC</b>         âûðàâíèâàíèå àäðåñà íà÷àëà öèêëîâ
  359.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  360.               èìååò ñìûñë òîëüêî íà ïðîöåññîðàõ Pentium+
  361.   <b>/AL</b>=##      óñòàíîâèòü çíà÷åíèå áàéòà çàïîëíåíèÿ ïðè âûðàâíèâàíèè äàííûõ
  362.               ïî óìîë÷àíèþ 0.
  363.   <b>/AP</b>         âûðàâíèâàíèå àäðåñà íà÷àëà ïðîöåäóð.
  364.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  365.               èìååò ñìûñë òîëüêî íà ïðîöåññîðàõ Pentium è ëó÷øå
  366.   <b>/ARGC</b>       âñòàâèòü áëîê ðàçáîðà êîìàíäíîé ñòðîêè
  367.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  368.   <b>/AS</b>         âûðàâíèâàíèå â ñòðóêòóðàõ.
  369.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  370.   <b>/AT</b>         âñòàâèòü áëîê ïîääåðæêè <b>ATEXIT</b> ïðîöåäóðû
  371.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  372.   <b>/C</b>          âñòàâèòü áëîê èãíîðèðîâàíèÿ <b>CTRL-C</b>
  373.               ïî óìîë÷àíèþ îòêëþ÷åí, ïîääåðæèâàåò èíâåðñèþ
  374.               èìååò ñìûñë òîëüêî ïîä DOS ïðîãðàììû
  375.   <b>/CRI</b>        ïðîâåðÿòü âêëþ÷àåìûå ôàéëû íà ïîâòîðíóþ çàãðóçêó
  376.               ïî óìîë÷àíèþ âêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  377.   <b>/CPA</b>        î÷èñòêà post-îáëàñòè äàííûõ
  378.   <b>/D32</b>        ñîçäàòü EXE ôàéë (32 áèòíûé êîä ïîä DOS)
  379.               ïî óìîë÷àíèþ COM
  380.   <b>/D</b>=idname   îïðåäåëèòü èäåíòèôèêàòîð äëÿ óñëîâíîé êîìïèëÿöèè
  381.               ïî óìîë÷àíèþ íåò
  382.   <b>/DBG</b>        ãåíåðèðîâàòü îòëàäî÷íóþ èíôîðìàöèþ
  383.               ïî óìîë÷àíèþ íåò
  384.   <b>/DE</b>         âðåìåííîå ðàñøèðåíèå ðàçðÿäíîñòè ïîñëå óìíîæåíèÿ
  385.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  386.   <b>/DLL</b>        ñîçäàòü DLL äëÿ Windows32
  387.               ïî óìîë÷àíèþ COM
  388.   <b>/ENV</b>        ñîõðàíåíèå àäðåñà ïåðåìåííûõ îêðóæåíèÿ
  389.   <b>/EXE</b>        ñîçäàòü EXE ôàéë äëÿ DOS (ìîäåëü SMALL)
  390.               ïî óìîë÷àíèþ COM
  391.   <b>/HELP /H /?</b> ñïðàâêà, ýòà èíôîðìàöèÿ
  392.   <b>/IA</b>         èìåíà àññåìáëåðíûõ èíñòðóêöèé ÿâëÿþòñÿ èäåíòèôèêàòîðàìè
  393.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  394.   <b>/IND</b>=name   èìïîðò èìåí èç ôàéëà <b>name</b>.
  395.   <b>/IP</b>=path    çàäàòü ïóòü ïîèñêà âêëþ÷àåìûõ ôàéëîâ
  396.               ïî óìîë÷àíèþ íåò
  397.   <b>/IV</b>         èíèöèàëèçèðîâàòü âñå ïåðåìåííûå
  398.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  399.   <b>/J0</b>         íå äåëàòü íà÷àëüíûé jump íà main()
  400.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  401.               Â COM-ôàéëàõ íå ñîçäàåò jmp íà main. Â îñòàëüíûõ íå ñîçäàåòñÿ
  402.               áëîê íà÷àëüíîé èíèöèàëèçàöèè ïðîãðàììû, à óïðàâëåíèå
  403.               ïåðåäàåòñÿ ñðàçó íà main.
  404.   <b>/J1</b>         äåëàòü êîðîòêèé jump íà main()
  405.               ïî óìîë÷àíèþ íåò
  406.               èìååò ñìûñë òîëüêî â COM-ôàéëàõ
  407.   <b>/J2</b>         äåëàòü jump íà main()
  408.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  409.               èìååò ñìûñë òîëüêî â COM-ôàéëàõ
  410.   <b>/LAI</b>        ñïèñîê ïîääåðæèâàåìûõ àññåìáëåðíûõ èíñòðóêöèé
  411.   <b>/LRS</b>        çàãðóæàòü ÷èñëîâûå êîíñòàíòû ÷åðåç ñòåê.
  412.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  413.   <b>/LST</b>        ñîçäàòü àññåìáëåðíûé ëèñòèíã
  414.   <b>/ME</b>         ïîêàçàòü ìîé àäðåñ è èìÿ
  415.   <b>/MEOS</b>       ñîçäàòü èñïîëíÿåìûé ôàéë äëÿ MeOS
  416.               ïî óìîë÷àíèþ COM
  417.   <b>/MER</b>=##     óñòàíîâèòü ìàêñèìàëüíîå ÷èñëî îøèáîê
  418.               ïî óìîë÷àíèþ 16
  419.   <b>/MIF</b>=file   îïðåäåëèòü èìÿ ãëàâíîãî êîìïèëèðóåìîãî ôàéëà
  420.   <b>/NS</b>         çàïðåòèòü ïîäêëþ÷àòü stub ôàéëîâ
  421.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  422.   <b>/NW</b>=##      âûáîðî÷íîå îòêëþ÷åíèå ïðåäóïðåæäåíèé
  423.   <b>/OBJ</b>        ñîçäàòü OBJ ôàéë
  424.               òîëüêî 16 áèòíûé êîä.
  425.               ïî óìîë÷àíèþ COM
  426.   <b>/OC</b>         îïòèìèçèðîâàòü ïî ðàçìåðó êîäà
  427.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  428.   <b>/ON</b>         îïòèìèçàöèÿ ÷èñåë
  429.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  430.   <b>/OS</b>         îïòèìèçàöèÿ ïî ñêîðîñòè âûïîëíåíèÿ
  431.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  432.   <b>/OST</b>        îïòèìèçàöèÿ ñòðîêîâûõ èäåíòèôèêàòîðîâ
  433.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  434.   <b>/P</b>          âñòàâèòü áëîê ðàçáîðêè êîìàíäíîé ñòðîêè
  435.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  436.   <b>/R</b>          âñòàâèòü áëîê óìåíüøàþùèé ðàçìåð äîñòóïíîé ïàìÿòè.
  437.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  438.               èìååò ñìûñë òîëüêî â DOS-ôàéëàõ
  439.   <b>/S</b>=#####    óñòàíîâèòü ðàçìåð ñòåêà
  440.               ïî óìîë÷àíèþ 2048
  441.   <b>/SA</b>=####    íà÷àëüíîå ñìåùåíèå àäðåñà çàïóñêà ïðîãðàììû
  442.               èìååò ñìûñë òîëüêî â COM-ôàéëàõ, ïî óìîë÷àíèþ 0x100
  443.   <b>/SOBJ</b>       ñîçäàòü âåäîìûé OBJ ôàéë
  444.               ïî óìîë÷àíèþ COM
  445.   <b>/STM</b>        ïåðåíåñòè áëîê startup êîäà â ïðîöåäóðó main
  446.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  447.               èìååò ñìûñë òîëüêî â COM-ôàéëàõ
  448.   <b>/SUV</b>=####   íà÷àëüíûé àäðåñ íå èíèöèàëèçèðîâàííûõ ïåðåìåííûõ, ïðè
  449.               èñïîëüçîâàíèè èìè startup êîäà.
  450.               èìååò ñìûñë òîëüêî â COM-ôàéëàõ, ïî óìîë÷àíèþ ðàâåí /SA
  451.   <b>/SYM</b>        íàäñòðîéêà äëÿ COM ôàéëà
  452.               ïî óìîë÷àíèþ COM
  453.   <b>/SYS</b>        ñîçäàòü äðàéâåð óñòðîéñòâ (SYS)
  454.               ïî óìîë÷àíèþ COM
  455.   <b>/TEXE</b>       ñîçäàòü EXE ôàéë äëÿ DOS (ìîäåëü TINY)
  456.               ïî óìîë÷àíèþ COM
  457.   <b>/UL</b>         èñïîëüçîâàòü lea ïðè îïòèìèçàöèè ñëîæåíèÿ ðåãèñòðîâ.
  458.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  459.   <b>/UST</b>        èñïîëüçîâàòü startup êîä äëÿ ïåðåìåííûõ.
  460.               èìååò ñìûñë òîëüêî â COM-ôàéëàõ
  461.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  462.   <b>/W</b>          ðàçðåøèòü ïðåäóïðåæäåíèÿ
  463.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  464.   <b>/W32</b>        ñîçäàòü EXE ôàéë äëÿ Windows32 GUI
  465.               ïî óìîë÷àíèþ COM
  466.   <b>/W32C</b>       ñîçäàòü EXE ôàéë äëÿ Windows32 console
  467.               ïî óìîë÷àíèþ COM
  468.   <b>/WBSS</b>       ïîìåùàòü íå èíèöèàëèçèðîâàííûå äàííûå â îòäåëüíóþ ñåêöèþ.
  469.               ïî óìîë÷àíèþ äëÿ /w32 ðàçðåøåíî, äëÿ îñòàëüíûõ çàïðåùåíî.
  470.               ïîääåðæèâàåò èíâåðñèþ
  471.   <b>/WF</b>=file    ïåðåíàïðàâèòü âûâîä ïðåäóïðåæäåíèé â ôàéë.
  472.               ïî óìîë÷àíèþ íåò
  473.   <b>/WFA</b>        èñïîëüçîâàòü áûñòðûå âûçîâû API ïðîöåäóð
  474.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  475.               òîëüêî ïîä windows
  476.   <b>/WFU</b>        ñîçäàâàòü òàáëèöó ïåðåìåùåíèé (äëÿ Windows32)
  477.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  478.               òîëüêî ïîä windows
  479.               äëÿ DLL óñòàíàâëèâàåòñÿ â äà
  480.   <b>/WIB</b>=#####  óñòàíîâèòü àäðåñ image base
  481.               ïî óìîë÷àíèþ 0x400000
  482.   <b>/WMB</b>        ñîçäàâàòü Windows-ôàéë ñ åäèíûì áëîêîì
  483.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  484.               òîëüêî ïîä windows
  485.               äëÿ DLL óñòàíàâëèâàåòñÿ â íåò
  486.   <b>/WORDS</b>      âûäàòü ñïèñîê çàðåçåðâèðîâàííûõ èäåíòèôèêàòîðîâ
  487.   <b>/WS</b>=name    óêàçûâàåò èìÿ ôàéëà èñïîëüçóåìîãî â êà÷åñòâå <b>stub</b> ïîä windows.
  488.   <b>/X</b>          çàïðåòèòü âñòàâëÿòü â êîä <b>SPHINXC--</b> ñèãíàòóðó
  489.               ïî óìîë÷àíèþ ðàçðåøåíî, ïîääåðæèâàåò èíâåðñèþ
  490.               îòêëþ÷àåòñÿ åñëè åñòü <b>J0</b>
  491.  
  492.       Ïðèìå÷àíèå: âûðàæåíèå <i>ïîääåðæèâàåò èíâåðñèþ</i> îçíà÷àåò, ÷òî äëÿ äàííîé
  493.   îïöèè ìîæíî èñïîëüçîâàòü è ïðîòèâîïîëîæíîå çíà÷åíèå ñ ïîìîùüþ ñèìâîëà <b>-</b>
  494.   ïîñëå îïöèè. Ïðèìåð:
  495.  
  496.   <b>/WFA-</b>
  497.  
  498.        Ïàðàìåòðû êîìàíäíîé ñòðîêè ìîæíî ïèñàòü êàê áîëüøèìè, òàê è
  499.   ìàëåíüêèìè áóêâàìè.
  500. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  501.  
  502.  
  503. <h2 id=2.1.1>
  504.     2.1.1 /ON - Îïòèìèçàöèÿ ÷èñëîâûõ âûðàæåíèé.
  505. </h2>
  506.  
  507.         Ïðè âêëþ÷åíèè â êîìàíäíóþ ñòðîêó îïöèè <b>/ON</b> èëè â ôàéë C--.INI ñòðî÷êè
  508.     <b>ON</b>, êîìïèëÿòîð áóäåò àíàëèçèðîâàòü îïåðàöèè íàä ÷èñëàìè è ãäå ýòî
  509.     ìîæíî, ñîêðàùàòü ÷èñëî îïåðàöèé. Íàïðèìåð:
  510.  
  511.      Ñòðîêà äî îïòèìèçàöèè  | Ïîñëå îïòèìèçàöèè
  512.     -----------------------------------------------
  513.       AX = var + 7 - 3;     | AX = var + 4;
  514.       AX = var * 2 * 5;     | AX = var * 10;
  515.       AX = var * 2 / 4;     | AX = var / 2;
  516.       AX = var * 10 / 2;    | AX = var * 5;
  517.       AX = var / 2 / 3;     | AX = var / 6;
  518.       AX = var / 4 * 8;     | AX = var * 2;
  519.       AX = var / 16 * 16;   | AX = var;
  520.  
  521.         Âîçìîæíûå îòðèöàòåëüíûå ïîñëåäñòâèÿ:
  522.         Ïðèìåíåíèå ýòîé îïòèìèçàöèè ìîæåò èìåòü è íåãàòèâíûå ïîñëåäñòâèÿ.
  523.     Íàïðèìåð, åñëè Âàì íóæíî âûðîâíÿòü çíà÷åíèå ïåðåìåííîé íà ãðàíèöó
  524.     ïàðàãðàôà, Âû íàïèøèòå ñòðîêó:
  525.  
  526.     var = var / 16 * 16;
  527.  
  528.     íî ïîñëå îïòèìèçàöèè áóäåò
  529.  
  530.     var = var;
  531.  
  532.     ò.å. âûðàâíèâàíèå íå áóäåò  ïðîèçâåäåíî. Ýòîãî ìîæíî èçáåæàòü, åñëè
  533.     ðàçáèòü ýòî âûðàæåíèå íà äâà:
  534.  
  535.     var = var / 16;
  536.     var = var * 16;
  537.  
  538.     òîãäà îïòèìèçàöèÿ íå áóäåò ïðîèçâåäåíà. Íî äëÿ ïîëó÷åíèÿ áîëåå
  539.     êîìïàêòíîãî êîäà ëó÷øå áóäåò çàïèñàòü òàê:
  540.  
  541.     AX = var;
  542.     AX = AX / 16;
  543.     AX = AX * 16;
  544.     var = AX;
  545. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  546.  
  547.  
  548. <h2 id=2.1.2>
  549.     2.1.2 /DE - Âðåìåííîå ðàñøèðåíèå ðàçðÿäíîñòè ïåðåìåííîé.
  550. </h2>
  551.  
  552.         Êàê èçâåñòíî, ïîñëå óìíîæåíèÿ ìîæåò ïðîèçîéòè ïåðåïîëíåíèå, ò.å
  553.     ðàçðÿäíîñòü ðåçóëüòàòà ìîæåò ïðåâûñèòü ðàçðÿäíîñòü èñõîäíûõ îïåðàíäîâ è
  554.     ïðîèçîéäåò èñêàæåíèå ðåçóëüòàòà. ×àñòè÷íî ðåøèòü ýòó ïðîáëåìó Âàì ïîìîæåò
  555.     îïöèÿ êîìàíäíîé ñòðîêè <b>/DE</b> èëè ñòðîêà <b>DE</b> â ôàéëå C--.INI. Ïîñëå êîìàíäû
  556.     óìíîæåíèÿ êîìïèëÿòîð áóäåò ïðîñìàòðèâàòü îñòàòîê ñòðîêè è åñëè îáíàðóæèò,
  557.     ÷òî ðàñøèðåíèå ðàçðÿäíîñòè ìîæåò áûòü âîñòðåáîâàíî (âîñòðåáîâàòü
  558.     ðàñøèðåííóþ ðàçðÿäíîñòü ìîãóò îïåðàöèè äåëåíèÿ è âû÷èñëåíèÿ îñòàòêà), òî
  559.     áóäóò ïðèíÿòû ìåðû ïî åå ñîõðàíåíèþ. Íàïðèìåð:
  560.  
  561.       a = b*c+d/e; //çäåñü áóäåò âêëþ÷åíà ïîääåðæêà ðàñøèðåíèÿ ðàçðÿäíîñòè
  562.       a = b*c+d*e; //çäåñü ïîääåðæêè ðàñøèðåíèÿ ðàçðÿäíîñòè íå áóäåò.
  563.  
  564.         Îäíàêî ïðèìåíåíèå ýòîé îïöèè ìîæåò èìåòü è íåãàòèâíûå ïîñëåäñòâèÿ.
  565.     Ïîêàæó ýòî íà ïðèìåðå:
  566.  
  567.     ïóñòü èìååòñÿ âûðàæåíèå
  568.  
  569.       a = b * c / d;
  570.  
  571.     åñëè çíà÷åíèÿ ïåðåìåííûõ b = 0xC000, c = 0x1000, d=0x10, ïîñëå çàïóñêà
  572.     òàêàÿ ïðîãðàììà çàâèñíåò ñ ñîîáùåíèåì î òîì, ÷òî ïðîèçîøëî ïåðåïîëíåíèå
  573.     ïðè äåëåíèè.
  574. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  575.  
  576.  
  577. <h2 id=2.1.3>
  578.     2.1.3 /ARGC - Àëüòåðíàòèâíûé îáðàáîò÷èê êîìàíäíîé ñòðîêè.
  579. </h2>
  580.  
  581.         Îòëè÷èå ýòîãî îáðàáîò÷èêà êîìàíäíîé ñòðîêè îò <b>parsecommandline</b>
  582.     çàêëþ÷àåòñÿ â òîì, ÷òî ïðè âûçîâå <b>PARAMSTR(0)</b>; Âû ïîëó÷èòå àäðåñ ñòðîêè â
  583.     êîòîðîé óêàçàí ïóòü è èìÿ çàïóùåííîé ïðîãðàììû. Ñëåäóþùèå âûçîâû ýòîé
  584.     ïðîöåäóðû ñ óâåëè÷èâàþùèìñÿ ïàðàìåòðîì áóäóò âîçâðàùàòü àäðåñà ñëîâ
  585.     êîìàíäíîé ñòðîêè. À âûçîâ ïðîöåäóðû <b>PARAMCOUNT</b> âåðíåò Âàì ÷èñëî ñëîâ â
  586.     êîìàíäíîé ñòðîêå ïëþñ îäèí.
  587.  
  588.         Àëüòåðíàòèâíûé îáðàáîò÷èê êîìàíäíîé ñòðîêè âêëþ÷àåòñÿ äèðåêòèâîé
  589.     <b>?argc TRUE</b> èëè èç êîìàíäíîé ñòðîêè êîìïèëÿòîðà êëþ÷îì <b>/argc</b> èëè
  590.     ñòðî÷êîé <b>argc</b> â ôàéëå C--.INI.
  591. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  592.  
  593.  
  594. <h2 id=2.1.4>
  595.     2.1.4 /OST - ñëèÿíèå îäèíàêîâûõ ñòðîêîâûõ êîíñòàíò.
  596. </h2>
  597.  
  598.         Åñëè ýòîò ðåæèì îïòèìèçàöèè áóäåò àêòèâèçèðîâàí, òî êîìïèëÿòîð áóäåò
  599.     çàïîìèíàòü âñå ñòðîêîâûå êîíñòàíòû è ïðè îáíàðóæåíèè îäèíàêîâûõ â êîä
  600.     ôàéëà íå áóäåò âñòàâëåíà ïîâòîðíàÿ ñòðîêîâàÿ êîíñòàíòà, à áóäåò ñäåëàíà
  601.     ññûëêà íà ïåðâóþ, îáíàðóæåííóþ ðàíåå ñòðîêîâóþ êîíñòàíòó. Â îïòèìèçàöèè
  602.     ó÷àñòâóþò òîëüêî íåèìåíîâàííûå ñòðîêîâûå êîíñòàíòû. Ò.å. åñëè ìàññèâ èëè
  603.     ñòðóêòóðà áóäåò èíèöèàëèçèðîâàíû ñòðîêîé, òî òàêàÿ ñòðîêà íå áóäåò
  604.     ó÷àñòâîâàòü â ïðîöåññå èíèöèàëèçàöèè, òàê ýòà ñòðîêà ìîæåò áûòü èçìåíåíà
  605.     â ïðîöåññå ðàáîòû ïðîãðàììû. Ïðèìåð:
  606.  
  607.       char var="test";  //ýòà ñòðîêà íå áóäåò ó÷àñòâîâàòü â ïðîöåññå
  608.                         //îïòèìèçàöèè.
  609.  
  610.       void proc(){
  611.         WRITESTR("test");       // ýòà ñòðîêà áóäåò ó÷àñòâîâàòü â îïòèìèçàöèè.
  612.         AX="test";          // ïåðåìåííîé AX áóäåò ïðèñâîåí àäðåñ ñòðîêè,
  613.                             // êîòîðàÿ áûëà âñòàâëåíà â êîä ïðîãðàììû â
  614.                             // ïðåäûäóùåé ñòðîêå.
  615.       }
  616.  
  617.         Îáî âñåõ ñëó÷àÿõ îáíàðóæåíèÿ ïîâòîðíîé ñòðîêè êîìïèëÿòîð áóäåò
  618.     âûäàâàòü ïðåäóïðåæäåíèÿ.
  619.  
  620.         Âêëþ÷àåòñÿ ýòîò ðåæèì îïòèìèçàöèè ëèáî ñ êîìàíäíîé ñòðîêè <b>/ost</b>, ëèáî
  621.     äèðåêòèâîé <b>#pragma option ost</b>, ëèáî ñòðîêîé â ôàéëå c--.ini - <b>ost</b>.
  622.     Îòêëþ÷èòü, âêëþ÷åííûé ðàíåå, ýòîò ðåæèì ìîæíî äèðåêòèâîé <b>#pragma option ost-</b>.
  623. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  624.  
  625.  
  626. <h2 id=2.1.5>
  627.     2.1.5 /D - óñòàíîâêà èäåíòèôèêàòîðà â TRUE èç êîìàíäíîé ñòðîêè.
  628. </h2>
  629.  
  630.         Åñëè Âû íàïèñàëè ïðîãðàììó, êîòîðàÿ ìîæåò êîìïèëèðîâàòüñÿ ïî ðàçíîìó,
  631.     â çàâèñèìîñòè îò ñîñòîÿíèÿ íåêîòîðûõ èäåíòèôèêàòîðîâ (èñïîëüçóåòñÿ ðåæèì
  632.     óñëîâíîé êîìïèëÿöèè), òî Âàì î÷åíü ìîæåò ïðèãîäèòñÿ ýòà îïöèÿ.
  633.     Óñòàíàâëèâàÿ ñ êîìàíäíîé ñòðîêè ðàçëè÷íûå èäåíòèôèêàòîðû, Âû ìîæåòå
  634.     ïîëó÷àòü ðàçëè÷íûå âàðèàíòû ïðîãðàììû, íå ðåäàêòèðóÿ èñõîäíûé òåêñò
  635.     ïðîãðàììû.
  636.  
  637.         Èäåíòèôèêàòîð ââîäèòñÿ ñ êîìàíäíîé ñòðîêè êëþ÷îì <b>/d=idname</b>.
  638. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  639.  
  640.  
  641. <h2 id=2.1.6>
  642.     2.1.6 /IA - óïðîùåííûé ââîä àññåìáëåðíûõ èíñòðóêöèé.
  643. </h2>
  644.  
  645.         Ñòàëî âîçìîæíûì èñïîëüçîâàòü àññåìáëåðíûå èíñòðóêöèè áåç ïðåôèêñà <b>$</b>
  646.     è âíå áëîêà <b>asm</b>. Ýòîò ðåæèì âêëþ÷àåòñÿ: ñ êîìàíäíîé ñòðîêè îïöèåé <b>/ia</b>;
  647.     â ôàéëå êîíôèãóðàöèè ñòðîêîé <b>ia</b> èëè äèðåêòèâîé <b>#pragma option ia</b>.
  648.  
  649.         Êîãäà ýòîò ðåæèì âêëþ÷åí, âñå èìåíà àññåìáëåðíûõ èíñòðóêöèé ñòàíîâÿòñÿ
  650.     çàðåçåðâèðîâàííûìè ñëîâàìè, ò.å. Âû íå ñìîæåòå ýòè èìåíà èñïîëüçîâàòü â
  651.     êà÷åñòâå èìåí ïåðåìåííûõ èëè ïðîöåäóð. Àññåìáëåðíûå èíñòðóêöèè êîìïèëÿòîð
  652.     ðàñïîçíàåò íåçàâèñèìî îò òîãî, íàïèñàíû îíè ìàëåíüêèìè èëè áîëüøèìè
  653.     áóêâàìè.
  654. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  655.  
  656.  
  657. <h2 id=2.1.7>
  658.     2.1.7 /CRI - ïðîïóñê ïîâòîðíî âêëþ÷àåìîãî ôàéëà.
  659. </h2>
  660.  
  661.         ×àùå âñåãî, ïîâòîðíî âêëþ÷àòü ôàéë â êîìïèëèðóåìûé ïðîåêò, íåò
  662.     íåîáõîäèìîñòè, íî ýòî èíîãäà ïðîèñõîäèò èç-çà òîãî, ÷òî íåêîòîðûå
  663.     âêëþ÷àåìûå ôàéëû ñàìè âêëþ÷àþò äðóãèå ôàéëû. ×òîáû ýòîãî íå ïðîèñõîäèëî
  664.     ïðèõîäèòñÿ äåëàòü ïðîâåðêó íà ïîâòîðíóþ çàãðóçêó ôàéëà. Òåïåðü ýòó
  665.     ôóíêöèþ áåðåò íà ñåáÿ êîìïèëÿòîð è ó Âàñ îòïàäàåò íåîáõîäèìîñòü äåëàòü
  666.     ýòó ïðîâåðêó.
  667.  
  668.         Íî èíîãäà (î÷åíü ðåäêî) âîçíèêàåò ïîòðåáíîñòü ñäåëàòü ïîâòîðíîå
  669.     âêëþ÷åíèå ôàéëà. Äëÿ ýòîãî â êîìïèëÿòîðå åñòü îïöèÿ êîìàíäíîé ñòðîêè
  670.     <b>/cri-</b>, êîòîðàÿ çàïðåùàåò êîìïèëÿòîðó äåëàòü ïðîâåðêó íà ïîâòîðíîå
  671.     âêëþ÷åíèå. Ñîîòâåòñòâåííî, äëÿ c--.ini ôàéëà, ýòî ìîæíî ñäåëàòü ñòðîêîé
  672.     <b>cri-</b> èëè äèðåêòèâîé â êîìïèëèðóåìîì ôàéëå - <b>#pragma option cri-</b>.
  673. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  674.  
  675.  
  676. <h2 id=2.1.8>
  677.     2.1.8 /IND - èìïîðò èìåí ïðîöåäóð èç DLL.
  678. </h2>
  679.  
  680.         Åñëè Âû õîòèòå â ñâîåé ïðîãðàììå èñïîëüçîâàòü DLL, äëÿ êîòîðîé íåò
  681.     çàãîëîâî÷íîãî ôàéëà ñ îïèñàíèåì ïðîöåäóð, òî êîìïèëÿòîð ìîæåò
  682.     èìïîðòèðîâàòü èìåíà èç ýòîé DLL. Äëÿ ýòîãî Âàì íàäî óêàçàòü èìÿ ýòîé
  683.     áèáëèîòåêè ëèáî ÷åðåç îïöèþ êîìàíäíîé ñòðîêè <b>/ind=name.dll</b>, ëèáî â
  684.     ôàéëå INI ñòðîêîé 'ind=name.dll', ëèáî ÷åðåç äèðåêòèâó '#pragma option
  685.    ind=name.dll'.
  686.  
  687.         Ê íåäîñòàòêîì òàêîãî ñïîñîáà ïîëó÷åíèÿ èìåí ìîæíî îòíåñòè òî, ÷òî ïðè
  688.     êîìïèëÿöèè ïðîãðàììû áèáëèîòåêà, èç êîòîðîé èìïîðòèðóþòñÿ èìåíà,
  689.     îáÿçàòåëüíî äîëæíà ïðèñóòñòâîâàòü â êîìïüþòåðå. Òàêæå, åñëè èìåíà â
  690.     áèáëèîòåêå íàïèñàíû áåç ñóôôèêñà '@number', êîìïèëÿòîð íå áóäåò
  691.     êîíòðîëèðîâàòü ÷èñëî ïàðàìåòðîâ ïåðåäàâàåìûõ ïðîöåäóðå. È, ê ñîæàëåíèþ,
  692.     êîìïèëÿòîð óìååò èìïîðòèðîâàòü èìåíà èç áèáëèîòåê èìåþùèõ òîëüêî ôîðìàò
  693.     PE-ôàéëà.
  694. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  695.  
  696.  
  697. <h2 id=2.1.9>
  698.     2.1.9 /WS - çàäàòü èìÿ stub ôàéëà äëÿ ïðîãðàìì ïîä windows.
  699. </h2>
  700.  
  701.         Êàê èçâåñòíî, â ïðîãðàììàõ ïîä windows åñòü DOS çàãëóøêà, íàçûâàåìàÿ
  702.     stub, êîòîðîé ïåðåäàåòñÿ óïðàâëåíèå ïðè çàïóñêå òàêîé ïðîãðàììû â ÷èñòîì
  703.     DOS-å. Îáû÷íî òàêàÿ çàãëóøêà âûâîäèò íà ýêðàí ñîîáùåíèå î òîì, ÷òî ýòó
  704.     ïðîãðàììó íàäî çàïóñêàòü â ñðåäå windows.
  705.  
  706.         Âû ìîæåòå âìåñòî ñòàíäàðòíîãî stub èñïîëüçîâàòü ñâîé. Äëÿ ýòîãî Âàì
  707.     íåîáõîäèìî óêàçàòü èìÿ 16-áèòíîãî EXE-ôàéëà ëèáî ÷åðåç îïöèþ êîìàíäíîé
  708.     ñòðîêè <b>/ws=filename</b>, ëèáî ñòðîêîé â INI-ôàéëå <b>ws=filename</b>, ëèáî
  709.     äèðåêòèâîé <b>#pragma option ws=filename</b>.
  710.  
  711.         Òàêèì îáðàçîì, ó Âàñ ïîÿâèëàñü âîçìîæíîñòü ñîçäàâàòü ïðîãðàììû,
  712.     ðàáîòàþùèå è ïîä DOS è ïîä windows.
  713. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  714.  
  715.  
  716. <h2 id=2.1.10>
  717.     2.1.10 /WBSS - ðàçìåñòèòü íå èíèöèàëèçèðîâàííûå äàííûå â îòäåëüíîé ñåêöèè.
  718. </h2>
  719.  
  720.         Ñåêöèÿ <b>.bss</b> ñîçäàåòñÿ àâòîìàòè÷åñêè ïðè êîìïèëÿöèè ïðîãðàìì ñ êëþ÷îì
  721.     <b>/w32</b>. Åñëè Âû õîòèòå èìåòü ýòó ñåêöèþ è ïðè êîìïèëÿöèè ïðîãðàìì ñ
  722.     êëþ÷àìè <b>/w32c</b> èëè <b>/dll</b> Âàì íåîáõîäèìî äîáàâèòü ëèáî â êîìàíäíîé
  723.     ñòðîêå îïöèþ <b>/wbss</b>, ëèáî ñòðîêó <b>wbss</b> â INI-ôàéëå, ëèáî äèðåêòèâó
  724.     <b>#pragma option wbss</b>.
  725.  
  726.         Èñïîëüçîâàíèå ñåêöèè <b>.bss</b> ïðàêòè÷åñêè íå âëèÿåò íà ðàçìåð ïîëó÷àåìîãî
  727.     ôàéëà. Òåîðåòè÷åñêè, äëÿ ïðîöåññîðîâ, ó êîòîðûõ åñòü îòäåëüíûé êýø äëÿ
  728.     äàííûõ, èñïîëüçîâàíèå ñåêöèè <b>.bss</b>, äîëæíî ïîâûøàòü ñêîðîñòü ðàáîòû
  729.     ïðîãðàììû.
  730. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  731.  
  732.  
  733. <h2 id=2.1.11>
  734.     2.1.11 /DBG - ñîçäàíèå îòëàäî÷íîé èíôîðìàöèè.
  735. </h2>
  736.  
  737.         Åñëè ïðè êîìïèëÿöèè ïðîãðàììû â êîìàíäíóþ ñòðîêó äîáàâèòü êëþ÷ <b>/dbg</b>,
  738.     èëè â ôàéë êîíôèãóðàöèè c--.ini äîáàâèòü ñòðîêó <b>dbg</b>, òî êîìïèëÿòîð ïîñëå
  739.     îêîí÷àíèÿ êîìïèëÿöèè ñîçäàñò ôàéë ñ îòëàäî÷íîé èíôîðìàöèåé. Ýòîò ôàéë
  740.     èìååò èìÿ ãëàâíîãî ìîäóëÿ è èìååò ðàñøèðåíèå *.tds.
  741.  
  742.         Îòëàäî÷íàÿ èíôîðìàöèÿ ñîçäàâàåìàÿ êîìïèëÿòîðîì C-- ñîâìåñòèìà ñ
  743.     îòëàäî÷íîé èíôîðìàöèåé ñîçäàâàåìîé êîìïèëÿòîðàìè ôèðìû Borland. Íî, ïîêà,
  744.     ýòà èíôîðìàöèÿ ðåàëèçîâàíà åùå íå â ïîëíîì îáúåìå. Ñîçäàâàåìîé ñåé÷àñ
  745.     îòëàäî÷íîé èíôîðìàöèè äîñòàòî÷íî äëÿ ïðîâåäåíèÿ ïðîñòåéøåé îòëàäêè
  746.     ïðîãðàììû.
  747.  
  748.         Äëÿ 16-áèòíûõ ïðîãðàìì ïîä DOS äëÿ îòëàäêè íàäî èñïîëüçîâàòü Turbo
  749.     Debugger èç ïàêåòà Borland C v4.5 èëè ëó÷øå (ôàéë td.exe).
  750.  
  751.         Äëÿ ïðîãðàìì ïîä Windows íàäî èñïîëüçîâàòü 32-áèòíûé îòëàä÷èê èç ýòîãî
  752.     æå ïàêåòà (ôàéë td32.exe).
  753.  
  754.         Äëÿ 32-áèòíûõ ïðîãðàìì, èñïîëüçóþùèõ ðàñøèðèòåëü DOS ïðèìåíÿòü äëÿ
  755.     îòëàäêè Turbo Debugger íåâîçìîæíî. Íî, ìîæåò áûòü ÿ íå çíàþ, êàê ýòî
  756.     äåëàòü. Åñëè Âû çíàåòå, êàê ñîçäàâàòü 32-áèòíûå ïðîãðàììû ñ
  757.     DOS-ðàñøèðèòåëåì êîìïèëÿòîðàìè ôèðìû Borland ñ âêëþ÷åíèåì â íèõ îòëàäî÷íîé
  758.     èíôîðìàöèè, òî ðàññêàæèòå ìíå. À ÿ ïîïðîáóþ ïðèìåíèòü ýòî äëÿ C--.
  759. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  760.  
  761.  
  762. <h2 id=2.1.12>
  763.     2.1.12 /J0 /J1 /J2
  764. </h2>
  765.  
  766.         Ñèíîíèìîì êëþ÷åé <b>/J0 /J1 /J2</b> ÿâëÿåòñÿ äèðåêòèâà <b>#jumptomain</b> ñ
  767.     ïàðàìåòðàìè <b>NONE, SHORT è NEAR</b> ñîîòâåòñòâåííî.
  768.  
  769.         Äèðåêòèâà <b>#jumptomain</b> âûïîëíÿåò íåìíîãî ðàçëè÷íûå ôóíêöèè â
  770.     çàâèñèìîñòè îò òèïà âûõîäíîãî ôàéëà.
  771.  
  772.         Êîìïèëÿöèÿ ôàéëà òèïà <b>*.com</b> è <b>*.exe</b> ìîäåëü ïàìÿòè <b>tiny</b>:
  773.  
  774.       <b>#jumptomain NONE (-j0)</b> - â ýòîì ñëó÷àå ïî îêîí÷àíèè êîäà íà÷àëüíîé
  775.     èíèöèàëèçàöèè ïðîãðàììû íå ãåíåðèðóåòñÿ jmp íà ïðîöåäóðó main. Ýòó
  776.     äèðåêòèâó ñëåäóåò èñïîëüçîâàòü â ñëó÷àå, åñëè äî ïðîöåäóðû main íåò äðóãèõ
  777.     íå äèíàìè÷åñêèõ ïðîöåäóð è èíèöèàëèçèðîâàííûõ ïåðåìåííûõ.
  778.  
  779.       <b>#jumptomain SHORT (-j1)</b> - â ýòîì ñëó÷àå ïî îêîí÷àíèè êîäà íà÷àëüíîé
  780.     èíèöèàëèçàöèè ãåíåðèðóåòñÿ êîðîòêèé jmp íà ïðîöåäóðó main. Ýòó äèðåêòèâó
  781.     ñëåäóåò èñïîëüçîâàòü, åñëè äî ïðîöåäóðû main íàõîäèòñÿ íå áîëåå 128 áàéò
  782.     êîäà è äàííûõ.
  783.  
  784.       <b>#jumptomain NEAR (-j2)</b> - ýòî ñîñòîÿíèå óñòàíàâëèâàåòñÿ ïî óìîë÷àíèþ. Ïðè
  785.     ýòîì ãåíåðèðóåòñÿ áëèçêèé jmp íà ïðîöåäóðó main.
  786.  
  787.         Êîìïèëÿöèÿ ôàéëîâ <b>*.exe</b> (êëþ÷è <b>-exe -d32 -w32 -w32c</b>):
  788.  
  789.       <b>#jumptomain NONE (-j0)</b> - â ýòîì ñëó÷àå êîä íà÷àëüíîé èíèöèàëèçàöèè
  790.     ïðîãðàììû íå ãåíåðèðóåòñÿ è óïðàâëåíèå ïðè çàïóñêå ïåðåäàåòñÿ ñðàçó íà
  791.     ïðîöåäóðó main.
  792.  
  793.       Âî âñåõ îñòàëüíûõ ñëó÷àÿõ ãåíåðèðóåòñÿ êîä íà÷àëüíîé èíèöèàëèçàöèè è
  794.     óïðàâëåíèå íà ïðîöåäóðó main ïåðåäàåòñÿ èíñòðóêöèåé call.
  795.  
  796.         Êîìïèëÿöèÿ ôàéëîâ <b>*.dll</b>:
  797.  
  798.       <b>#jumptomain NONE (-j0)</b> - â ýòîì ñëó÷àå êîä íà÷àëüíîé èíèöèàëèçàöèè
  799.     ïðîãðàììû íå ãåíåðèðóåòñÿ è óïðàâëåíèå ïðè çàïóñêå ïåðåäàåòñÿ ñðàçó íà
  800.     ïðîöåäóðó <b>main</b>.
  801.  
  802.       Âî âñåõ îñòàëüíûõ ñëó÷àÿõ ãåíåðèðóåòñÿ êîä çàãëóøêè è óïðàâëåíèå íà
  803.     ïðîöåäóðó <b>main</b> íå ïåðåäàåòñÿ. Ôàêòè÷åñêè ïðîöåäóðà <b>main</b> â ýòîì ñëó÷àå íå
  804.     íóæíà.
  805.  
  806.       Ïðîöåäóðà <b>main</b> ïðè ñîçäàíèè ôàéëîâ <b>DLL</b> äîëæíà âûãëÿäåòü íåìíîãî èíà÷å,
  807.     ÷åì â äðóãèõ ñëó÷àÿõ:
  808.  
  809.     dword main ( dword hInstDLL, reason, reserv )
  810.     {
  811.       ...
  812.     }
  813. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  814.  
  815.  
  816. <h2 id=2.1.13>
  817.     2.1.13 /LST - Ñîçäàíèå àññåìáëåðíîãî ëèñòèíãà.
  818. </h2>
  819.  
  820.         Ñ ïîìîùüþ äîïîëíèòåëüíîé îïöèè êîìàíäíîé ñòðîêè <b>-lst</b> Âû ìîæåòå
  821.     ïîëó÷èòü âìåñòå ñ èñïîëíèòåëüíûì ôàéëîì è åãî àññåìáëåðíûé ëèñòèíã.
  822.     Ëèñòèíã áóäåò ïîìåùåí â ôàéë îäíîèìåííûé ñ èñïîëíèòåëüíûì ôàéëîì è
  823.     èìåþùèì ðàñøèðåíèå *.lst.
  824.  
  825.         Àññåìáëåðíûé ëèñòèíã ñîçäàåòñÿ íåçàâèñèìîé îò êîìïèëÿòîðà ÷àñòüþ êîäà
  826.     ñ èñïîëüçîâàíèåì èíôîðìàöèè íàêàïëèâàåìîé ïðè êîìïèëÿöèè ïðîãðàììû.
  827. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  828.  
  829.  
  830. <h2 id=2.1.14>
  831.     2.1.14 /ENV - Ñîõðàíåíèå àäðåñà ïåðåìåííûõ îêðóæåíèÿ.
  832. </h2>
  833.  
  834.         Åñëè ïðè êîìïèëÿöèè ïðîãðàììû Âû â êîìàíäíóþ ñòðîêó äîáàâèòå îïöèþ
  835.     <b>-ENV</b> èëè â ôàéë c--.ini ñòðîêà <b>ENV</b>, òî êîìïèëÿòîð äîáàâèò â âàøó
  836.     ïðîãðàììó ïåðåìåííóþ <b>environ</b>, â êîòîðîé ïðè çàãðóçêå áóäåò ñîõðàíÿòñÿ
  837.     àäðåñ ïåðåìåííûõ îêðóæåíèÿ çàïóñêàåìîé ïðîãðàììû. Äëÿ ïðîãðàìì ïîä
  838.     Windows ýòî áóäåò ïîëíûé àäðåñ, à äëÿ îñòàëüíûõ â ýòîé ïåðåìåííîé áóäåò
  839.     ñîõðàíÿòüñÿ òîëüêî àäðåñ ñåãìåíòà.
  840. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  841.  
  842.  
  843. <h2 id=2.1.15>
  844.     2.1.15 /CPA - Î÷èñòêà post-îáëàñòè äàííûõ.
  845. </h2>
  846.  
  847.         Ïåðåìåííûå, êîòîðûì â òåëå ïðîãðàììû íå áûëî ïðèñâîåíî íèêàêîå
  848.     çíà÷åíèå, íå âêëþ÷àþòñÿ â òåëî ñêîìïèëèðîâàííîé ïðîãðàììû. Äëÿ íèõ
  849.     ðåçåðâèðóåòñÿ ïàìÿòü çà ïðåäåëàìè ïðîãðàììû. Íî ýòà ïàìÿòü ìîæåò áûòü
  850.     çàïîëíåíà ïðîèçâîëüíîé èíôîðìàöèåé.
  851.  
  852.         Åñëè Âàì íåîáõîäèìî, ÷òîáû íåèíèöèàëèçèðîâàííûå ïåðåìåííûå ïðè
  853.     çàãðóçêå ïðîãðàììû âñåãäà ñîäåðæàëè îäíî è òîæå çíà÷åíèå (íîëü) -
  854.     âêëþ÷èòå â êîìàíäíóþ ñòðîêó îïöèþ <b>-CPA</b>.
  855. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  856.  
  857.  
  858. <h2 id=2.1.16>
  859.     2.1.16 /W - âûâîä ïðåäóïðåæäåíèé.
  860. </h2>
  861.  
  862.         Ïî óìîë÷àíèþ êîìïèëÿòîð íå âûâîäèò ïðåäóïðåæäåíèÿ è ìíîãèå äàæå íå
  863.     ïîäîçðåâàþò î ñóùåñòâîâàíèè òàêîé ïîëåçíîé îïöèè. Â C-- ïðåäóïðåæäåíèÿ
  864.     ôàêòè÷åñêè ÿâëÿþòñÿ ïîäñêàçêàìè äëÿ ñîçäàíèÿ îïòèìàëüíûõ ïðîãðàìì è
  865.     çà÷àñòóþ îáëåã÷àþò îòëàäêó ïðîãðàìì.  ïðåäóïðåæäåíèÿõ êîìïèëÿòîð ìîæåò
  866.     ñîîáùèòü Âàì î òîì, â êàêîì ìåñòå ìîæíî èñïîëüçîâàòü êîðîòêèå ôîðìû
  867.     îïåðàòîðîâ IF, WHILE, FOR... Î òîì, êàêèå ïðîöåäóðû, ïåðåìåííûå è
  868.     ñòðóêòóðû îïðåäåëåííûå â âàøåé ïðîãðàììå íå áûëè èñïîëüçîâàíû. Î òîì
  869.     êàêèå ðåãèñòðû êîìïèëÿòîð èñïîëüçîâàë áåç âàøåãî âåäîìà è ìíîãî äðóãîé
  870.     ïîëåçíîé èíôîðìàöèè.
  871.  
  872.         Ïî óìîë÷àíèþ ïðåäóïðåæäåíèÿ âûâîäÿòñÿ íà ýêðàí. Íî èõ áûâàåò òàê
  873.     ìíîãî, ÷òî îíè ìîãóò íå ïîìåñòèòüñÿ íà ýêðàíå. Ïîýòîìó â êîìïèëÿòîðå åñòü
  874.     îïöèÿ, ïî êîòîðîé âñå ïðåäóïðåæäåíèÿ âûâîäÿòñÿ â ôàéë. Èìÿ ýòîãî ôàéëà
  875.     çàäàåòñÿ â òîé æå îïöèè. Ïîìåñòèâ â ñâîé c--.ini ôàéë ïàðó âîò ýòèõ ñòðîê:
  876.  
  877.     w
  878.     wf=warning
  879.  
  880.         Âû áóäåòå ïîëó÷àòü â ôàéëå <b>warning</b> ïðåäóïðåæäåíèÿ.
  881. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  882.  
  883.  
  884. <h2 id=2.1.17>
  885.     2.1.17 /NW - Âûáîðî÷íîå îòêëþ÷åíèå òèïîâ ïðåäóïðåæäåíèé.
  886. </h2>
  887.  
  888.         Ñåé÷àñ êîìïèëÿòîð ìîæåò âûäàâàòü 12 òèïîâ ïðåäóïðåæäåíèé è, èíîãäà èõ
  889.     áûâàåò òàê ìíîãî, ÷òî ñòàíîâèòñÿ òðóäíî â íèõ îðèåíòèðîâàòüñÿ. Òåïåðü
  890.     ìîæíî âûáîðî÷íî çàïðåùàòü âûäà÷ó ïðåäóïðåæäåíèé. Äëÿ ýòîãî â êîìàíäíîé
  891.     ñòðîêå (èëè â ôàéëå C--.INI) ìîæíî óñòàíîâèòü îïöèþ <b>/nw=number</b>, ãäå
  892.     number - ÷èñëî îò 1 äî 12. Ýòèì öèôðàì ñîîòâåòñòâóþò ñëåäóþùèå òèïû
  893.     ïðåäóïðåæäåíèé:
  894.  
  895.       1 - Optimize numerical expressions
  896.       2 - Compiler used register ..."
  897.      3 - Short operator '...' may be used
  898.      4 - String '...' repeated
  899.      5 - Expansion variable
  900.      6 - Signed value returned
  901.      7 - '...' defined above, therefore skipped.
  902.      8 - Variable/structure/procedure '...' possible not used
  903.      9 - Non-initialized variable may have been used
  904.     10 - Return flag was destroyed
  905.     11 - Code may not be executable
  906.     12 - Don't use local/parametric values in inline procedures
  907. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  908.  
  909.  
  910. <h2 id=2.1.18>
  911.    2.1.18 /WSI - êîðîòêàÿ òàáëèöà èìïîðòà.
  912. </h2>
  913.  
  914.        Òàáëèöà èìïîðòà îáû÷íî ñîñòîèò â ñâîþ î÷åðåäü èç ÷åòûðåõ òàáëèö. Äâå
  915.    òàáëèöû <b>LookUp Table</b> è <b>Import Address Table</b> àáñîëþòíî îäèíàêîâû.
  916.  
  917.        Îïöèåé êîìàíäíîé ñòðîêè <b>/WSI</b> Âû ìîæåòå çàñòàâèòü êîìïèëÿòîð
  918.    ãåíåðèðîâàòü òîëüêî îäíó èç ýòèõ äâóõ îäèíàêîâûõ òàáëèö (ãåíåðèðóåòñÿ
  919.    òîëüêî <b>Import Address Table</b>). Òåì ñàìûì ó Âàñ ïîëó÷èòñÿ áîëåå êîìïàêòíàÿ
  920.    òàáëèöà èìïîðòà, ÷òî ïðèâåäåò, â íåêîòîðûõ ñëó÷àÿõ, ê ñîçäàíèþ áîëåå
  921.    êîìïàêòíîãî âûõîäíîãî ôàéëà.
  922. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  923.  
  924.  
  925. <h2 id=2.2>
  926.  2.2 Äèðåêòèâû òðàíñëÿòîðà.
  927. </h2>
  928.  
  929.      C-- íå ñîäåðæèò ïðåïðîöåññîð. Òåì íå ìåíåå, åñòü íåñêîëüêî ôóíêöèé
  930.  î÷åíü ïîõîæèõ íà ôóíêöèè C ïðåïðîöåññîðà.
  931.  
  932.      Îíè äàþòñÿ êàê äèðåêòèâû òðàíñëÿòîðà. Âñå äèðåêòèâû òðàíñëÿòîðà
  933.  íà÷èíàþòñÿ ñ âîïðîñèòåëüíîãî çíàêà <b>?</b> ëèáî ñ ñèìâîëà <b>#</b>. Âîò ñïèñîê èìåþùèõñÿ
  934.  äèðåêòèâ è èõ íàçíà÷åíèå:
  935.  
  936.  <b>? align</b> [val]                  Âûðîâíÿòü äàííûå ïðîãðàììû íà ÷åòíûé ïî
  937.                                 óìîë÷àíèþ èëè íà àäðåñ êðàòíûé âåëè÷èíå val.
  938.  
  939.  <b>? aligncode</b> [val]              Âûðîâíÿòü êîä ïðîãðàììû íà ÷åòíûé ïî
  940.                                 óìîë÷àíèþ èëè íà àäðåñ êðàòíûé âåëè÷èíå <b>val</b>.
  941.                                 Çàïîëíåíèå ïðîèçâîäèòñÿ êîäîì 0x90.
  942.  
  943.  <b>? aligner</b> (aligner value)      îïðåäåëèòü çíà÷åíèå áàéòà âñòàâêè.
  944.  
  945.  <b>? alignword</b> (TRUE or FALSE)    ðàçðåøàåò èëè çàïðåùàåò âûðàâíèâàíèå íà
  946.                                 ÷åòíûé àäðåñ ïåðåìåííûõ òèïà word è int,
  947.                                 çíà÷åíèå ïî óìîë÷àíèþ TRUE.
  948.  
  949.  <b>? argc</b> (TRUE or FALSE)         Âêëþ÷èòü èëè îòêëþ÷èòü àëüòåðíàòèâíûé
  950.                                 îáðàáîò÷èê êîìàíäíîé ñòðîêè.
  951.  
  952.  <b>? atexit</b>                       Âñòàâëÿåò â startup êîä ïîääåðæêè ïðîöåäóðû
  953.                                 ATEXIT().
  954.  
  955.  <b>? code32</b> (TRUE/FALSE)          ðàçðåøàåò/çàïðåùàåò ãåíåðàöèþ 32-áèòíîãî
  956.                                 êîäà.
  957.  
  958.  <b>? codesize</b>                     îïòèìèçàöèÿ ðàçìåðà êîäà (â óùåðá ñêîðîñòè).
  959.  
  960.  <b>? compilerversion</b> min-vers     óêàçûâàåò, êîìïèëÿòîð êàêîé âåðñèè íåîáõîäèì
  961.                                 äëÿ êîìïèëÿöèè äàííîé ïðîãðàììû.
  962.  
  963.  <b>? ctrl_c</b> (TRUE or FALSE )      ðàçðåøàåò èëè çàïðåùàåò èãíîðèðîâàíèå
  964.                                 íàæàòèÿ CTRL-C.
  965.  
  966.  <b>? dataseg</b> (value)              óêàçûâàåò êîìïèëÿòîðó ñåãìåíòíûé àäðåñ ÎÇÓ
  967.                                 äëÿ ïåðåìåííûõ ïðè êîìïèëÿöèè ROM-BIOS.
  968.  
  969.  <b>? define</b> (identifier) (token)  îïðåäåëÿåò èäåíòèôèêàòîð.
  970.  
  971.  <b>? DOSrequired</b> (íîìåð)          óñòàíàâëèâàåò ìèíèìàëüíóþ òðåáóåìóþ âåðñèþ
  972.                                 DOS:  ñòàðøèé áàéò - íîìåð âåðñèè,
  973.                                 ìëàäøèé áàéò - íîìåð ìîäèôèêàöèè:
  974.                                  0x0101 äëÿ âåðñèè 1.1 DOS
  975.                                  0x0315 äëÿ âåðñèè 3.21 DOS
  976.                                  0x0303 äëÿ âåðñèè 3.3 DOS
  977.                                  0x0600 äëÿ âåðñèè 6.0 DOS
  978.                                  0x0602 äëÿ âåðñèè 6.2 DOS è ò.ä.
  979.  
  980.  <b>? dosstring</b> (TRUE/FALSE)       óêàçûâàåò êîìïèëÿòîðó, ÷òî â êà÷åñòâå
  981.                                 òåðìèíàòîðà ñòðîêè íàäî èñïîëüçîâàòü ñèìâîë <b>$</b>
  982.  
  983.  <b>? else</b>                         ãåíåðèðóåò àëüòåðíàòèâíûé êîä åñëè <b>?ifdef</b> èëè
  984.                                 <b>?ifndef</b> ïðèíèìàþò çíà÷åíèå FALSE (ïðèìåð
  985.                                 èñïîëüçîâàíèÿ ñìîòðèòå â ôàéëå FPU.H--)
  986.  
  987.  <b>? endif</b>                        óêàçûâàåò íà êîíåö äåéñòâèÿ äèðåêòèâ <b>ifdef</b> è
  988.                                 <b>ifndef</b>
  989.  
  990.  <b>? fastcallapi</b> (FALSE/TRUE)     çàïðåòèòü/ðàçðåøèòü ãåíåðàöèþ áûñòðîãî âûçîâà
  991.                                 API-ïðîöåäóð (ïî óìîë÷àíèþ ðàçðåøåíî).
  992.                                 Äèðåêòèâà ðàáîòàåò ïðè êîìïèëÿöèè ïðîãðàìì
  993.                                 ïîä Windows.
  994.  
  995.  <b>? fixuptable</b> (TRUE/FALSE)      ðàçðåøèòü/çàïðåòèòü ñîçäàíèå FixUp òàáëèöû
  996.                                 (ïî óìîë÷àíèþ çàïðåùåíî). Äèðåêòèâà ðàáîòàåò
  997.                                 ïðè êîìïèëÿöèè ïðîãðàìì ïîä Windows.
  998.  
  999.  <b>? ifdef</b> (identifier)           åñëè èäåíòèôèêàòîð îïðåäåëåí, òî âîçâðàùàåò
  1000.                                 TRUE èíà÷å FALSE
  1001.  
  1002.  <b>? imagebase</b> value              çàäàåò àäðåñ Image Base. Ïî óìîë÷àíèþ ýòîò
  1003.                                 àäðåñ  ðàâåí 0x400000. Äèðåêòèâà ðàáîòàåò ïðè
  1004.                                 êîìïèëÿöèè ïðîãðàìì ïîä Windows.
  1005.  
  1006.  <b>? ifndef</b> (identifier)          åñëè èäåíòèôèêàòîð îïðåäåëåí, òî âîçâðàùàåò
  1007.                                 FALSE èíà÷å TRUE
  1008.  
  1009.  <b>? include</b> ("filename")         âêëþ÷àåò äðóãîé ôàéë.
  1010.  
  1011.  <b>? includepath</b> ("path")         óêàçàíèå êîìïèëÿòîðó, â êàêîé äèðåêòîðèè íàäî
  1012.                                 èñêàòü âêëþ÷àåìûå ôàéëû
  1013.  
  1014.  <b>? initallvar</b>                   èíèöèàëèçèðóåò 0 âñå íåèíèöèàëèçèðîâàííûå
  1015.                                 ïåðåìåííûå.
  1016.  
  1017.  <b>? jumptomain</b> (NONE, SHORT, NEAR or FALSE)
  1018.                                 óñòàíàâëèâàåò òèï ïåðåõîäà ê main(),
  1019.                                 çíà÷åíèå ïî óìîë÷àíèþ - NEAR.
  1020.  
  1021.  <b>? maxerrors</b> (number)           ìàêñèìàëüíîå êîëè÷åñòâî íàéäåííûõ îøèáîê,
  1022.                                 ïðåâûñèâ êîòîðîå òðàíñëÿòîð ïðåêðàùàåò
  1023.                                 ðàáîòó, çíà÷åíèå ïî óìîë÷àíèþ - 16.
  1024.  
  1025.  <b>? movedatarom</b>  (TRUE/FALSE)    óêàçûâàåò êîìïèëÿòîðó î íåîáõîäèìîñòè
  1026.                                 ïåðåíîñà äàííûõ èç ÏÇÓ â ÎÇÓ.
  1027.  
  1028.  <b>? parsecommandline</b> (TRUE or FALSE)
  1029.                                 âêëþ÷àåò â ïðîãðàììó áëîê êîäà äëÿ
  1030.                                 ñèíòàêñè÷åñêîãî àíàëèçà êîìàíäíîé ñòðîêè
  1031.                                 çíà÷åíèå ïî óìîë÷àíèþ FALSE.
  1032.  
  1033.  <b>? pragma</b>                       ìîæåò îáúÿâëÿòü íåñêîëüêî äðóãèõ äèðåêòèâ
  1034.  
  1035.  <b>? print</b> (number or string)     âûâîäèò íà ýêðàí ñòðîêó èëè ÷èñëî.
  1036.  
  1037.  <b>? printhex</b> (number)            âûâîäèò íà ýêðàí ÷èñëî â øåñòíàäöàòåðè÷íîì
  1038.                                 êîäå.
  1039.  
  1040.  <b>? randombyte</b>                   âñòàâëÿåò â êîä ïðîãðàììû áàéò ñëó÷àéíîãî
  1041.                                 çíà÷åíèÿ.
  1042.  
  1043.  <b>? resize</b> (TRUE or FALSE)       âêëþ÷àåò ôóíêöèþ èçìåíåíèÿ ïîñëå çàïóñêà
  1044.                                 ðàçìåðà âûäåëåííîãî ïðîãðàììå áëîêà ïàìÿòè
  1045.                                 íà ìèíèìàëüíî òðåáóåìûé îáúåì,
  1046.                                 çíà÷åíèå ïî óìîë÷àíèþ TRUE.
  1047.  
  1048.  <b>? resizemessage</b> (string)       ñîîáùåíèå, âûâîäèìîå íà ýêðàí ïåðåä
  1049.                                 àâàðèéíûì ïðåðûâàíèåì âûïîëíåíèÿ ïðîãðàììû,
  1050.                                 åñëè èçìåíåíèå ðàçìåðà âûäåëåííîãî ïðîãðàììå
  1051.                                 áëîêà ïàìÿòè íå âûïîëíåíî.
  1052.  
  1053.  <b>? setdinproc</b>                   ïî ýòîé äèðåêòèâå êîìïèëÿòîð íåìåäëåííî
  1054.                                 âñòàâëÿåò â êîä êîìïèëèðóåìîé ïðîãðàììû âñå
  1055.                                 âûçûâàâøèåñÿ ðàíåå äèíàìè÷åñêèå ïðîöåäóðû.
  1056.  
  1057.  <b>? sizerom</b>  (value)             óêàçûâàåò êîìïèëÿòîðó ðàçìåð ÏÇÓ.
  1058.  
  1059.  <b>? speed</b>                        îïòèìèçàöèÿ áûñòðîäåéñòâèÿ (çíà÷åíèå
  1060.                                 ïî óìîë÷àíèþ) â óùåðá ðàçìåðó êîäà.
  1061.  
  1062.  <b>? stack</b> (number)               îïðåäåëÿåò ðàçìåð ñòåêà ïðîãðàììû â áàéòàõ.
  1063.  
  1064.  <b>? startaddress</b> (number)        óñòàíàâëèâàåò ñòàðòîâûé àäðåñ íà÷àëà êîäà,
  1065.                                 çíà÷åíèå ïî óìîë÷àíèþ 0x100.
  1066.  
  1067.  <b>? startuptomain</b>                â com-ôàéëàõ ðàçìåùàåò <b>startup-</b>êîä â
  1068.                                 ïðîöåäóðå <b>main()</b>.
  1069.  
  1070.  <b>? startusevar</b> (number)         óêàçûâàåò àäðåñ, ñ êîòîðîãî ðàçðåøåíî
  1071.                                 èñïîëüçîâàòü ÿ÷åéêè ïàìÿòè ïîä
  1072.                                 íåèíèöèàëèçèðîâàííûå ïåðåìåííûå.
  1073.  
  1074.  <b>? sysattribute</b> (çíà÷åíèå)      ýòà äèðåêòèâà ïåðåäàåò êîìïèëÿòîðó àòðèáóò
  1075.                                 ñîçäàâàåìîãî äðàéâåðà. Ïî óìîë÷àíèþ
  1076.                                 óñòàíàâëèâàåòñÿ çíà÷åíèå 0x2000.
  1077.                                 Äåéñòâóåò òîëüêî ñ êëþ÷îì <b>/SYS</b>.
  1078.  
  1079.  <b>? sysname</b> <òåêñòîâàÿ ñòðîêà>   ýòà äèðåêòèâà ïåðåäàåò êîìïèëÿòîðó èìÿ
  1080.                                 áóäóùåãî äðàéâåðà. Ïî óìîë÷àíèþ
  1081.                                 ïðèñâàèâàåòñÿ èìÿ <b>NO_NAME</b>. Äëèíà èìåíè íå
  1082.                                 áîëåå 8 ñèìâîëîâ.  Äåéñòâóåò òîëüêî ñ êëþ÷îì
  1083.                                 <b>/SYS</b>.
  1084.  
  1085.  <b>? syscommand</b> <command_0>,<command_1>, ...<command_n>; - ýòà äèðåêòèâà
  1086.                                 ÿâëÿåòñÿ îáÿçàòåëüíîé ïðè ñîçäàíèè
  1087.                                 äðàéâåðîâ. Ïî ýòîé äèðåêòèâå êîìïèëÿòîðó
  1088.                                 ïåðåäàåòñÿ ñïèñîê èìåí ïðîöåäóð îáðàáîòêè
  1089.                                 êîìàíä äðàéâåðà. Äåéñòâóåò òîëüêî ñ êëþ÷îì
  1090.                                 <b>/SYS</b>.
  1091.  
  1092.  <b>? warning</b> (TRUE or FALSE)      ýòà äèðåêòèâà ðàçðåøàåò èëè çàïðåùàåò âûäà÷ó
  1093.                                 ïðåäóïðåæäåíèé. Äèðåêòèâà äåéñòâóåò òîëüêî â
  1094.                                 ïðåäåëàõ òåêóùåãî ôàéëà è íå âëèÿåò íà
  1095.                                 âêëþ÷àåìûå ôàéëû.
  1096.  
  1097.  <b>? winmonoblock</b> FALSE           çàïðåùàåò ðàçìåùåíèå òàáëèö ôàéëà ôîðìàòà PE
  1098.                                 â îäíó ñåêöèþ.
  1099.  
  1100.  <b>? undef</b>                        óíè÷òîæàåò êîíñòàíòû îáúÿâëåííûå äèðåêòèâîé
  1101.                                 <b>? define</b>
  1102.  
  1103.  <b>? use8086</b>                      îãðàíè÷èâàåòñÿ ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1104.                                 êîìàíäàìè 8088/8086 (çíà÷åíèå ïî óìîë÷àíèþ).
  1105.  
  1106.  <b>? use8088</b>                      îãðàíè÷èâàåòñÿ ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1107.                                 êîìàíäàìè 8088/8086 (çíà÷åíèå ïî óìîë÷àíèþ).
  1108.  
  1109.  <b>? use80186</b>                     äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1110.                                 êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà 80186.
  1111.  
  1112.  <b>? use80286</b>                     äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1113.                                 êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà 80286.
  1114.  
  1115.  <b>? use80386</b>                     äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1116.                                 êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà 80386.
  1117.  
  1118.  <b>? use80486</b>                     äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1119.                                 êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà 80486.
  1120.  
  1121.  <b>? usePentium</b>                   äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1122.                                 êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà Pentium.
  1123.  
  1124.  <b>? useMMX</b>                       äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1125.                                 êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà Pentium
  1126.                                 MMX.
  1127.  
  1128.  <b>? usestartup</b>                   ðàçðåøàåò êîìïèëÿòîðó èñïîëüçîâàòü ÿ÷åéêè
  1129.                                 ïàìÿòè, çàíèìàåìûå êîäîì íà÷àëüíîé
  1130.                                 èíèöèàëèçàöèè ïðîãðàììû.
  1131. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1132.  
  1133.  
  1134. <h2 id=2.2.1>
  1135.    2.2.1 ?ifdef/?ifndef
  1136. </h2>
  1137.  
  1138.         Ðàíåå äèðåêòèâà <b>?ifdef</b> ñðàáàòûâàëà íà íàëè÷èå êîíñòàíòû íåçàâèñèìî
  1139.    îò çíà÷åíèÿ åå âåëè÷èíû, à äèðåêòèâà <b>?ifndef</b> ñðàáàòûâàëà íà îòñóòñòâèå
  1140.    êîíñòàíòû â êîìïèëèðóåìîì ôàéëå. Òåïåðü <b>?indef</b> ñðàáàòûâàåò ëèøü íà
  1141.    êîíñòàíòó îòëè÷íóþ îò FALSE, à <b>?ifndef</b> ñðàáàòûâàåò êàê íà îòñóòñòâèå
  1142.    êîíñòàíòû â êîìïèëèðóåìîì ôàéëå, òàê è íà êîíñòàíòó èìåþùóþ çíà÷åíèå
  1143.    FALSE.
  1144.  
  1145.        Äëÿ äèðåêòèâ <b>?ifdef/?ifndef</b> çàðåçåðâèðîâàíû êîíñòàíòû <i>codesize</i> è
  1146.    <i>speed</i>, êîòîðûå ïðèíèìàþò çíà÷åíèå TRUE èëè FALSE â çàâèñèìîñòè îò ðåæèìà
  1147.    îïòèìèçàöèè. Ýòî áóäåò ïîëåçíûì äëÿ ñîçäàíèÿ áîëåå ãèáêèõ áèáëèîòåê.
  1148.  
  1149.        Åñòü âîçìîæíîñòü ïðîâåðêè òèïà CPU äëÿ êîòîðîãî âåäåòñÿ êîìïèëÿöèÿ.
  1150.    Äîïóñòèìûå âàðèàíòû ñèíòàêñèñà:
  1151.  
  1152.    ?ifdef cpu > 1       //åñëè ïðîãðàììà êîìïèëèðóåòñÿ äëÿ CPU âûøå 80186
  1153.    ?ifndef cpu >= 2 // -------//------------- íå áîëüøå èëè ðàâíî 80286
  1154.    ?ifdef cpu == 3  // -------//------------- ðàâíî 80386
  1155.    ?ifdef cpu != 0  // -------//------------- íå ðàâåí 8086
  1156.    ?ifdef cpu < 3   // -------//------------- õóæå 80386
  1157.    ?ifdef cpu <= 2  // -------//------------- õóæå èëè ðàâåí 80286
  1158.  
  1159.        Ýòà äèðåêòèâà ïîçâîëèò Âàì ïèñàòü îäíó ïðîöåäóðó äëÿ ðàçëè÷íûõ òèïîâ
  1160.    CPU.
  1161. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1162.  
  1163.  
  1164. <h2 id=2.2.2>
  1165.    2.2.2 ?initallvar
  1166. </h2>
  1167.  
  1168.        Äèðåêòèâîé <b>?initallvar TRUE</b> âêëþ÷àåòñÿ ðåæèì ïðè êîòîðîì âñåì
  1169.    íåèíèöèàëèçèðîâàííûì ïåðåìåííûì áóäåò ïðèñâîåíî íóëåâîå çíà÷åíèå è îíè
  1170.    áóäóò ðàñïîëàãàòüñÿ â òîì ìåñòå, ãäå áûëè îáúÿâëåíû. Ò.å. ïðàêòè÷åñêè
  1171.    èñ÷åçíóò íåèíèöèàëèçèðîâàííûå ïåðåìåííûå. Ýòî ìîæåò áûòü ïîëåçíûì ïðè
  1172.    íàïèñàíèè äðàéâåðîâ è ðåçèäåíòíûõ ïðîãðàìì.
  1173.  
  1174.        Ïàðàìåòð FALSE ýòîé äèðåêòèâû îòêëþ÷àåò ýòîò ðåæèì.
  1175.        Ïî óìîë÷àíèþ ýòà äèðåêòèâà óñòàíîâëåíà â FALSE.
  1176. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1177.  
  1178.  
  1179. <h2 id=2.2.3>
  1180.    2.2.3 ?usestartup
  1181. </h2>
  1182.  
  1183.        Äèðåêòèâà <b>?usestartup</b> ðàçðåøàåò êîìïèëÿòîðó èñïîëüçîâàòü ÿ÷åéêè êîäà
  1184.    íà÷àëüíîé èíèöèàëèçàöèè ïðîãðàììû (startup) äëÿ ïîñëåäóþùåãî ðàçìåùåíèÿ â
  1185.    íèõ íåèíèöèàëèçèðîâàííûõ ïåðåìåííûõ. Ýòî ìîæåò áûòü ïîëåçíûì äëÿ ïîëó÷åíèÿ
  1186.    áîëåå êîìïàêòíîãî êîäà, êàê îáû÷íûõ ïðîãðàìì, òàê è â îñîáåííîñòè
  1187.    ðåçèäåíòíûõ.
  1188.  
  1189.        Ýòó äèðåêòèâó ïðèìåíÿþò òîëüêî äëÿ ãåíåðàöèè *.COM ôàéëîâ.
  1190. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1191.  
  1192.  
  1193. <h2 id=2.2.4>
  1194.    2.2.4 ?startusevar
  1195. </h2>
  1196.  
  1197.        Äèðåêòèâîé <b>?startusevar</b> ìîæíî óêàçàòü íà÷àëüíûé àäðåñ ñ êîòîðîãî
  1198.    êîìïèëÿòîð áóäåò ðàñïðåäåëÿòü ïàìÿòü äëÿ íåèíèöèàëèçèðîâàííûõ ïåðåìåííûõ.
  1199.    Íàïðèìåð, ïîëó÷èâ äèðåêòèâó <b>?startusevar 0x53</b> êîìïèëÿòîð áóäåò
  1200.    ðàñïîëàãàòü íåèíèöèàëèçèðîâàííûå ïåðåìåííûå, íà÷èíàÿ ñ àäðåñà 0x53. Ýòî
  1201.    ìîæåò áûòü ïîëåçíûì äëÿ ïîëó÷åíèÿ áîëåå êîìïàêòíîãî êîäà êàê äëÿ
  1202.    ðåçèäåíòíûõ, òàê è äëÿ îáû÷íûõ ïðîãðàìì.
  1203.  
  1204.        Ýòó äèðåêòèâó ïðèìåíÿþò òîëüêî äëÿ ãåíåðàöèè *.COM ôàéëîâ.
  1205. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1206.  
  1207.  
  1208. <h2 id=2.2.5>
  1209.    2.2.5 ?atexit
  1210. </h2>
  1211.  
  1212.        Äèðåêòèâà <b>?atexit</b> äîáàâëÿåò â startup ïðîãðàììû êîä ïîääåðæêè
  1213.    ïðîöåäóðû <b>ATEXIT</b>, ðåçåðâèðóåò ìåñòî äëÿ õðàíåíèÿ 16 àäðåñîâ ïðîöåäóð è
  1214.    èçìåíÿåò êîä ïðîöåäóð <b>ABORT</b> è <b>EXIT</b>.
  1215.  
  1216.        Ïðîöåäóðà <b>ATEXIT</b> ðåãèñòðèðóåò ïðîöåäóðó, àäðåñ êîòîðîé ïåðåäàåòñÿ åé â
  1217.    êà÷åñòâå ïàðàìåòðà, êàê ïðîöåäóðó çàâåðøåíèÿ ïðîãðàììû. Ýòà ïðîöåäóðà
  1218.    áóäåò âûçâàíà â ìîìåíò çàâåðøåíèÿ ïðîãðàììû ïðîöåäóðàìè <b>ABORT</b> èëè <b>EXIT</b>
  1219.    èëè èíñòðóêöèåé <b>RET</b> èç <b>main</b>.
  1220.  
  1221.        Âñåãî ìîæíî çàðåãèñòðèðîâàòü äî 16 ïðîöåäóð. Ïðîöåäóðû âûçûâàþòñÿ â
  1222.    ïîðÿäêå îáðàòíîì ïîðÿäêó èõ ðåãèñòðàöèè.
  1223. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1224.  
  1225.  
  1226. <h2 id=2.2.6>
  1227.    2.2.6 ?startuptomain
  1228. </h2>
  1229.  
  1230.        Ïî ýòîé äèðåêòèâå êîìïèëÿòîð â íà÷àëå ôàéëà äåëàåò <b>jmp</b> íà íà÷àëî
  1231.    ïðîöåäóðû main(). Ïåðåä íà÷àëîì êîìïèëÿöèè ýòîé ïðîöåäóðû êîìïèëÿòîð
  1232.    íà÷íåò êîìïèëÿöèþ startup êîäà è ëèøü çàòåì áóäåò ïðîäîëæåíà êîìïèëÿöèÿ
  1233.    ïðîöåäóðû main(). Òåì ñàìûì <b>startup êîä</b> îêàæåòñÿ íå â íà÷àëå ôàéëà, êàê
  1234.    ýòî ïðîèñõîäèò îáû÷íî, à â òåëå ïðîöåäóðû main(). Ýòî áóäåò ïîëåçíûì ïðè
  1235.    êîìïèëÿöèè ðåçèäåíòíûõ ïðîãðàìì (TSR).
  1236.  
  1237.        Äèðåêòèâà ?startuptomain ðàáîòàåò òîëüêî ïðè êîìïèëÿöèè com-ôàéëîâ.
  1238. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1239.  
  1240.  
  1241. <h2 id=2.2.7>
  1242.    2.2.7 ?undef
  1243. </h2>
  1244.  
  1245.        Ýòà äèðåêòèâà óíè÷òîæàåò êîíñòàíòû îáúÿâëåííûå äèðåêòèâîé <b>?define</b>. Åå
  1246.    ìîæíî ïðèìåíÿòü äëÿ èçìåíåíèÿ â ïðîöåññå êîìïèëÿöèè çíà÷åíèÿ êàêîé-íèáóäü
  1247.    êîíñòàíòû.
  1248. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1249.  
  1250.  
  1251. <h2 id=2.2.8>
  1252.    2.2.8 ?align è ?aligncode
  1253. </h2>
  1254.  
  1255.        Â C-- ñóùåñòâóåò äèðåêòèâà <b>?align</b>, êîòîðàÿ äåëàåò îäíîêðàòíîå
  1256.    âûðàâíèâàíèå äàííûõ íà ÷åòíûé àäðåñ. Íî åñëè ê ýòîé äèðåêòèâå äîáàâèòü
  1257.    ÷èñëî, òî âûðàâíèâàíèå áóäåò ïðîèçâåäåíî íà àäðåñ êðàòíûé ýòîìó ÷èñëó.
  1258.    Íàïðèìåð äèðåêòèâà <b>?align 4</b> äîïîëíèò ñåãìåíò äàííûõ äî àäðåñà êðàòíîãî
  1259.    4. Ïðè âûðàâíèâàíèè áóäóò âñòàâëÿòüñÿ áàéòû, çíà÷åíèÿ êîòîðûõ îïðåäåëÿþòñÿ
  1260.    äèðåêòèâîé <b>?aligner</b>, ïî óìîë÷àíèþ ýòî çíà÷åíèå ðàâíî íóëþ. Äèðåêòèâà
  1261.    <b>?align</b> ïðîèçâîäèò âûðàâíèâàíèå òîëüêî â ñåãìåíòå äàííûõ. Â òåõ ìîäåëÿõ
  1262.    ïàìÿòè, â êîòîðûõ ñåãìåíò äàííûõ è êîäà ñîâïàäàþò ýòó äèðåêòèâó ìîæíî
  1263.    ïðèìåíÿòü è äëÿ âûðàâíèâàíèÿ íà÷àëà ïðîöåäóð.
  1264.  
  1265.        Äèðåêòèâà <b>?aligncode [value]</b> äåëàåò âûðàâíèâàíèå â ñåãìåíòå êîäà íà
  1266.    àäðåñ êðàòíûé çíà÷åíèþ <b>value</b>, ïî óìîë÷àíèþ íà ÷åòíûé àäðåñ. Çíà÷åíèå áàéòà
  1267.    çàïîëíåíèÿ â ýòîé äèðåêòèâå ÿâëÿåòñÿ ÷èñëî 0x90 - êîä èíñòðóêöèè NOP.
  1268.    Çíà÷åíèå áàéòà çàïîëíåíèÿ äëÿ ýòîé äèðåêòèâû èçìåíèòü íåëüçÿ. Ò.î. ýòó
  1269.    äèðåêòèâó ìîæíî ïðèìåíÿòü è âíóòðè èñïîëíÿåìîãî êîäà. Íàïðèìåð, åñëè Âû
  1270.    õîòèòå ïîëó÷èòü áûñòðûé êîä íà 486 ïðîöåññîðå, òî ðåêîìåíäóåòñÿ äåëàòü
  1271.    âûðàâíèâàíèå íà÷àëà ïðîöåäóð è öèêëîâ íà àäðåñ êðàòíûé 16.
  1272. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1273.  
  1274.  
  1275. <h2 id=2.2.9>
  1276.    2.2.9 ?pragma
  1277. </h2>
  1278.  
  1279.        Äèðåêòèâà <b>#pragma</b> ýòî ìíîãîôóíêöèîíàëüíàëüíàÿ äèðåêòèâà, êîòîðàÿ â
  1280.    ñâîþ î÷åðåäü èìååò ñâîè äèðåêòèâû:
  1281.  
  1282.      <b>option</b>
  1283.        Äèðåêòèâà <b>option</b> ïîçâîëÿåò âêëþ÷èòü â Âàø êîä îïöèè êîìàíäíîé ñòðîêè
  1284.    êîìïèëÿòîðà. Íåêîòîðûå îïöèè íå ìîãóò áûòü èñïîëüçîâàíû â ýòîé äèðåêòèâå;
  1285.    äðóãèå äîëæíû ïîìåùàòüñÿ â ñàìîì íà÷àëå èñõîäíîãî òåêñòà. Ïðèìåð:
  1286.  
  1287.      #pragma option w32c
  1288.  
  1289.        Ýòà äèðåêòèâà îáúÿâëÿåò êîìïèëÿòîðó, ÷òî íàäî ñîçäàòü êîíñîëüíûé
  1290.    32-áèòíûé ôàéë ïîä windows.
  1291.  
  1292.      <b>startup</b>
  1293.       Äèðåêòèâîé <b>startup</b> ìîæíî óêàçàòü ôóíêöèþ, êîòîðàÿ áóäåò âûïîëíåíà ïåðåä
  1294.    çàïóñêîì ïðîöåäóðû <b>main</b>. Ýòà äèðåêòèâà èìååò òàêîé ôîðìàò:
  1295.  
  1296.      #pragma startup procname
  1297.  
  1298.        Êîëè÷åñòâî ðàç, êîòîðîå ìîæíî ïðèìåíÿòü ýòó äèðåêòèâó â îäíîé
  1299.    ïðîãðàììå íå îãðàíè÷åíî, íî ðåàëüíî ìîæíî èñïîëüçîâàòü ëèøü íåñêîëüêî
  1300.    òûñÿ÷ ðàç.
  1301.  
  1302.      <b>line</b>
  1303.        Äèðåêòèâà <b>line</b> âûâîäèò íà ýêðàí íîìåð òåêóùåé ñòðîêè è èìÿ ôàéëà.
  1304.    Äîïîëíèòåëüíî ìîæåò âûâîäèòüñÿ ñîäåðæèìîå ñòðîêè íàõîäÿùååñÿ ïîñëå ñëîâà
  1305.    <b>line</b>. Ïðèìåð:
  1306.  
  1307.      #pragma line information
  1308.  
  1309.        Âñòðåòèâ ýòó äèðåêòèâó, êîìïèëÿòîð âûâåäåò íà ýêðàí íîìåð ñòðîêè è èìÿ
  1310.    ôàéëà. Òàêæå áóäåò âûâåäåíî ñîîáùåíèå ñïðàâà îò ñëîâà <b>line</b>, åñëè îíî
  1311.    åñòü.
  1312.  
  1313.      <b>resource</b>
  1314.        Ýòà äèðåêòèâà ìîæåò ïðèíèìàòü çíà÷åíèÿ <b>start</b> è <b>end</b>. Ýòè äâà
  1315.    çíà÷åíèÿ âûäåëÿþò íà÷àëî è êîíåö áëîêà ðåñóðñîâ, åñëè âû èñïîëüçóåòå åãî
  1316.    íåïîñðåäñòâåííî â èñõîäíîì êîäå ôàéëà, à íå â îòäåëüíîì ôàéëå. Ïðèìåð:
  1317.  
  1318.    #pragma resource start
  1319.  
  1320.    MyMenu MENU DISCARDABLE
  1321.    BEGIN    POPUP "Files",HELP
  1322.        BEGIN
  1323.            MENUITEM "Open",                        ID_OPEN
  1324.            MENUITEM "Save",                        ID_SAVE
  1325.            MENUITEM SEPARATOR
  1326.            MENUITEM "Exit",                        ID_EXIT
  1327.        END
  1328.        MENUITEM "Other",                           65535
  1329.    END
  1330.  
  1331.    #pragma resource end
  1332. <a href="#contents2"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1333.  
  1334.  
  1335. <h2 id=3.1>
  1336. 3. Êîíñòàíòû.
  1337.  
  1338.  3.1 ×èñëîâûå êîíñòàíòû.
  1339. </h2>
  1340.  
  1341.      Ïðåäñòàâëåíèå ÷èñëîâûõ êîíñòàíò â âèäå äåñÿòè÷íûõ ÷èñåë (÷èñåë ñ
  1342.  îñíîâàíèåì 10) è øåñòíàäöàòåðè÷íûõ ÷èñåë (îñíîâàíèå ñ÷èñëåíèÿ 16) ïîëíîñòüþ
  1343.  àíàëîãè÷íî ÿçûêó <b>C</b>.
  1344.  
  1345.      Ïðè äâîè÷íîì ïðåäñòàâëåíèè ÷èñåë (îñíîâàíèå 2) ÷èñëî äîëæíî íà÷èíàòüñÿ
  1346.  ñ ñèìâîëîâ <b>0b</b>, çà êîòîðûìè áåç ïðîáåëà èäåò ïîñëåäîâàòåëüíîñòü íóëåé è
  1347.  åäèíèö.
  1348.  
  1349.      Ïðè âîñüìåðè÷íîì ïðåäñòàâëåíèè ÷èñåë (îñíîâàíèå 8) ÷èñëî äîëæíî
  1350.  íà÷èíàòüñÿ ñ ñèìâîëîâ <b>0o</b>, çà êîòîðûìè áåç ïðîáåëà èäåò ïîñëåäîâàòåëüíîñòü
  1351.  öèôð.
  1352.  
  1353.      Âåùåñòâåííîå ÷èñëî îòëè÷àåòñÿ îò öåëîãî ïî íàëè÷èþ â íåì òî÷êè.
  1354.  Íà÷èíàòüñÿ âåùåñòâåííîå ÷èñëî äîëæíî ëèáî öèôðîé îò 0 äî 9, ëèáî çíàêîì
  1355.  ìèíóñ. Íåîáÿçàòåëüíîé ÷àñòüþ âåùåñòâåííîãî ÷èñëà ÿâëÿåòñÿ ïîêàçàòåëü
  1356.  ñòåïåíè. Ïîêàçàòåëü ñòåïåíè îòäåëÿåòñÿ îò ÷èñëà ñèìâîëîì <b>e</b> èëè <b>E</b>.
  1357.  Ïðîáåëû íåäîïóñòèìû.
  1358.  
  1359.  Ïðèìåðû:
  1360.    0b11111111 // äâîè÷íîå ïðåäñòàâëåíèå ÷èñëà 255
  1361.    0x00F // øåñòíàäöàòåðè÷íîå ïðåäñòàâëåíèå ÷èñëà 15
  1362.    0o10 // âîñüìåðè÷íîå ïðåäñòàâëåíèå ÷èñëà 8
  1363.    1.234567E-20 // âåùåñòâåííîå ÷èñëî
  1364.  
  1365.      C-- âìåñòå ñ òðàäèöèîííûì <b>C-</b>ñòèëåì øåñòíàäöàòåðè÷íûõ ÷èñåë ïîíèìàåò è
  1366.  ÷èñëà çàïèñàííûå â ñòèëå àññåìáëåðà. Äëÿ òåõ, êòî âäðóã íå çíàåò, ñîîáùàþ,
  1367.  ÷òî øåñòíàäöàòåðè÷íûå ÷èñëà â àññåìáëåðå èìåþò íà êîíöå ñèìâîë <b>h</b> èëè <b>H</b>.
  1368.  Åñëè ïåðâûé ñèìâîë øåñòíàäöàòåðè÷íîãî ÷èñëà áîëüøå <b>9</b>, òî ïåðåä íèì
  1369.  îáÿçàòåëüíî äîëæåí áûòü çàïèñàí ñèìâîë <b>0</b>. Ïðèìåðû:
  1370.  
  1371.    1234h
  1372.    0A000H
  1373.  
  1374.      Ê ÷èñëîâûì êîíñòàíòàì ìîæíî ïèñàòü ñóôôèêñû <b>L, U è F</b>. Ôàêòè÷åñêè
  1375.  ýòè ñóôôèêñû â C-- íå èãðàþò íèêàêîé ðîëè, êîìïèëÿòîð èõ ïðîñòî
  1376.  ïðîãëàòûâàåò. Ïðèìåð:
  1377.  
  1378.  #define DEF  1L
  1379.  #define DEF2 2Lu
  1380.  #define DEF3 3.0F
  1381.  
  1382.      Ýòè ñóôôèêñû íå çàâèñÿò îò ðåãèñòðà, ò.å. èõ ìîæíî ïèñàòü êàê
  1383.  ìàëåíüêèìè, òàê è áîëüøèìè áóêâàìè.
  1384. <a href="#contents3"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1385.  
  1386.  
  1387. <h2 id=3.2>
  1388.  3.2 Ñèìâîëüíûå êîíñòàíòû.
  1389. </h2>
  1390.  
  1391.      Îäèíî÷íûå ñèìâîëüíûå êîíñòàíòû, êàê è â <b>C</b>, äîëæíû çàêëþ÷àòüñÿ â
  1392.  îäèíî÷íûå êàâû÷êè <b>'</b>.
  1393.  
  1394.      Òàêæå êàê è â <b>C</b>, äëÿ îáîçíà÷åíèÿ ñïåöèàëüíûõ ñèìâîëîâ ñëóæèò îáðàòíàÿ
  1395.  íàêëîííàÿ ÷åðòà âïðàâî <b>\</b> ñ ïîñëåäóþùèì çà íåé êëþ÷åâûì ñèìâîëîì (èëè
  1396.  íåñêîëüêèìè ñèìâîëàìè). Ïîääåðæèâàþòñÿ ñëåäóþùèå ñïåöèàëüíûå ñèìâîëû:
  1397.  
  1398.    \a  /* çâóêîâîé ñèãíàë */
  1399.    \b  /* çàáîé */
  1400.    \f  /* ïåðåâîä  ñòðàíèöû */
  1401.    \l  /* ïåðåâîä ñòðîêè */
  1402.    \n  /* âîçâðàò êàðåòêè*/
  1403.    \r  /* âîçâðàò êàðåòêè*/
  1404.    \t  /* òàáóëÿöèÿ */
  1405.    \x??  /* ñèìâîë ASCII, ñîîòâåòñòâóþùèé áàéòîâîìó ïðåäñòàâëåíèþ,
  1406.               ñîñòîÿùåìó èç äâóõ øåñòíàäöàòåðè÷íûõ öèôð, ðàñïîëîæåííûõ
  1407.               íà ìåñòå çíàêîâ âîïðîñà */
  1408.     \???  /* ñèìâîë ASCII, ñîîòâåòñòâóþùèé áàéòîâîìó ïðåäñòàâëåíèþ,
  1409.               ñîñòîÿùåìó èç òðåõ äåñÿòè÷íûõ öèôð, ðàñïîëîæåííûõ
  1410.               íà ìåñòå çíàêîâ âîïðîñà */
  1411.  
  1412.      Ëþáîé äðóãîé ñèìâîë ïîñëå îáðàòíîé íàêëîííîé ÷åðòû âïðàâî áóäåò ïðèíÿò
  1413.  êàê ïðîñòîé ñèìâîë.
  1414.  
  1415.      Ñèìâîë "Îäèíî÷íàÿ êàâû÷êà" <b>'</b> ìîæåò áûòü ââåäåí ïðè ïîìîùè êîíñòðóêöèè
  1416.  <b>\'</b>
  1417.  
  1418.      Ñèìâîë NULL ìîæåò áûòü ââåäåí êàê ''
  1419.  
  1420.      Â C-- ïîääåðæèâàþòñÿ è ìíîãîáóêâåííûå ñèìâîëüíûå êîíñòàíòû. Ïðèìåðû
  1421.  ìíîãîáóêâåííûõ ñèìâîëüíûõ êîíñòàíò:
  1422.  
  1423.         'ab'
  1424.         'the'
  1425.         'this is large'
  1426.  
  1427.      Íèêàêîãî îãðàíè÷åíèÿ íà ÷èñëî ñèìâîëîâ â ñèìâîëüíîé êîíñòàíòå íå
  1428.  íàêëàäûâàåòñÿ, íî ðàçëè÷àþòñÿ òîëüêî ïîñëåäíèå 4 ñèìâîëà. Ýòî - ìàêñèìóì,
  1429.  êîòîðûé ìîæåò áûòü ñîõðàíåí â 32-ðàçðÿäíîé ïåðåìåííîé. Íàïðèìåð, êîíñòàíòû
  1430.  <b>this is large</b> è <b>arge</b> - îäèíàêîâû.
  1431.  
  1432.      C-- îáðàáàòûâàåò âñå ñèìâîëüíûå êîíñòàíòû êàê ÷èñëîâûå çíà÷åíèÿ ASCII
  1433.  ñèìâîëîâ. Äëÿ ìíîãîáóêâåííûõ ñèìâîëüíûõ êîíñòàíò ïåðâûé ñèìâîë
  1434.  ñîîòâåòñòâóåò ñòàðøèì ðàçðÿäàì, òàêèì îáðàçîì, çíà÷åíèå äëÿ <b>ab</b> áóäåò
  1435.  çàêîäèðîâàíî êàê <b>a*256+b</b>.
  1436. <a href="#contents3"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1437.  
  1438.  
  1439. <h2 id=3.3>
  1440.  3.3 Ñòðîêîâûå êîíñòàíòû.
  1441. </h2>
  1442.  
  1443.      Ñòðîêîâûå êîíñòàíòû, êàê è â C, çàêëþ÷àþòñÿ â äâîéíûå êàâû÷êè (").
  1444.   Ñïåöèàëüíûå ñèìâîëû âíóòðè ñòðîê îáîçíà÷àþòñÿ òàê æå, êàê è â ñèìâîëüíûõ
  1445.   êîíñòàíòàõ. Âñå ñïåöèàëüíûå ñèìâîëû èìåþò òî æå çíà÷åíèå, ÷òî è â
  1446.   ñèìâîëüíûõ êîíñòàíòàõ çà èñêëþ÷åíèåì <b>\n</b>, êîòîðûé èìååò çíà÷åíèå <b>íîâàÿ
  1447.   ñòðîêà</b> è çàìåíÿåò ñîáîé ïàðó ñèìâîëîâ <b>âîçâðàò êàðåòêè</b> è <b>ïåðåâîä
  1448.   ñòðîêè</b>.
  1449.  
  1450.       Â íàñòîÿùåå âðåìÿ íàèáîëüøàÿ äëèíà ñòðîêîâîé êîíñòàíòû - 2048 ñèìâîëîâ,
  1451.   âêëþ÷àÿ ñèìâîë-îãðàíè÷èòåëü 0, òàêèì îáðàçîì, ìàêñèìóì 2047 çíà÷àùèõ
  1452.   ñèìâîëîâ.
  1453. <a href="#contents3"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1454.  
  1455.  
  1456. <h2 id=3.4>
  1457.   3.4 Ïîñòîÿííûå âûðàæåíèÿ.
  1458. </h2>
  1459.  
  1460.       Ïîñòîÿííîå âûðàæåíèå - îäèíî÷íàÿ ÷èñëîâàÿ êîíñòàíòà èëè íåñêîëüêî
  1461.   ÷èñëîâûõ êîíñòàíò, ñâÿçàííûõ ìåæäó ñîáîé îïåðàòîðàìè. ×èñëîâîå çíà÷åíèå
  1462.   âûðàæåíèÿ âû÷èñëÿåòñÿ îäèí ðàç âî âðåìÿ êîìïèëÿöèè è äàëåå èñïîëüçóåòñÿ
  1463.   òîëüêî åãî ïîñòîÿííîå çíà÷åíèå.
  1464.  
  1465.       Ïîäîáíî âñåì âûðàæåíèÿì â C--, ïîñòîÿííûå âûðàæåíèÿ âñåãäà âû÷èñëÿþòñÿ
  1466.   ñëåâà íàïðàâî, íåâçèðàÿ íà ïðàâèëà àðèôìåòèêè! Ýòî ñîâåðøåííî îòëè÷íî îò
  1467.   äðóãèõ ÿçûêîâ, è ïðè íàïèñàíèè âûðàæåíèé íàäî áûòü îñòîðîæíûì è ïîìíèòü,
  1468.   ÷òî 2+3*2=10 à íå 8.
  1469.  
  1470.       Íåêîòîðûå ïðèìåðû ïîñòîÿííûõ âûðàæåíèé:
  1471.   45 & 1 + 3 // ðàâíÿåòñÿ 4
  1472.   14 - 1 / 2 // ðàâíÿåòñÿ 6 (ïîìíèòå öåëî÷èñëåííûå çíà÷åíèÿ)
  1473.   1 * 2 * 3 / 2 + 4 // ðàâíÿåòñÿ 7
  1474.       Ïðèìåðû ñ ïðèìåíåíèåì âåùåñòâåííûõ ÷èñåë:
  1475.   3.23*1.53+2.0E2 // ðàâíÿåòñÿ 204.9419
  1476. <a href="#contents3"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1477.  
  1478.  
  1479. <h2 id=4.1>
  1480. 4. Âûðàæåíèÿ.
  1481.  
  1482.   4.1 Òèïû âûðàæåíèé.
  1483. </h2>
  1484.  
  1485.       Èìåþòñÿ òðè òèïà âûðàæåíèé â C--, íå ñ÷èòàÿ ïîñòîÿííûõ âûðàæåíèé. Ýòî
  1486.   âûðàæåíèÿ òèïà <b>EAX/AX/AL</b>, âûðàæåíèÿ òèïà <b>íåEAX/AX/AL</b> è óñëîâíûå âûðàæåíèÿ.
  1487.   Âñå C-- âûðàæåíèÿ âû÷èñëÿþòñÿ ñëåâà íàïðàâî, íåçàâèñèìî îò ñòàðøèíñòâà
  1488.   âõîäÿùèõ â âûðàæåíèå ìàòåìàòè÷åñêèõ îïåðàöèé.
  1489. <a href="#contents4"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1490.  
  1491.  
  1492. <h2 id=4.2>
  1493.   4.2 Âûðàæåíèÿ òèïà EAX/AX/AL.
  1494. </h2>
  1495.  
  1496.       Ýòîò òèï âûðàæåíèé ïðèìåíÿåòñÿ â ñëó÷àå, êîãäà åãî ðåçóëüòàò ìîæåò áûòü
  1497.   ñîõðàíåí â ïåðåìåííîé â ïàìÿòè èëè â ðåãèñòðå <b>EAX</b> èëè <b>AX</b> èëè <b>AL</b>.
  1498.  
  1499.       Åñëè ðåçóëüòàò ìîæåò áûòü ñîõðàíåí â ïåðåìåííûõ òèïà <b>byte</b> èëè <b>char</b>,
  1500.   èñïîëüçóåòñÿ íîòàöèÿ <b>AL</b>.
  1501.  
  1502.       Åñëè ðåçóëüòàò ìîæåò áûòü ñîõðàíåí â ïåðåìåííûõ òèïà <b>word</b> èëè <b>int</b>,
  1503.   èñïîëüçóåòñÿ íîòàöèÿ <b>AX</b>.
  1504.  
  1505.       Åñëè ðåçóëüòàò ìîæåò áûòü ñîõðàíåí â ïåðåìåííûõ òèïà <b>dword, long</b> èëè
  1506.   <b>float</b>, èñïîëüçóåòñÿ íîòàöèÿ <b>EAX</b>.
  1507. <a href="#contents4"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1508.  
  1509.  
  1510. <h2 id=4.3>
  1511.   4.3 Âûðàæåíèÿ èñïîëüçóþùèå ïîëó÷àòåëü ïðè âû÷èñëåíèè âûðàæåíèÿ.
  1512. </h2>
  1513.  
  1514.       Åñëè â ïðàâîé ÷àñòè âûðàæåíèÿ èñïîëüçóåòñÿ ïåðåìåííàÿ ÿâëÿþùàÿñÿ
  1515.   îäíîâðåìåííî è ïðèåìíèêîì, òî òàêèå âûðàæåíèÿ äàþò ðàçëè÷íûå ðåçóëüòàòû â
  1516.   çàâèñèìîñòè îò òîãî ÿâëÿåòñÿ ïðèåìíèê ðåãèñòðîì èëè ïåðåìåííîé ïàìÿòè. Ýòî
  1517.   ñâÿçàíî ñ òåì, ÷òî ïðè âû÷èñëåíèè âûðàæåíèÿ â ïåðåìåííóþ ïàìÿòè, âû÷èñëåíèå
  1518.   ïðîèçâîäèòñÿ ñíà÷àëà â ðåãèñòð <b>EAX/AX/AL</b>, è ëèøü ïîñëå îêîí÷àíèÿ âû÷èñëåíèÿ
  1519.   ðåçóëüòàò áóäåò çàïèñàí â ïðèåìíèê. Åñëè æå ïðèåìíèêîì ÿâëÿåòñÿ ðåãèñòð, òî
  1520.   åãî çíà÷åíèå áóäåò ìåíÿòüñÿ ïîñëå êàæäîé îïåðàöèè âû÷èñëåíèÿ. Ïðèìåð:
  1521.  
  1522.   int var;
  1523.     var = BX = 2;
  1524.     var = 3 + var; // ðåçóëüòàòîì áóäåò 5
  1525.     BX = 3 + BX;   // ðåçóëüòàòîì áóäåò 6
  1526. <a href="#contents4"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1527.  
  1528.  
  1529. <h2 id=4.4>
  1530.   4.4 Íå - EAX/AX/AL âûðàæåíèÿ.
  1531. </h2>
  1532.  
  1533.       Ýòîò òèï âûðàæåíèé ïðèìåíÿåòñÿ â ñëó÷àå, êîãäà åãî ðåçóëüòàò äîëæåí
  1534.   áûòü ñîõðàíåí â ëþáîì äðóãîì ðåãèñòðå, îòëè÷íîì îò àêêóìóëÿòîðà <b>EAX, AX</b>
  1535.   èëè <b>AL</b>.  ïðîöåññå âû÷èñëåíèÿ âûðàæåíèÿ ýòîãî òèïà ìåíÿåòñÿ òîëüêî
  1536.   ñîäåðæèìîå óêàçàííîãî ðåãèñòðà-ïîëó÷àòåëÿ, âñå äðóãèå ðåãèñòðû áóäóò
  1537.   ñîõðàíåíû. Åñëè ðåãèñòðîì-ïîëó÷àòåëåì ñëóæèò áàéòîâûé ðåãèñòð, à ïðè
  1538.   âû÷èñëåíèè èñïîëüçóþòñÿ âåëè÷èíû ðàçìåðîì â ñëîâî, îäíîâðåìåííî ñ çàïèñüþ â
  1539.   ìëàäøèé áàéò ìîæåò áûòü ðàçðóøåíî ñîäåðæèìîå ñòàðøåãî áàéòà
  1540.   ðåãèñòðà-ïîëó÷àòåëÿ.
  1541.  
  1542.       Ýòî îáñòîÿòåëüñòâî íàêëàäûâàåò íåêîòîðûå îãðàíè÷åíèÿ íà îïåðàöèè è
  1543.   îïåðàíäû, äîïóñòèìûå â âûðàæåíèÿõ òèïà <b>íå EAX/AX/AL</b>. Âíóòðè âûðàæåíèé
  1544.   áàéòîâîãî òèïà íå äîïóñêàåòñÿ:
  1545.  
  1546.       - äåëàòü âûçîâû ÌÀÊÐÎÊÎÌÀÍÄ,
  1547.       - äåëàòü âûçîâû ÐÅÃÈÑÒÐÎÂÛÕ ïðîöåäóð
  1548.       - äåëàòü âûçîâû ÑÒÅÊÎÂÛÕ ïðîöåäóð
  1549.  
  1550.       Ðàíåå â <b>íå-EAX/AX/AL</b> âûðàæåíèÿõ áûëî ìîæíî èñïîëüçîâàòü ëèøü
  1551.   îïåðàöèè: ñëîæåíèÿ, âû÷èòàíèÿ, XOR, OR, AND. Òåïåðü äëÿ 16 è 32 áèòíûõ
  1552.   ðåãèñòðîâ ïî÷òè âñå îãðàíè÷åíèÿ ñíÿòû. Íî åñòü åùå îãðàíè÷åíèÿ íà ðåãèñòðû.
  1553.   Íàïðèìåð, åñëè â âûðàæåíèè èñïîëüçóåòñÿ ñäâèã íà çíà÷åíèå ïåðåìåííîé, à
  1554.   ïðèåìíèêîì ÿâëÿþòñÿ ðåãèñòðû <b>CX/ECX,</b> òî òàêîå âûðàæåíèå êîìïèëÿòîð íå áóäåò
  1555.   êîìïèëèðîâàòü:
  1556.  
  1557.      CX = var * SI * 3 * var >> 3;  //âûçîâåò ñîîáùåíèå îá îøèáêå
  1558.  
  1559.       Ïðèìå÷àíèå:  äëÿ 8 áèòíûõ <b>íå-AL</b> âûðàæåíèé óìíîæàòü ìîæíî òîëüêî íà
  1560.   ÷èñëà: 0, 1, 2, 4, 8, 16, 32, 64 è 128. Âñå ýòè îãðàíè÷åíèÿ ñâÿçàíû ñî
  1561.   ñòðåìëåíèåì íå ðàçðóøàòü äðóãèå ðåãèñòðû ïðè èñïîëüçîâàíèè <b>íå-EAX/AX/AL</b>
  1562.   âûðàæåíèé.
  1563. <a href="#contents4"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1564.  
  1565.  
  1566. <h2 id=4.5>
  1567.   4.5 Óñëîâíûå âûðàæåíèÿ.
  1568. </h2>
  1569.  
  1570.       Óñëîâíûå âûðàæåíèÿ - âûðàæåíèÿ, ðåçóëüòàòîì âû÷èñëåíèÿ êîòîðûõ ÿâëÿåòñÿ
  1571.   ëîãè÷åñêîå çíà÷åíèå äà èëè íåò, èñïîëüçóåìîå â îïåðàòîðå <b>if</b> è öèêëàõ <b>do {}</b>
  1572.   <b>while, while, for</b>.
  1573.  
  1574.       Èìåþòñÿ äâà òèïà óñëîâíûõ âûðàæåíèé, ïðîñòûå è ñëîæíûå.
  1575.  
  1576.       Âîçìîæíî ëîãè÷åñêîå îáúåäèíåíèå óñëîâèé.
  1577. <a href="#contents4"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1578.  
  1579.  
  1580. <h2 id=4.5.1>
  1581.     4.5.1 Ïðîñòûå óñëîâíûå âûðàæåíèÿ.
  1582. </h2>
  1583.  
  1584.         Ïðîñòûå óñëîâíûå âûðàæåíèÿ - îäèíî÷íàÿ ëåêñåìà èëè âûðàæåíèå, êîòîðîå
  1585.     ïðèìåò çíà÷åíèå äà, åñëè ðàñ÷åòíîå çíà÷åíèå îòëè÷íî îò íóëÿ, èëè çíà÷åíèå
  1586.     íåò, åñëè ðàñ÷åòíîå çíà÷åíèå ðàâíî íóëþ.
  1587. <a href="#contents4"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1588.  
  1589.  
  1590. <h2 id=4.5.2>
  1591.     4.5.2 Ñëîæíûå óñëîâíûå âûðàæåíèÿ.
  1592. </h2>
  1593.  
  1594.     Ñëîæíûå óñëîâíûå âûðàæåíèÿ èìåþò ñëåäóþùóþ ôîðìó:
  1595.  
  1596.          (ëåâàÿ_÷àñòü îïåðàòîð_îòíîøåíèÿ ïðàâàÿ_÷àñòü)
  1597.  
  1598.     Ãäå:
  1599.        ëåâàÿ_÷àñòü - ëþáîå âûðàæåíèå òèïà <b>AL/AX/EAX</b> èëè ïîñòîÿííîå âûðàæåíèå.
  1600.                      Òèï âûðàæåíèÿ îïðåäåëÿåòñÿ ïî òèïó ïåðâîé ëåêñåìû
  1601.                      (ðåãèñòðà èëè ïåðåìåííîé); çíà÷åíèå òèïà ïî óìîë÷àíèþ -
  1602.                      word äëÿ 16-áèòíûõ ïðîãðàìì è dword äëÿ 32-áèòíûõ. Åñëè
  1603.                      æåëàòåëåí äðóãîé òèï, ïåðåä âûðàæåíèåì ñòàâèòñÿ
  1604.                      ñîîòâåòñòâóþùåå êëþ÷åâîå ñëîâî, îïðåäåëÿþùåå åãî òèï:
  1605.                      <b>byte, char, int, long, dword</b> èëè <b>float</b>
  1606.  
  1607.        îïåðàòîð_îòíîøåíèÿ - ëþáîé èç îïåðàòîðîâ îòíîøåíèÿ:
  1608.                      <b>==, !=, <>, <, >, <=, èëè >=</b>.
  1609.  
  1610.        ïðàâàÿ_÷àñòü - ëþáîé îäèíî÷íûé ðåãèñòð, îäèíî÷íàÿ ïåðåìåííàÿ èëè
  1611.                      ïîñòîÿííîå âûðàæåíèå.
  1612.  
  1613.     Ïðèìåðû ïðàâèëüíûõ ñëîæíûõ óñëîâíûõ âûðàæåíèé:
  1614.  
  1615.          (X + y > z)
  1616.          (int CX*DX < = 12*3)
  1617.          (byte first*second+hold == cnumber)
  1618.  
  1619.     Ïðèìåðû íåäîïóñòèìûõ ñëîæíûõ óñëîâíûõ âûðàæåíèé:
  1620.  
  1621.          (x+y >= x-y) // ïðàâàÿ ÷àñòü íå ÿâëÿåòñÿ îäèíî÷íîé ëåêñåìîé èëè
  1622.                          ïîñòîÿííûì âûðàæåíèåì.
  1623.          (Z = y) // âìåñòî == îøèáî÷íî ïîñòàâëåí =
  1624. <a href="#contents4"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1625.  
  1626.  
  1627. <h2 id=4.6>
  1628.   4.6 Èçìåíåíèå òèïà âûðàæåíèÿ ïðè ïðèñâàèâàíèè.
  1629. </h2>
  1630.  
  1631.       Åñëè ïîñëå çíàêà ðàâåíñòâà íàïèñàòü òèï îòëè÷íûé îò òèïà âû÷èñëÿåìîé
  1632.   ïåðåìåííîé, òî âñå ïåðåìåííûå ó÷àñòâóþùèå â ïðîöåññå âû÷èñëåíèÿ, áóäóò
  1633.   ïðåîáðàçîâûâàòüñÿ ê ýòîìó íîâîìó òèïó, è ëèøü êîíå÷íûé ðåçóëüòàò áóäåò
  1634.   ïðåîáðàçîâàí ê òèïó âû÷èñëÿåìîé ïåðåìåííîé. Ïðèìåð:
  1635.  
  1636.   int i, a;
  1637.   long b;
  1638.   char c;
  1639.  
  1640.     i = a * b + c ;
  1641.  
  1642.       Çíà÷åíèÿ ïåðåìåííûõ a, b, è c â ýòîì ïðèìåðå ïåðåä âû÷èñëåíèåì áóäóò
  1643.   ïðåîáðàçîâàíû ê òèïó <b>int</b> (òèïó ïåðåìåííîé i). Íî åñëè çàïèñàòü ýòî
  1644.   âûðàæåíèå âîò òàê:
  1645.  
  1646.     i = long a * b + c ;
  1647.  
  1648.       òî  ïåðåìåííûå  a,  b,  è  c  â  ýòîì  ïðèìåðå  ïåðåä  âû÷èñëåíèåì áóäóò
  1649.   ïðåîáðàçîâàíû ê òèïó  <b>long</b>, à êîíå÷íûé  ðåçóëüòàò áóäåò ïðåîáðàçîâàí  ê òèïó
  1650.   ïåðåìåííîé i - <b>int</b>.
  1651. <a href="#contents4"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1652.  
  1653.  
  1654. <h2 id=4.7>
  1655.   4.7 Âû÷èñëåíèå â ðåãèñòðû EAX/AX/AL ñî çíàêîì.
  1656. </h2>
  1657.  
  1658.       Ïî óìîë÷àíèþ âñå âû÷èñëåíèÿ â ðåãèñòðû ïðîèçâîäÿòñÿ êàê ñ áåç çíàêîâûìè
  1659.   âåëè÷èíàìè.
  1660.  
  1661.   Íàïðèìåð:
  1662.  
  1663.     int a,b,c;
  1664.     AX = a * b / c ;
  1665.  
  1666.   Ïðè ýòîì êîìïèëÿòîð ãåíåðèðîâàë áåç çíàêîâûå èíñòðóêöèè <b>div</b> è <b>mul</b>, òàê êàê
  1667.   ðåãèñòðû ñ÷èòàþòñÿ áåç çíàêîâûìè ïåðåìåííûìè. Åñëè íàïèñàòü âîò òàê:
  1668.  
  1669.     AX = int a * b / c ;
  1670.  
  1671.   òî êîìïèëÿòîð ñãåíåðèðóåò èíñòðóêöèè <b>idiv</b> è <b>imul</b>.
  1672.  
  1673.        Îáðàùàþ âàøå âíèìàíèå, ÷òî äëÿ ðåãèñòðà <b>AL</b> ìîæíî èñïîëüçîâàòü òîëüêî
  1674.   ìîäèôèêàòîð <b>char</b>, äëÿ <b>AX</b> ñîîòâåòñòâåííî òîëüêî <b>int</b>, à äëÿ <b>EAX - long</b>. Äëÿ
  1675.   îñòàëüíûõ ðåãèñòðîâ ïîäîáíîå äåëàòü íåëüçÿ.
  1676. <a href="#contents4"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1677.  
  1678.  
  1679. <h2 id=5.1>
  1680. 5. Èäåíòèôèêàòîðû.
  1681.  
  1682.   5.1 Ôîðìàò èäåíòèôèêàòîðà.
  1683. </h2>
  1684.  
  1685.       Èäåíòèôèêàòîðû â C-- äîëæíû íà÷èíàòüñÿ èëè ñ ñèìâîëà ïîä÷åðêèâàíèÿ <b>_</b>
  1686.   èëè çàãëàâíûõ èëè ñòðî÷íûõ áóêâ. Ñëåäóþùèå ñèìâîëû ìîãóò áûòü ëþáîé
  1687.   êîìáèíàöèåé ñèìâîëîâ ïîä÷åðêèâàíèÿ, çàãëàâíûõ èëè ñòðî÷íûõ áóêâ èëè ÷èñåë
  1688.   (îò 0 äî 9). Îáùàÿ äëèíà èäåíòèôèêàòîðà íå ìîæåò ïðåâûøàòü 64 ñèìâîëà.
  1689.   Ñèìâîëû ñ êîäîì áîëüøå 0x7A (êîä ñèìâîëà <b>z</b>) íåäîïóñòèìû.
  1690.  
  1691.   Ïðèìåðû äîïóñòèìûõ èäåíòèôèêàòîðîâ:
  1692.  
  1693.   _DOG
  1694.   Loony12
  1695.   HowdYBoys_AND_Girls
  1696.   WOW___
  1697.   X
  1698.  
  1699.   Ïðèìåðû íåäîïóñòèìûõ èäåíòèôèêàòîðîâ:
  1700.  
  1701.   12bogus                                 /* íå ìîæåò íà÷èíàòüñÿ ñ ÷èñëà */
  1702.   WowisthisalongidentifieryupitsureisnotOyoulengthismorethat64chars
  1703.    /*äëèíà èäåíòèôèêàòîðà ïðåâûøàåò 64 */
  1704.   Y_es sir                                /* ïðîáåëû íåäîïóñòèìû */
  1705.   The-end                                 /* äåôèñû íåäîïóñòèìû */
  1706. <a href="#contents5"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1707.  
  1708.  
  1709. <h2 id=5.2>
  1710.   5.2 Çàðåçåðâèðîâàííûå èäåíòèôèêàòîðû.
  1711. </h2>
  1712.  
  1713.       Ñïèñîê çàðåçåðâèðîâàííûõ â C-- èäåíòèôèêàòîðîâ, êîòîðûå íå ìîãóò
  1714.   èñïîëüçîâàòüñÿ êàê îáùèå èäåíòèôèêàòîðû, ïîñêîëüêó îíè óæå áûëè îïðåäåëåíû
  1715.   èëè çàðåçåðâèðîâàíû äëÿ äðóãèõ öåëåé:
  1716.  
  1717.   <b>BREAK  CASE    CONTINUE  ELSE    EXTRACT  FALSE  FOR
  1718.   FROM   GOTO    IF        LOOPNZ  RETURN   SWITCH TRUE
  1719.   WHILE
  1720.  
  1721.   CARRYFLAG    MINUSFLAG  NOTCARRYFLAG  NOTOVERFLOW
  1722.   NOTZEROFLAG  OVERFLOW   PLUSFLAG      ZEROFLAG
  1723.  
  1724.   __CODEPTR__ __COMPILER__ __DATAPTR__ __DATESTR__ __DATE__    __DAY__
  1725.   __HOUR__    __LINE__     __MINUTE__  __MONTH__   __POSTPTR__ __SECOND__
  1726.   __TIME__    __VER1__     __VER2__    __WEEKDAY__ __YEAR__
  1727.  
  1728.   _export  asm     break   byte      case     cdecl   char       continue
  1729.   default  do      dword   else      enum     extern  far        fastcall
  1730.   float    for     goto    if        inline   int     interrupt  long
  1731.   loop     loopnz  pascal  return    short    signed  sizeof     static
  1732.   stdcall  struct  switch  union     unsigned void    while      word
  1733.  
  1734.   ESCHAR  ESBYTE  ESINT  ESWORD  ESLONG  ESDWORD  ESFLOAT
  1735.   CSCHAR  CSBYTE  CSINT  CSWORD  CSLONG  CSDWORD  CSFLOAT
  1736.   SSCHAR  SSBYTE  SSINT  SSWORD  SSLONG  SSDWORD  SSFLOAT
  1737.   DSCHAR  DSBYTE  DSINT  DSWORD  DSLONG  DSDWORD  DSFLOAT
  1738.   FSCHAR  FSBYTE  FSINT  FSWORD  FSLONG  FSDWORD  FSFLOAT
  1739.   GSCHAR  GSBYTE  GSINT  GSWORD  GSLONG  GSDWORD  GSFLOAT
  1740.  
  1741.   AX   CX   DX   BX   SP   BP   SI   DI
  1742.   EAX  ECX  EDX  EBX  ESP  EBP  ESI  EDI
  1743.   AL   CL   DL   BL   AH   CH   DH   BH
  1744.   ES   CS   SS   DS   FS   GS
  1745.  
  1746.   ST(0)  ST(1)  ST(2)  ST(3)  ST(4)  ST(5)  ST(6)  ST(7)  ST
  1747.   st(0)  st(1)  st(2)  st(3)  st(4)  st(5)  st(6)  st(7)  st
  1748. </b>
  1749.       Ýòîò ñïèñîê ìîæåò áûòü ïîëó÷åí èç C-- òðàíñëÿòîðà â ëþáîå âðåìÿ,
  1750.   çàïóñêîì åãî ñ îïöèåé <b>/WORDS</b> èç êîìàíäíîé ñòðîêè.
  1751.  
  1752.       Åñëè Âû ïîëüçóåòåñü ïðè êîìïèëÿöèè îïöèåé êîìàíäíîé ñòðîêè <b>/ia</b>, êîòîðàÿ
  1753.   ïîçâîëÿåò èñïîëüçîâàòü àññåìáëåðíûå èíñòðóêöèè íå çàêëþ÷àÿ èõ â áëîêè <b>asm</b> è
  1754.   áåç ïðåôèêñà <b>$</b>, òî âñå èìåíà àññåìáëåðíûõ èíñòðóêöèé ñòàíîâÿòñÿ
  1755.   çàðåçåðâèðîâàííûìè ñëîâàìè. Ïðè÷åì èìåíà àññåìáëåðíûõ èíñòðóêöèé êîìïèëÿòîð
  1756.   ðàçëè÷àåò íåçàâèñèìî îò òîãî, íàïèñàíû îíè ìàëåíüêèìè èëè áîëüøèìè áóêâàìè.
  1757.  
  1758.      Ñïèñîê èìåí ïîääåðæèâàåìûõ êîìïèëÿòîðîì àññåìáëåðíûõ èíñòðóêöèè ìîæíî
  1759.   ïîëó÷èòü çàïóñòèâ êîìïèëÿòîð ñ îïöèåé <b>/LAI</b>.
  1760.  
  1761.      Êðîìå ýòîãî â àññåìáëåðíûõ èíñòðóêöèÿõ ñòàíîâÿòñÿ çàðåçåðâèðîâàííûìè
  1762.   ñëåäóþùèå èäåíòèôèêàòîðû:
  1763.  
  1764.   <b>ax   cx   dx   bx   sp   bp   si   di
  1765.   eax  ecx  edx  ebx  esp  ebp  esi  edi
  1766.   al   cl   dl   bl   ah   ch   dh   bh
  1767.   es   cs   ss   ds   fs   gs
  1768.  
  1769.   DR0   DR1   DR2   DR3   DR4   DR5   DR6   DR7
  1770.   CR0   CR1   CR2   CR3   CR4   CR5   CR6   CR7
  1771.   TR0   TR1   TR2   TR3   TR4   TR5   TR6   TR7
  1772.   MM0   MM1   MM2   MM3   MM4   MM5   MM6   MM7
  1773.   XMM0  XMM1  XMM2  XMM3  XMM4  XMM5  XMM6  XMM7
  1774.  
  1775.   dr0   dr1   dr2   dr3   dr4   dr5   dr6   dr7
  1776.   cr0   cr1   cr2   cr3   cr4   cr5   cr6   cr7
  1777.   tr0   tr1   tr2   tr3   tr4   tr5   tr6   tr7
  1778.   mm0   mm1   mm2   mm3   mm4   mm5   mm6   mm7
  1779.   xmm0  xmm1  xmm2  xmm3  xmm4  xmm5  xmm6  xmm7
  1780. </b><a href="#contents5"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1781.  
  1782.  
  1783. <h2 id=5.3>
  1784.   5.3 Óíèâåðñàëüíûå ðåãèñòðû äëÿ 16 è 32-áèòíîãî ðåæèìà.
  1785. </h2>
  1786.  
  1787.       Ïðè ñîçäàíèè áèáëèîòå÷íûõ ïðîöåäóð î÷åíü ÷àñòî ïðèõîäèòñÿ ïèñàòü
  1788.   âàðèàíòû ïðîöåäóðû äëÿ ðàáîòû â 16-áèòíîì è 32-áèòíîì ðåæèìàõ, êîòîðûå
  1789.   îòëè÷àþòñÿ äðóã îò äðóãà ëèøü èñïîëüçîâàíèåì â íèõ ëèáî 16-áèòíûõ ëèáî
  1790.   32-áèòíûõ ðåãèñòðîâ ñîîòâåòñòâåííî. Íî ìîæíî ïèñàòü ëèøü îäíó ïðîöåäóðó,
  1791.   èñïîëüçóÿ â íåé íîâûé ñèíòàêñèñ ðåãèñòðîâ. Åñëè êîìïèëÿòîð âñòðåòèò âîò
  1792.   òàêîé ñèíòàêñèñ:
  1793.  
  1794.     (E)AX=0;
  1795.  
  1796.       òî êîìïèëÿòîð áóäåò èñïîëüçîâàòü ïðè êîìïèëÿöèè 16-áèòíîãî êîäà ðåãèñòð
  1797.   <b>AX</b>, à ïðè êîìïèëÿöèè 32-áèòíîãî êîäà ðåãèñòð <b>EAX</b>.
  1798.  
  1799.       Èñïîëüçîâàíèå àâòîìàòè÷åñêèõ ðåãèñòðîâ ïîçâîëèò óïðîñòèòü áèáëèîòå÷íûå
  1800.   ôàéëû è ñäåëàòü èõ áîëåå ïîíÿòíûìè.
  1801. <a href="#contents5"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1802.  
  1803.  
  1804. <h2 id=5.4>
  1805.   5.4 Ïðåäîïðåäåëåííûå èäåíòèôèêàòîðû.
  1806. </h2>
  1807.  
  1808.       Èäåíòèôèêàòîðû, îïðåäåëÿåìûå êîìïèëÿòîðîì â çàâèñèìîñòè îò ðåæèìà
  1809.   êîìïèëÿöèè:
  1810.  
  1811.   <b>__TLS__</b>     èäåò êîìïèëÿöèÿ ïîä windows (w32, w32c, dll).
  1812.   <b>__DLL__</b>     èäåò êîìïèëÿöèÿ dll.
  1813.   <b>__CONSOLE__</b> èäåò êîìïèëÿöèÿ êîíñîëüíîãî ïðèëîæåíèÿ windows
  1814.   <b>__WIN32__</b>   èäåò êîìïèëÿöèÿ GUI-øíîãî ïðèëîæåíèÿ
  1815.   <b>__FLAT__</b>    êîìïèëèðóåòñÿ 32-áèòíûé êîä.
  1816.   <b>__MSDOS__</b>   êîìïèëèðóåòñÿ 16-áèòíûé êîä.
  1817.   <b>__TINY__</b>    èñïîëüçóåòñÿ ìîäåëü ïàìÿòè tiny â 16-áèòíîì ðåæèìå
  1818.   <b>__SMALL__</b>   èñïîëüçóåòñÿ ìîäåëü ïàìÿòè small â 16-áèòíîì ðåæèìå
  1819.   <b>__DOS32__</b>   êîìïèëèðóåòñÿ 32-áèòíûé êîä ïîä DOS (d32)
  1820.   <b>__COM__</b>     êîìïèëèðóåòñÿ com-ôàéë
  1821.   <b>__SYS__</b>     êîìïèëèðóåòñÿ sys-ôàéë
  1822.   <b>__ROM__</b>     êîìïèëèðóåòñÿ rom-ôàéë
  1823.   <b>__OBJ__</b>     êîìïèëèðóåòñÿ obj-ôàéë
  1824.   <b>__TEXE__</b>    êîìïèëèðóåòñÿ exe-ôàéë ìîäåëè tiny
  1825.   <b>__EXE__</b>     êîìïèëèðóåòñÿ exe-ôàéë ìîäåëè small
  1826.   <b>__MEOS__</b>    êîìïèëèðóåòñÿ èñïîëíÿåìûé ôàéë äëÿ MenuetOS
  1827.   <b>codesize</b>    êîìïèëÿöèÿ âåäåòñÿ ñ îïòèìèçàöèåé íà ðàçìåð êîäà
  1828.   <b>speed</b>       êîìïèëÿöèÿ âåäåòñÿ ñ îïòèìèçàöèåé íà áûñòðîäåéñòâèå êîäà
  1829.   <b>cpu</b>         îïðåäåëÿåò òèï ïðîöåññîðà äëÿ êîòîðîãî âåäåòñÿ êîìïèëÿöèÿ:
  1830.             0 - 8086
  1831.             1 - 80186
  1832.             2 - 80286
  1833.             3 - 80386
  1834.             4 - 80486
  1835.             5 - Pentium
  1836.             6 - Pentium MMX
  1837.             7 - Pentium II
  1838.  
  1839.       Ýòè èäåíòèôèêàòîðû ìîãóò áûòü ïðîâåðåíû äèðåêòèâàìè <b>#ifdef</b> èëè <b>#ifndef</b>.
  1840.   Èäåíòèôèêàòîð <b>cpu</b> ìîæåò áûòü èñïîëüçîâàí ëèøü ñ îïåðàòîðàìè ïðîâåðêè
  1841.   óñëîâèé:
  1842.  
  1843.   #ifdef cpu > 3  //åñëè òèï ïðîöåññîðà áîëüøå 80386
  1844. <a href="#contents5"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1845.  
  1846.  
  1847. <h2 id=6.1>
  1848. 6. Ïåðåìåííûå.
  1849.  
  1850.   6.1 Òèïû ïåðåìåííûõ.
  1851. </h2>
  1852.  
  1853.       Â C-- èìååòñÿ ñåìü òèïîâ ïåðåìåííûõ (èìåíîâàííûõ îáëàñòåé ïàìÿòè), ýòî:
  1854.   <b>byte, word, dword, char, int, long, float.</b>
  1855.  
  1856.       Ñëåäóþùàÿ òàáëèöà  ïîêàçûâàåò ðàçìåð  è äèàïàçîí  ïðåäñòàâëÿåìûõ âåëè÷èí
  1857.   êàæäîãî èç òèïîâ ïåðåìåííîé:
  1858.  
  1859.    NAME   | SIZE  |        VALUE RANGE          |        VALUE RANGE
  1860.    òèï    |ðàçìåð |   äèàïàçîí ïðåäñòàâëåíèÿ    |   äèàïàçîí ïðåäñòàâëåíèÿ
  1861.           |â áàéò.|    â äåñÿòè÷íîé ñèñòåìå     | â øåñòíàäöàòåðè÷íîé ñèñòåìå
  1862.   ---------------------------------------------------------------------------
  1863.   byte    |   1   |           0 to 255          |        0x00 to 0xFF
  1864.   word    |   2   |           0 to 65535        |      0x0000 to 0xFFFF
  1865.   dword   |   4   |           0 to 4294967295   |  0x00000000 to 0xFFFFFFFF
  1866.   char    |   1   |        -128 to 127          |        0x80 to 0x7F
  1867.   int     |   2   |      -32768 to 32767        |      0x8000 to 0x7FFF
  1868.   long    |   4   | -2147483648 to 2147483647   |  0x80000000 to 0x7FFFFFFF
  1869.   float   |   4   |    -3,37E38 to +3,37E38     |  0xFF7FFFFF to 0x7FFFFFFF
  1870.  
  1871.       Ïðèìå÷àíèå:  äëÿ ðàáîòû ñ òèïàìè <b>float, dword è long</b> èñïîëüçóþòñÿ
  1872.   32-ðàçðÿäíûå öåëî÷èñëåííûå êîìàíäû, ñëåäîâàòåëüíî, äëÿ èõ âûïîëíåíèÿ íóæíî
  1873.   èìåòü ïðîöåññîð íå õóæå 80386, ÷òî ñåé÷àñ íå ÿâëÿåòñÿ áîëüøîé ïðîáëåìîé.
  1874.  
  1875.       Äëÿ ñîâìåñòèìîñòè ñî ñòàíäàðòîì, ïðèíÿòîì â ÿçûêå <b>C</b>, ââåäåíû
  1876.   íîâûå çàðåçåðâèðîâàííûå ñëîâà: <b>short</b>, <b>signed</b>, <b>unsigned</b>. Äëÿ òèïà <b>int</b>
  1877.   â 32-áèòíîì ðåæèìå èçìåíåíà ðàçðÿäíîñòü. Âîò òàáëèöà âñåõ âàðèàíòîâ íîâûõ
  1878.   òèïîâ äàííûõ:
  1879.  
  1880.   ---------------------------------------------------------
  1881.   |   ïîëíûé òèï     |äîïóñòèìûå ñîêðàùåíèÿ|ñòàðûå àíàëîãè|
  1882.   ---------------------------------------------------------
  1883.   |signed char       |char                 |  char        |
  1884.   |signed int        |signed, int          |  int/long    |
  1885.   |signed short int  |short, signed short  |  int         |
  1886.   |signed long int   |long, signed long    |  long        |
  1887.   |unsigned char     |---                  |  byte        |
  1888.   |unsigned int      |unsigned             |  word/dword  |
  1889.   |unsigned short int|unsigned short       |  word        |
  1890.   |unsigned long int |unsigned long        |  dword       |
  1891.   ---------------------------------------------------------
  1892.  
  1893.       Ñòàðûå òèïû <b>byte, word è dword</b> ïîääåðæèâàþòñÿ ïî ïðåæíåìó è èìåþò
  1894.   ôóíêöèîíàëüíî ïðåæíåå çíà÷åíèå. Èçìåíåíèÿ êîñíóëèñü ëèøü òèïà <b>int</b>. Îí â
  1895.   16-áèòíîì ðåæèìå, òàêæå êàê è òèï <b>unsigned int</b>, èìååò 16-áèòíûé ðàçìåð, à
  1896.   â 32-áèòíîì ðåæèìå ýòè îáà òèïà èìåþò ðàçìåð â 32-áèòà. Íà ïåðâûé âçãëÿä
  1897.   òàêèå ñâîéñòâà òèïà <b>int</b> âíîñÿò íåêîòîðóþ ïóòàíèöó, íî ýòî äàåò áîëüøîé
  1898.   âûèãðûø ïðè èñïîëüçîâàíèè ýòîãî òèïà â áèáëèîòå÷íûõ ôàéëàõ, êîòîðûå ìîãóò
  1899.   áûòü èñïîëüçîâàíû ïðè êîìïèëÿöèè 16-áèòíûõ è 32-áèòíûõ ïðîãðàìì.
  1900. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1901.  
  1902.  
  1903. <h2 id=6.2>
  1904.   6.2 Îáúÿâëåíèå ïåðåìåííûõ.
  1905. </h2>
  1906.  
  1907.       Ñèíòàêñèñ äëÿ îáúÿâëåíèÿ ïåðåìåííûõ ñëåäóþùèé:
  1908.  
  1909.   variable-type identifier;
  1910.  
  1911.   ãäå <b>variable-type - char, byte, int, word, long, dword</b> èëè <b>float</b>.
  1912.  
  1913.       Îäíîâðåìåííî ìîãóò áûòü îáúÿâëåíû íåñêîëüêî èäåíòèôèêàòîðîâ îäíîãî òèïà:
  1914.  
  1915.   variable-type identifier1, identifier2, ... , identifierN;
  1916.  
  1917.       Îäíîìåðíûå ìàññèâû ìîãóò áûòü îáúÿâëåíû ñëåäóþùèì îáðàçîì:
  1918.  
  1919.   variable-type identifier[elements];
  1920.  
  1921.   ãäå <b>elements</b> -  ïîñòîÿííîå âûðàæåíèå äëÿ  êîëè÷åñòâà ïåðåìåííûõ ýòîãî  òèïà,
  1922.   îáúåäèíåííûõ â ìàññèâ.
  1923.  
  1924.       Èíèöèàëèçèðîâàííûå ìàññèâû ìîæíî îáúÿâëÿòü áåç óêàçàíèÿ ÷èñëà
  1925.   ýëåìåíòîâ. Ïðè ýòîì áóäåò ñîçäàí ìàññèâ ïî ôàêòè÷åñêîìó ÷èñëó ýëåìåíòîâ.
  1926.  
  1927.   variable-type identifier[] = { const1, const2 };
  1928.  
  1929.       Ïåðåìåííûå ïðè îáúÿâëåíèè ìîãóò áûòü ïðîèíèöèàëèçèðîâàíû ñëåäóþùèì
  1930.   îáðàçîì:
  1931.  
  1932.   variable-type identifier = value;
  1933.  
  1934.       Íåêîòîðûå ïðèìåðû ãëîáàëüíûõ îáúÿâëåíèé:
  1935.   byte i,j;    /* îáúÿâëÿåò äâå ïåðåìåííûå òèïà byte ñ èìåíàìè i è j */
  1936.   word see[10] /* îáúÿâëÿåò ìàññèâ ñ èìåíåì see, ñîñòîÿùèé èç 10
  1937.                   ýëåìåíòîâ òèïà word */
  1938.   int h,x[27]  /* îáúÿâëÿåò, ïåðåìåííóþ òèïà int ñ èìåíåì h,
  1939.                   è ìàññèâ ñ èìåíåì x, ñîñòîÿùèé èç 27 ýëåìåíòîâ òèïà int */
  1940.   long size=0; /* îáúÿâëåíà ïåðåìåííàÿ òèïà long ñ èìåíåì size è åé ïðèñâîåíî
  1941.                   çíà÷åíèå 0. */
  1942. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1943.  
  1944.  
  1945. <h2 id=6.3>
  1946.   6.3 Ãëîáàëüíûå ïåðåìåííûå.
  1947. </h2>
  1948.  
  1949.       Ãëîáàëüíûå ïåðåìåííûå - ýòî ïåðåìåííûå, îáëàñòü äåéñòâèÿ êîòîðûõ
  1950.   ðàñïðîñòðàíÿåòñÿ íà âñþ ïðîãðàììó. Â C-- èñïîëüçîâàòü ãëîáàëüíûå ïåðåìåííûå
  1951.   ìîæíî â ïðîöåäóðàõ, ðàñïîëîæåííûõ íèæå ìåñòà åå îáúÿâëåíèÿ. Ò.å. åñëè Âû
  1952.   ïèøèòå ïðîöåäóðó, â êîòîðîé èñïîëüçóåòå ïåðåìåííóþ var, à ñàìó ïåðåìåííóþ
  1953.   îáúÿâëÿåòå íèæå òåêñòà ïðîöåäóðû, òî êîìïèëÿòîð âûäàñò îøèáêó. Ýòî ñâÿçàíî
  1954.   ñ òåì, ÷òî êîìïèëÿòîð ìîæåò çíàòü òèï ïåðåìåííîé òîëüêî ïîñëå èõ
  1955.   îáúÿâëåíèÿ.  Íî äëÿ òàêèõ ïåðåìåííûõ ìîæíî èñïîëüçîâàòü âçÿòèå èõ àäðåñà,
  1956.   òàê êàê àäðåñ ïåðåìåííîé íå çàâèñèò îò åãî òèïà. Ïðèìåð:
  1957.  
  1958.   void Proc(){
  1959.     gvar = 0; /* êîìïèëÿòîð âûäàñò ñîîáùåíèå îá îøèáêå, ò.ê. îí åùå íå çíàåò
  1960.                  òèïà ïåðåìåííîé gvar */
  1961.     AX = #gvar; /* íåñìîòðÿ íà òî, ÷òî êîìïèëÿòîð íå çíàåò è àäðåñà ýòîé
  1962.                    ïåðåìåííîé òàêîå âûðàæåíèå áóäåò îòêîìïèëèðîâàíî */
  1963.   }
  1964.   int gvar;
  1965.  
  1966.       Íî âñå æå ñèòóàöèÿ íå áåçíàäåæíà è íàì óäàñòñÿ äîáèòüñÿ òîãî, ÷åãî ìû
  1967.   çàäóìàëè. Â ýòîì íàì ïîìîæåò àëüòåðíàòèâíûé ñèíòàêñèñ îáðàùåíèÿ ê
  1968.   ïåðåìåííûì:
  1969.  
  1970.   void Proc(){
  1971.     DSINT[#gvar] = 0; /* êîìïèëÿòîð óñïåøíî îòêîìïèëèðóåò ýòî âûðàæåíèå ò.ê.
  1972.                          åìó òåïåðü èçâåñòåí òèï ïåðåìåííîé gvar */
  1973.   }
  1974.   int gvar;
  1975.  
  1976.       Ïàìÿòü ïîä ãëîáàëüíûå ïåðåìåííûå âûäåëÿåòñÿ â ñåãìåíòå äàííûõ. Åñëè
  1977.   ïåðåìåííàÿ ïðè îáúÿâëåíèè èíèöèàëèçèðóåòñÿ (ò.å. åé ïðèñâîåíî êàêîå-òî
  1978.   çíà÷åíèå), òî ïåðåìåííàÿ áóäåò âêëþ÷åíà â êîä êîìïèëèðóåìîãî ôàéëà. Åñëè
  1979.   ïåðåìåííàÿ íå èíèöèàëèçèðóåòñÿ, òî ìåñòî äëÿ ïåðåìåííîé áóäåò
  1980.   çàðåçåðâèðîâàíî ñðàçó æå çà ïîñëåäíèì áàéòîì ñêîìïèëèðîâàííîé ïðîãðàììû.
  1981. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  1982.  
  1983.  
  1984. <h2 id=6.4>
  1985.   6.4 Ëîêàëüíûå ïåðåìåííûå.
  1986. </h2>
  1987.  
  1988.       Ëîêàëüíûå ïåðåìåííûå - ýòî ïåðåìåííûå îáëàñòü äåéñòâèÿ êîòîðûõ
  1989.   ðàñïðîñòðàíÿåòñÿ ëèøü â ïðåäåëàõ îäíîé ïðîöåäóðû. Îáúÿâëÿòü ëîêàëüíûå
  1990.   ïåðåìåííûå, â îòëè÷èè îò ñîâðåìåííûõ âåðñèé <b>C</b>, ìîæíî ìåæäó èìåíåì ïðîöåäóðû
  1991.   è ïåðâîé îòêðûâàþùåéñÿ ôèãóðíîé ñêîáêîé. Ïðèìåð:
  1992.  
  1993.   void PROC ()
  1994.   int i;  //îáúÿâëåíà ëîêàëüíàÿ ïåðåìåííàÿ òèïà int ñ èìåíåì i
  1995.   {
  1996.       for ( i=0; i<10; i++ ) WRITE(1);
  1997.   }
  1998.  
  1999.       Ïàìÿòü ïîä ëîêàëüíûå ïåðåìåííûå îòâîäèòñÿ â ñåãìåíòå ñòåêà.
  2000.  
  2001.       Ê ëîêàëüíûì ïåðåìåííûì ìîæíî îòíåñòè è ïàðàìåòðû ñòåêîâûõ ïðîöåäóð. Ïîä
  2002.   íèõ òàêæå îòâîäèòñÿ ïàìÿòü â ñòåêå.
  2003.  
  2004.       Ìîæíî èíèöèàëèçèðîâàòü ëîêàëüíûå ïåðåìåííûå ïðè èõ îáúÿâëåíèè. Íî åñòü
  2005.   íåêîòîðûå îãðàíè÷åíèÿ. Íåëüçÿ èíèöèàëèçèðîâàòü ìàññèâû è ìíîãîìåðíûå
  2006.   ñòðóêòóðû. Èíèöèàëèçèðîâàòü ìîæíî îäíèì çíà÷åíèåì, ò.å íåëüçÿ ïðè
  2007.   èíèöèàëèçàöèè ëîêàëüíûõ ïåðåìåííûõ ïîëüçîâàòüñÿ ïåðå÷èñëåíèåì çàêëþ÷åííûì â
  2008.   ôèãóðíûå ñêîáêè è îïåðàòîðàìè <b>FROM</b> è <b>EXTRACT</b>.
  2009.  
  2010.       Èìåíà ëîêàëüíûõ ïåðåìåííûõ ìîãóò ñîâïàäàòü ñ èìåíàìè ãëîáàëüíûõ
  2011.   ïåðåìåííûõ èëè ïðîöåäóð, íî òîãäà Âû íå ñìîæåòå îáðàòèòüñÿ ê ãëîáàëüíîé
  2012.   ïåðåìåííîé èëè âûçâàòü îäíîèìåííóþ ïðîöåäóðó.
  2013.  
  2014.       Ëîêàëüíûå ïåðåìåííûå ìîæíî îáúÿâëÿòü è â íà÷àëå áëîêà ïðîöåäóðû. Íî
  2015.   òîëüêî äî íà÷àëà òåëà ïðîöåäóðû. Ïðèìåð:
  2016.  
  2017.   void proc(){
  2018.   int locproc;  // îáúÿâëåíèå ëîêàëüíîé ïðîöåäóðû
  2019.     locproc=0;  // à òåïåðü ïîøëî òåëî ïðîöåäóðû
  2020.   int locproc;  // à íà ýòî îáúÿâëåíèå ïåðåìåííîé êîìïèëÿòîð âûäàñò ñîîáùåíèå
  2021.                 // îá îøèáêå, ò.ê. óæå íà÷àëîñü òåëî ïðîöåäóðû
  2022.   }
  2023. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2024.  
  2025.  
  2026. <h2 id=6.5>
  2027.   6.5 Äèíàìè÷åñêèå ïåðåìåííûå è ñòðóêòóðû.
  2028. </h2>
  2029.  
  2030.       Íàðÿäó ñ óæå èçâåñòíûìè Âàì äèíàìè÷åñêèìè ïðîöåäóðàìè â C-- åñòü
  2031.   âîçìîæíîñòü èñïîëüçîâàòü äèíàìè÷åñêè è ïåðåìåííûå è ñòðóêòóðû. Äèíàìè÷åñêèå
  2032.   ïåðåìåííûå è ñòðóêòóðû îáîçíà÷àþòñÿ òàêæå êàê è äèíàìè÷åñêèå ïðîöåäóðû -
  2033.   ñèìâîëîì äâîåòî÷èÿ ïåðåä íà÷àëîì èõ îáúÿâëåíèÿ. È òàêæå êàê è äèíàìè÷åñêàÿ
  2034.   ïðîöåäóðà, äèíàìè÷åñêàÿ ïåðåìåííàÿ èëè ñòðóêòóðà áóäåò âñòàâëåíà â êîä,
  2035.   ëèøü â òîì ñëó÷àå, åñëè îíà áóäåò èñïîëüçîâàíà â ïðîãðàììå.
  2036.  
  2037.       Äèíàìè÷åñêèå ïåðåìåííûå è ñòðóêòóðû íàéäóò ïðèìåíåíèå â áèáëèîòåêàõ.
  2038.   Èñïîëüçîâàòü èõ íåïîñðåäñòâåííî â ïðîãðàììàõ íåò ñìûñëà.
  2039.  
  2040.       Ó äèíàìè÷åñêèõ ïåðåìåííûõ, ñòðóêòóð òàêæå êàê è ó ïðîöåäóð, åñòü îäèí
  2041.   íåäîñòàòîê - Âû íå ñìîæåòå çíàòü, â êàêîì ìåñòå îòêîìïèëèðîâàííîãî êîäà îíè
  2042.   áóäóò ðàñïîëîæåíû, è â êàêîì ïîðÿäêå. Íî íåîáõîäèìîñòü ýòî çíàòü áûâàåò
  2043.   î÷åíü ðåäêî.
  2044.  
  2045.       Äèíàìè÷åñêèå èíèöèàëèçèðîâàííûå ïåðåìåííûå è ñòðóêòóðû â ôàéëå áóäóò
  2046.   ðàñïîëîæåíû â åãî ñàìîì êîíöå, ïîñëå äèíàìè÷åñêèõ ïðîöåäóð. Ýòó èõ
  2047.   îñîáåííîñòü ìîæíî èñïîëüçîâàòü, åñëè Âàì áóäåò íåîáõîäèìî, ÷òîáû äàííûå íå
  2048.   áûëè ðàçáðîñàíû ñðåäè êîäà, à áûëè ñãðóïïèðîâàíû â îäíîì ìåñòå.
  2049. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2050.  
  2051.  
  2052. <h2 id=6.6>
  2053.   6.6 Ïðèñâàèâàíèå îäíîãî çíà÷åíèÿ íåñêîëüêèì ïåðåìåííûì.
  2054. </h2>
  2055.  
  2056.       Åñëè Âàì íåîáõîäèìî ïðèñâîèòü íåñêîëüêèì ïåðåìåííûì îäèíàêîâûå çíà÷åíèÿ:
  2057.  
  2058.     var1=0;
  2059.     var2=0;
  2060.     var3=0;
  2061.  
  2062.       òî òåïåðü ýòî ìîæíî çàïèñàòü áîëåå êîðîòêî:
  2063.  
  2064.     var1=var2=var3=0;
  2065.  
  2066.       Ïðè èñïîëüçîâàíèè òàêîé çàïèñè ãåíåðèðóåòñÿ áîëåå êîìïàêòíûé è áîëåå
  2067.   áûñòðûé êîä.
  2068. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2069.  
  2070.  
  2071. <h2 id=6.7.1>
  2072.   6.7 Ïåðåìåííûå òèïà float.
  2073.  
  2074.     6.7.1 Ôîðìàò ïåðåìåííûõ òèïà float.
  2075. </h2>
  2076.  
  2077.         Äëÿ ïðåäñòàâëåíèÿ çíà÷åíèé ñ ïëàâàþùåé òî÷êîé â ÿçûê C-- ââåäåí òèï
  2078.     float. Ýòîìó òèïó ñîîòâåòñòâóåò äåéñòâèòåëüíîå ÷èñëî îäèíàðíîé òî÷íîñòè
  2079.     FPU.
  2080.  
  2081.         Ôîðìàò ïðåäñòàâëåíèÿ äàííûõ ñ ïëàâàþùåé òî÷êîé âêëþ÷àåò òðè ïîëÿ:
  2082.     çíàêà, ìàíòèññû è ïîðÿäêà. Çíàê îïðåäåëÿåòñÿ ñòàðøèì çíà÷àùèì ðàçðÿäîì.
  2083.     Ïîëå ìàíòèññû ñîäåðæèò çíà÷àùèå áèòû ÷èñëà, à ïîëå ïîðÿäêà ñîäåðæèò
  2084.     ñòåïåíü 2 è îïðåäåëÿåò ìàñøòàáèðóþùèé ìíîæèòåëü äëÿ ìàíòèññû.
  2085.  
  2086.     31 30.....23 22........0
  2087.     |  |      |  |         |
  2088.     |  |      |  -------------- - ïîëå ìàíòèññû
  2089.     |  ------------------------ - ïîëå ïîðÿäêà
  2090.     --------------------------- - áèò çíàêà
  2091. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2092.  
  2093.  
  2094. <h2 id=6.7.2>
  2095.     6.7.2 Êîíñòàíòû ñ ïëàâàþùåé òî÷êîé.
  2096. </h2>
  2097.  
  2098.         Êîìïèëÿòîð îòëè÷àåò âåùåñòâåííîå ÷èñëî îò öåëîãî ïî íàëè÷èþ â íåì
  2099.     òî÷êè. Íà÷èíàòüñÿ âåùåñòâåííîå ÷èñëî äîëæíî ëèáî öèôðîé îò <b>0</b> äî <b>9</b>, ëèáî
  2100.     çíàêîì ìèíóñ. Íåîáÿçàòåëüíîé ÷àñòüþ âåùåñòâåííîãî ÷èñëà ÿâëÿåòñÿ
  2101.     ïîêàçàòåëü ñòåïåíè. Ïîêàçàòåëü ñòåïåíè îòäåëÿåòñÿ îò ÷èñëà ñèìâîëîì <b>e</b> èëè
  2102.     <b>E</b>. Ïðîáåëû íåäîïóñòèìû. Âîò ïðèìåðû äîïóñòèìîãî ñèíòàêñèñà:
  2103.  
  2104.      0.98
  2105.      -15.75
  2106.      3.14e2
  2107.      1.234567E-20
  2108. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2109.  
  2110.  
  2111. <h2 id=6.7.3>
  2112.     6.7.3 Äèàïàçîí äîïóñòèìûõ çíà÷åíèé.
  2113. </h2>
  2114.  
  2115.         Âåùåñòâåííîå ÷èñëî òèïà float ìîæåò íàõîäèòüñÿ â äèàïàçîíå îò 3.37E38
  2116.     äî -3.37E38. Ìèíèìàëüíî áëèçêîå ê íóëþ çíà÷åíèå ðàâíÿåòñÿ 1.17E-38 è
  2117.     -1.17E-38. Çàïèñûâàòü âåùåñòâåííîå ÷èñëî îäèíàðíîé òî÷íîñòè áîëåå ÷åì 8
  2118.     öèôðàìè íå èìååò ñìûñëà. Ïîêàçàòåëü ñòåïåíè ìîæåò ïðèíèìàòü çíà÷åíèÿ îò
  2119.     +38 äî -38.
  2120. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2121.  
  2122.  
  2123. <h2 id=6.7.4>
  2124.     6.7.4 Ìàòåìàòè÷åñêèå îïåðàöèè.
  2125. </h2>
  2126.  
  2127.         Êîìïèëÿòîð ïîääåðæèâàåò 4 îñíîâíûõ äåéñòâèÿ íàä ïåðåìåííûìè òèïà
  2128.     float: ñëîæåíèå, âû÷èòàíèå, óìíîæåíèå è äåëåíèå. Ïîääåðæèâàåòñÿ òàêæå
  2129.     èíêðåìåíò (var++ - óâåëè÷åíèå íà 1), äåêðåìåíò (var-- - óìåíüøåíèå íà 1),
  2130.     ñìåíà çíàêà (-var) è îáìåí çíà÷åíèÿìè (var1 >< var2). Îñòàëüíûå
  2131.     ìàòåìàòè÷åñêèå îïåðàöèè áóäóò ðåàëèçîâàíû ëèáî óæå ðåàëèçîâàíû âî âíåøíèõ
  2132.     áèáëèîòåêàõ. Ïðè âû÷èñëåíèè çíà÷åíèÿ ïåðåìåííîé <b>float</b> ìîæíî èñïîëüçîâàòü
  2133.     è ïåðåìåííûå äðóãèõ òèïîâ, îíè áóäóò àâòîìàòè÷åñêè ïðåîáðàçîâàíû â òèï
  2134.     <b>float</b>.
  2135.  
  2136.         <font color="Red"><b>ÂÍÈÌÀÍÈÅ! Ñîñòàâíûå ìàòåìàòè÷åñêèå  îïåðàöèè âûïîëíÿþòñÿ â òîì
  2137.     ïîðÿäêå, â êîòîðîì îíè çàïèñàíû, íåâçèðàÿ íà ïðàâèëà àðèôìåòèêè</b></font>.
  2138. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2139.  
  2140.  
  2141. <h2 id=6.7.5>
  2142.     6.7.5 Ïðåîáðàçîâàíèÿ òèïîâ.
  2143. </h2>
  2144.  
  2145.         Ïðè ìàòåìàòè÷åñêèõ îïåðàöèÿõ êîíå÷íûì èòîãîì êîòîðûõ ÿâëÿåòñÿ
  2146.     ïåðåìåííàÿ òèïà <b>float</b>, âñå îïåðàíäû äðóãèõ òèïîâ ïåðåä âû÷èñëåíèåì áóäóò
  2147.     ïðåîáðàçîâàíû â òèï <b>float</b>. Ïðè ïðèñâàèâàíèè ïåðåìåííîé òèïà <b>float</b> çíà÷åíèÿ
  2148.     ïåðåìåííîé äðóãîãî òèïà îíî òàêæå áóäåò ïðåîáðàçîâàíî â òèï <b>float</b>.
  2149.  
  2150.         Åñëè ïðè öåëî÷èñëåííûõ âû÷èñëåíèÿõ îäíèì èç îïåðàíäîâ áóäåò ïåðåìåííàÿ
  2151.     òèïà <b>float</b>, òî èç íåãî áóäåò âûäåëåíà öåëàÿ ÷àñòü, êîòîðàÿ è ïðèìåò
  2152.     ó÷àñòèå â âû÷èñëåíèÿõ. Ïðè ïðèñâàèâàíèè öåëî÷èñëåííîé ïåðåìåííîé çíà÷åíèÿ
  2153.     ïåðåìåííîé òèïà <b>float</b>, èç íåå òàêæå áóäåò âûäåëåíà öåëàÿ ÷àñòü, êîòîðàÿ è
  2154.     áóäåò ïðèñâîåíà öåëî÷èñëåííîé ïåðåìåííîé.
  2155. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2156.  
  2157.  
  2158. <h2 id=6.7.6>
  2159.     6.7.6 Îïåðàöèè ñðàâíåíèÿ.
  2160. </h2>
  2161.  
  2162.         Åñëè ïðè îïåðàöèè ñðàâíåíèÿ ëåâûì îïåðàíäîì ÿâëÿåòñÿ ïåðåìåííàÿ èëè
  2163.     âûðàæåíèå òèïà <b>float</b>, à ïðàâûì ÿâëÿåòñÿ öåëî÷èñëåííîå çíà÷åíèå, òî
  2164.     öåëî÷èñëåííîå çíà÷åíèå áóäåò ïðåîáðàçîâàíî â âåùåñòâåííûé òèï. Åñëè æå
  2165.     ëåâûì îïåðàíäîì ÿâëÿåòñÿ öåëî÷èñëåííîå âûðàæåíèå èëè ïåðåìåííàÿ, à ïðàâûì
  2166.     îïåðàíäîì çíà÷åíèå òèïà <b>float</b>, òî èç ïðàâîãî îïåðàíäà áóäåò âûäåëåíà öåëàÿ
  2167.     ÷àñòü, êîòîðàÿ è ïðèìåò ó÷àñòèå â ñðàâíåíèè.
  2168. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2169.  
  2170.  
  2171. <h2 id=6.7.7>
  2172.     6.7.7 Ñðàâíåíèå ïåðåìåííûõ òèïà float ñ 32-áèòíûì ðåãèñòðîì.
  2173. </h2>
  2174.  
  2175.         Â ðåãèñòðàõ ìîãóò ñîäåðæàòüñÿ çíàêîâûå, áåç çíàêîâûå è âåùåñòâåííûå
  2176.     äàííûå. Ïî óìîë÷àíèþ ñ÷èòàåòñÿ, ÷òî â ðåãèñòðå íàõîäèòñÿ áåç çíàêîâîå öåëîå
  2177.     ÷èñëî. Ïðè ñðàâíåíèè ïåðåìåííûõ òèïà <b>float</b> ñ 32-áèòíûì ðåãèñòðîì ìîæíî
  2178.     óêàçûâàòü òèï äàííûõ ñîäåðæàùèõñÿ â ðåãèñòðå.  Äëÿ ýòîé öåëè ìîæíî
  2179.     èñïîëüçîâàòü ìîäèôèêàòîðû: <b>signed, unsigned, float</b>. Ïðèìåðû:
  2180.  
  2181.     float f=1.0;
  2182.  
  2183.     void PROC()
  2184.     {
  2185.       IF( f < signed ECX)       //â ðåãèñòðå ECX íàõîäèòñÿ çíàêîâîå ÷èñëî
  2186.       IF( unsigned EBX > f) //â ðåãèñòðå EBX íàõîäèòñÿ áåç çíàêîâîå ÷èñëî
  2187.       IF( f == float EAX )  //â EAX íàõîäèòñÿ ÷èñëî ôîðìàòà float
  2188.     }
  2189.  
  2190.         <font color="Red"><b>ÂÍÈÌÀÍÈÅ!  Ïðè îïåðàöèè ñðàâíåíèÿ ñ ó÷àñòèåì ïåðåìåíîé òèïà float,
  2191.     ñîäåðæèìîå ðåãèñòðà AX áóäåò ðàçðóøåíî.</b></font>
  2192. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2193.  
  2194.  
  2195. <h2 id=6.8>
  2196.   6.8 Óêàçàòåëè.
  2197. </h2>
  2198.  
  2199.        C-- ñåé÷àñ óêàçàòåëè ðåàëèçîâàíû íå â ïîëíîì îáúåìå. Ïîýòîìó ìíîãèå
  2200.   âåùè, êîòîðûå âîçìîæíû â îáû÷íûõ ÿçûêàõ <b>C</b>, çäåñü áóäóò íåäîñòóïíû.
  2201.  
  2202.       Ïðèìåð ïðèìåíåíèÿ óêàçàòåëåé â C--:
  2203.  
  2204.   char *string[4]={"string1", "string2", "string3", 0}; //ìàññèâ óêàçàòåëåé
  2205.   char *str="string4";
  2206.  
  2207.   main()
  2208.   int i;
  2209.   char *tstr;
  2210.   {
  2211.         FOR(i=0; string[i]!=0; i++){
  2212.                 WRITESTR(string[i]);
  2213.                 WRITELN();
  2214.         }
  2215.         FOR(tstr=str;byte *tstr!=0; tstr++){
  2216.                 WRITE(byte *tstr);
  2217.         }
  2218.   }
  2219.  
  2220.       Óêàçàòåëè ìîæíî èñïîëüçîâàòü ïðè ïåðåäà÷å ïàðàìåòðîâ ïðîöåäóðàì, à â
  2221.   ñàìèõ ïðîöåäóðàõ â êà÷åñòâå êàê ëîêàëüíûõ, òàê è ïàðàìåòðè÷åñêèõ
  2222.   ïåðåìåííûõ. Óêàçàòåëè ìîæíî òàêæå èñïîëüçîâàòü â ñòðóêòóðàõ. Ìîæíî
  2223.   èñïîëüçîâàòü óêàçàòåëè íà óêàçàòåëè. Ââåäåíà ïîääåðæêà óêàçàòåëåé íà
  2224.   ïðîöåäóðû:
  2225.  
  2226.   void (*proc)();  //îáúÿâëåíèå óêàçàòåëÿ íà ïðîöåäóðó
  2227.  
  2228.       Ïî óìîë÷àíèþ óêàçàòåëè íà ïðîöåäóðó ÿâëÿþòñÿ óêàçàòåëÿìè íà ïðîöåäóðó â
  2229.   ñòèëå <b>pascal</b>, íåçàâèñèìî îò ðåãèñòðà, â êîòîðîì íàïèñàíî èìÿ ïðîöåäóðû è
  2230.   ðåæèìà êîìïèëÿöèè. Åñëè Âàì íåîáõîäèìî, ÷òîáû áûë èñïîëüçîâàí äðóãîé òèï
  2231.   âûçîâà, òî åãî íåîáõîäèìî óêàçàòü ïðè îáúÿâëåíèè óêàçàòåëÿ íà ïðîöåäóðó.
  2232.  
  2233.       Ïðè èíèöèàëèçàöèè óêàçàòåëåé êîìïèëÿòîð íå êîíòðîëèðóåò òî, ÷åì
  2234.   èíèöèàëèçèðóåòñÿ óêàçàòåëü. Ò.å. Âû ìîæåòå óêàçàòåëþ íà <b>char</b> ïðèñâîèòü
  2235.   óêàçàòåëü íà <b>int</b> èëè óêàçàòåëþ íà ïðîöåäóðó ïðèñâîèòü àäðåñ ïåðåìåííîé.
  2236.   Ýòî ìîæåò âûçâàòü îøèáêó â ðàáîòå ïðîãðàììû.
  2237. <a href="#contents6"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2238.  
  2239.  
  2240. <h2 id=7.1>
  2241. 7. Àäðåñàöèÿ.
  2242.  
  2243.   7.1 Îòíîñèòåëüíàÿ àäðåñàöèÿ.
  2244. </h2>
  2245.  
  2246.       Èçíà÷àëüíî èíäåêñíûé äîñòóï ê ýëåìåíòàì â ìàññèâàõ ëþáîãî òèïà â
  2247.   êîìïèëÿòîðå îñóùåñòâëÿëñÿ ïîáàéòíî, íåçàâèñèìî îò îáúÿâëåííîãî òèïà äàííûõ.
  2248.   Èíäåêñû îãðàíè÷åíû ôîðìàòîì ïîëÿ <b>RM</b> ïðîöåññîðà 8086, òàêèì îáðàçîì,
  2249.   äîñòóïíû òîëüêî ñëåäóþùèå ôîðìàòû èíäåêñîâ (ãäå èíäåêñ - çíà÷åíèå
  2250.   16-ðàçðÿäíîé êîíñòàíòû èëè ïîñòîÿííîãî âûðàæåíèÿ):
  2251.  
  2252.         variable[index]
  2253.         variable[index+BX+SI]
  2254.         variable[index+BX+DI]
  2255.         variable[index+BP+SI]
  2256.         variable[index+BP+DI]
  2257.         variable[index+SI]
  2258.         variable[index+DI]
  2259.         variable[index+BP]
  2260.         variable[index+BX]
  2261.  
  2262.       Íà÷èíàÿ ñ âåðñèè 0.210, ïîÿâèëàñü âîçìîæíîñòü èñïîëüçîâàòü â êà÷åñòâå
  2263.   èíäåêñà ïåðåìåííûõ òèïà <b>char byte int word long dword</b>. Ïðè ýòîì
  2264.   äîñòóï ê ýëåìåíòàì ìàññèâà îñóùåñòâëÿåòñÿ â çàâèñèìîñòè îò îáúÿâëåííîãî òèïà
  2265.   ìàññèâà.
  2266.  
  2267.       Òàêæå íà÷èíàÿ ñ âåðñèè 0.210 ïîÿâèëàñü âîçìîæíîñòü èñïîëüçîâàòü â
  2268.   êà÷åñòâå èíäåêñíûõ è áàçîâûõ ðåãèñòðîâ ïðè îòíîñèòåëüíîé àäðåñàöèè ëþáûå
  2269.   32-áèòíûå ðåãèñòðû.
  2270.  
  2271.       Åñëè Âû äëÿ àäðåñàöèè ê ýëåìåíòàì ìàññèâà áóäåòå èñïîëüçîâàòü ðåãèñòðû è
  2272.   ÷èñëîâûå êîíñòàíòû, èç êîòîðûõ ìîæíî ïîëó÷èòü ïîëå <b>RM</b> äëÿ èíñòðóêöèé 8086
  2273.   ïðîöåññîðà èëè êîìáèíàöèþ ïîëåé <b>RM BASE è SIB</b> äëÿ 80386 ïðîöåññîðà, òî
  2274.   êîìïèëÿòîð áóäåò èñïîëüçîâàòü ýòè ðåãèñòðû äëÿ ãåíåðàöèè èíñòðóêöèè ñ ýòèìè
  2275.   ïîëÿìè.  ðåçóëüòàòå Âû ïîëó÷èòå îòíîñèòåëüíóþ ïîáàéòíóþ àäðåñàöèþ ê
  2276.   ýëåìåíòàì ìàññèâà.
  2277.  
  2278.       Åñëè æå èç ýòèõ ðåãèñòðîâ íåâîçìîæíî ïîëó÷èòü ïîëÿ <b>RM, BASE, SIB</b>,
  2279.   èëè äëÿ àäðåñàöèè áóäåò èñïîëüçîâàíà ïåðåìåííàÿ, òî êîìïèëÿòîð ñíà÷àëà
  2280.   âû÷èñëèò ýòî âûðàæåíèå â ðåãèñòð <b>(E)SI</b> èëè äðóãîé, ïîäõîäÿùèé ðåãèñòð, à
  2281.   çàòåì óìíîæèò ñîäåðæèìîå ýòîãî ðåãèñòðà íà ðàçðÿäíîñòü Âàøåãî ìàññèâà. Òàêèì
  2282.   îáðàçîì, â ýòîì ñëó÷àå âû áóäåòå èìåòü ïîýëåìåíòíóþ àäðåñàöèþ â ìàññèâå.
  2283.   Ïðèìåð:
  2284.  
  2285.     AX = var [ 5 ];
  2286.     AX = var [ BX + 5 ];
  2287.     AX = var [ BX + CX ];
  2288.     AX = var [ i ];
  2289.  
  2290.       Êîìïèëÿòîð ñãåíåðèðóåò ñëåäóþùèé êîä:
  2291.   test.c-- 7: AX=var[5];
  2292.   0100 A12501                   mov     ax,[125h]
  2293.  
  2294.   test.c-- 8: AX=var[BX+5];
  2295.   0103 8B872501                 mov     ax,[bx+125h]
  2296.  
  2297.   test.c-- 9: AX=var[BX+CX];
  2298.   0107 89DE                     mov     si,bx
  2299.   0109 01CE                     add     si,cx
  2300.   010B 01F6                     add     si,si
  2301.   010D 8B842001                 mov     ax,[si+120h]
  2302.  
  2303.   test.c-- 10: AX=var[i];
  2304.   0111 8B362201                 mov     si,[122h]
  2305.   0115 01F6                     add     si,si
  2306.   0117 8B842001                 mov     ax,[si+120h]
  2307.  
  2308.       Êàê Âû âèäèòå, ïåðâûå äâà âûðàæåíèÿ áûëè ïðåîáðàçîâàíû â îäíó
  2309.   àññåìáëåðíóþ èíñòðóêöèþ, è ïîëó÷èëàñü ïîáàéòíàÿ àäðåñàöèÿ.  äâóõ ñëåäóþùèõ
  2310.   âûðàæåíèÿõ ïîëó÷èòü îäíó àññåìáëåðíóþ èíñòðóêöèþ íå óäàëîñü è êîìïèëÿòîð
  2311.   ïðèìåíèë äëÿ ýòèõ âûðàæåíèé ïîýëåìåíòíóþ àäðåñàöèþ.
  2312.  
  2313.       Òàêîé äâîéñòâåííûé ïîäõîä ðåàëèçîâàí ñ öåëüþ ñîõðàíåíèÿ ñîâìåñòèìîñòè
  2314.   íîâûõ âîçìîæíîñòåé ñ ïðåäûäóùèìè.
  2315.  
  2316.       Íåñìîòðÿ íà êàæóùóþñÿ äëÿ íåèñêóøåííîãî ïîëüçîâàòåëÿ ïóòàíèöó, ýòîò
  2317.   ìåõàíèçì ëåãêî ïîíÿòü è çàïîìíèòü ïî ñëåäóþùåìó ïðîñòîìó ïðàâèëó: åñëè Âû
  2318.   èñïîëüçóåòå â êà÷åñòâå èíäåêñà òîëüêî öèôðîâîå çíà÷åíèå èëè ðåãèñòð <b>BX, SI,
  2319.   DI, BP</b> èëè ëþáîé 32-áèòíûé ðåãèñòð, òî êîìïèëÿòîð ñãåíåðèðóåò êîä ñ
  2320.   ïîáàéòíîé àäðåñàöèåé. Åñëè æå â êà÷åñòâå èíäåêñà áóäåò èñïîëüçîâàíà
  2321.   ïåðåìåííàÿ, òî êîìïèëÿòîð ñãåíåðèðóåò êîä ñ ïîýëåìåíòíîé àäðåñàöèåé. Åñëè
  2322.   æå Âû õîðîøî çíàêîìû ñ àññåìáëåðîì, òî Âàì íå ñîñòàâèò áîëüøîãî òðóäà
  2323.   ïîíÿòü â êàêèõ ñëó÷àÿõ Âû ïîëó÷èòå ïîáàéòíóþ, à â êàêèõ ïîýëåìåíòíóþ
  2324.   àäðåñàöèþ.
  2325.  
  2326.       Èíîãäà òðåáóåòñÿ èìåòü ïîáàéòíûé äîñòóï ê ýëåìåíòàì ìàññèâà èñïîëüçóÿ â
  2327.   êà÷åñòâå èíäåêñà ïåðåìåííóþ. Íàïðèìåð
  2328.  
  2329.     AX=var[i];
  2330.  
  2331.       Äëÿ ýòîãî âûðàæåíèÿ áóäåò ñãåíåðèðîâàíà ïîýëåìåíòíàÿ àäðåñàöèÿ, à íàì
  2332.   íóæíà ïîáàéòîâàÿ. Äëÿ ýòîãî ìîæíî íàïèñàòü òàê:
  2333.  
  2334.     SI=i;
  2335.     AX=var[SI];
  2336.  
  2337.       Íî ìîæíî ýòî çàïèñàòü êîðî÷å:
  2338.  
  2339.     AX=DSWORD[#var+i];
  2340.  
  2341.        îáîèõ ýòèõ ñëó÷àÿõ Âû ïîëó÷èòå ïîáàéòíóþ àäðåñàöèþ ê ýëåìåíòàì ìàññèâà
  2342.   <b>var</b>. Â ïåðâîì âàðèàíòå Âû ñìîæåòå êîíòðîëèðîâàòü êàêîé ðåãèñòð áóäåò
  2343.   èñïîëüçîâàí â êà÷åñòâå èíäåêñà, à âî âòîðîì âàðèàíòå êîìïèëÿòîð áóäåò ñàì
  2344.   âûáèðàòü ðåãèñòð äëÿ èñïîëüçîâàíèÿ â êà÷åñòâå èíäåêñà.
  2345.  
  2346.       Âàæíî âñåãäà ïîìíèòü î äâîéñòâåííîì ïîäõîäå êîìïèëÿòîðà ê âû÷èñëåíèþ
  2347.   àäðåñà â ìàññèâå. Åùå ðàç êðàòêî:  åñëè Âû â ìàññèâå àäðåñóåòåñü èñïîëüçóÿ
  2348.   ÷èñëîâóþ êîíñòàíòó èëè ðåãèñòðû <b>BX,DI,SI,BP</b> êîìïèëÿòîð èñïîëüçóåò ýòè
  2349.   çíà÷åíèÿ áåç èçìåíåíèÿ.  Âî âñåõ äðóãèõ ñëó÷àÿõ áóäåò êîððåêöèÿ çíà÷åíèÿ â
  2350.   çàâèñèìîñòè îò òèïà ìàññèâà.
  2351. <a href="#contents7"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2352.  
  2353.  
  2354. <h2 id=7.2>
  2355.   7.2 Àáñîëþòíàÿ àäðåñàöèÿ.
  2356. </h2>
  2357.  
  2358.       Àáñîëþòíàÿ àäðåñàöèÿ òàêæå âîçìîæíà.  Äåéñòâóþò òå æå ñàìûå îãðàíè÷åíèÿ
  2359.   íà èíäåêñû, ÷òî è ïðè îòíîñèòåëüíîé àäðåñàöèè.
  2360.  
  2361.       Âû÷èñëåííûé èíäåêñ áóäåò àáñîëþòåí â ñåãìåíòå, ðåãèñòð êîòîðîãî óêàçàí.
  2362.   Ìîæíî óêàçûâàòü ëþáîé èç ðåãèñòðîâ <b>DS, CS, SS è ES</b>. Íà ïðîöåññîðàõ 80386 è
  2363.   áîëåå íîâûõ ìîæíî óêàçûâàòü òàêæå ðåãèñòðû <b>FS è GS</b>.
  2364.  
  2365.       Ñèíòàêñèñ - òî÷íî òàêîé æå, êàê è â îòíîñèòåëüíîé àäðåñàöèè, çà
  2366.   èñêëþ÷åíèåì òîãî, ÷òî óêàçûâàåòñÿ íå ïåðåìåííàÿ, à ñåãìåíò è òèï äàííûõ.
  2367.   Ìîãóò ïðèìåíÿòüñÿ ñëåäóþùèå óêàçàòåëè:
  2368.  
  2369.              // àäðåñàöèÿ â ñåãìåíòå äàííûõ
  2370.          DSBYTE  [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå DS
  2371.          DSWORD  [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå DS
  2372.          DSCHAR  [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå DS
  2373.          DSINT   [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå DS
  2374.          DSDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå DS
  2375.          DSLONG  [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå DS
  2376.          DSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå DS
  2377.  
  2378.              // àäðåñàöèÿ â ñåãìåíòå êîäà
  2379.          CSBYTE  [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå CS
  2380.          CSWORD  [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå CS
  2381.          CSCHAR  [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå CS
  2382.          CSINT   [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå CS
  2383.          CSDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå CS
  2384.          CSLONG  [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå CS
  2385.          CSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå CS
  2386.  
  2387.              // àäðåñàöèÿ â ñåãìåíòå ñòåêà
  2388.          SSBYTE  [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå SS
  2389.          SSWORD  [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå SS
  2390.          SSCHAR  [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå SS
  2391.          SSINT   [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå SS
  2392.          SSDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå SS
  2393.          SSLONG  [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå SS
  2394.          SSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå SS
  2395.  
  2396.              // àäðåñàöèÿ â äîïîëíèòåëüíîì ñåãìåíòå äàííûõ
  2397.          ESBYTE  [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå ES
  2398.          ESWORD  [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå ES
  2399.          ESCHAR  [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå ES
  2400.          ESINT   [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå ES
  2401.          ESDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå ES
  2402.          ESLONG  [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå ES
  2403.          ESFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå ES
  2404.  
  2405.              // àäðåñàöèÿ â äîïîëíèòåëüíîì ñåãìåíòå 2 (80386) +
  2406.          FSBYTE  [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå FS
  2407.          FSWORD  [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå FS
  2408.          FSCHAR  [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå FS
  2409.          FSINT   [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå FS
  2410.          FSDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå FS
  2411.          FSLONG  [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå FS
  2412.          FSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå FS
  2413.  
  2414.              // àäðåñàöèÿ â äîïîëíèòåëüíîì ñåãìåíòå 3 (80386) +
  2415.          GSBYTE  [ñìåùåíèå] // àäðåñóþò áàéò â ñåãìåíòå GS
  2416.          GSWORD  [ñìåùåíèå] // àäðåñóþò ñëîâî â ñåãìåíòå GS
  2417.          GSCHAR  [ñìåùåíèå] // àäðåñóþò char â ñåãìåíòå GS
  2418.          GSINT   [ñìåùåíèå] // àäðåñóþò int â ñåãìåíòå GS
  2419.          GSDWORD [ñìåùåíèå] // àäðåñóþò dword â ñåãìåíòå GS
  2420.          GSLONG  [ñìåùåíèå] // àäðåñóþò long â ñåãìåíòå GS
  2421.          GSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå GS
  2422.  
  2423.   Ïðèìåðû:
  2424.      Çàãðóçèòü â AL áàéò èç ÿ÷åéêè ñ øåñòíàäöàòåðè÷íûì àäðåñîì 0000:0417
  2425.                  ES = 0x0000;
  2426.                  AL = ESBYTE [0x417];
  2427.  
  2428.      Ïåðåìåñòèòü ñëîâî èç ÿ÷åéêè ñ øåñòíàäöàòåðè÷íûì àäðåñîì 2233:4455
  2429.      â ÿ÷åéêó ñ øåñòíàäöàòåðè÷íûì àäðåñîì A000:0002
  2430.                  $PUSH DS
  2431.                  DS = 0x2233;
  2432.                  ES = 0xA000;
  2433.                  ESWORD [0x0002] = DSWORD [0x4455];
  2434.                  $POP DS
  2435.  
  2436.      Ñîõðàíèòü âû÷èñëåííîå çíà÷åíèå âûðàæåíèÿ X + 2, èìåþùåå
  2437.      òèï int â ÿ÷åéêå ñ øåñòíàäöàòåðè÷íûì àäðåñîì FFFF:1234
  2438.                  ES = 0xFFFF;
  2439.                  ESINT [0x1234] = X + 2;
  2440.  
  2441.      Ñîõðàíèòü BX â ñåãìåíòå ñòåêà ïî ñìåùåíèþ 42:
  2442.                  SSWORD [42] = BX;
  2443. <a href="#contents7"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2444.  
  2445.  
  2446. <h2 id=8.1.1>
  2447. 8. Ðàáîòà ñ áëîêàìè äàííûõ.
  2448.  
  2449.   8.1 Ñòðóêòóðû.
  2450.  
  2451.     8.1.1 ×òî òàêîå ñòðóêòóðû.
  2452. </h2>
  2453.  
  2454.         Ñòðóêòóðà ïîçâîëÿåò îáúåäèíèòü â îäíîì îáúåêòå ñîâîêóïíîñòü çíà÷åíèé,
  2455.     êîòîðûå ìîãóò èìåòü ðàçëè÷íûå òèïû.
  2456. <a href="#contents8"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2457.  
  2458.  
  2459. <h2 id=8.1.2>
  2460.     8.1.2 Ñèíòàêñèñ.
  2461. </h2>
  2462.  
  2463.     struct [<òåã>] { <ñïèñîê-îáúÿâëåíèé-ýëåìåíòîâ> }
  2464.       <îïèñàòåëü>[,<îïèñàòåëü>...];
  2465.     struct <òåã> <îïèñàòåëü> [,<îïèñàòåëü>];
  2466.  
  2467.         Îáúÿâëåíèå ñòðóêòóðû íà÷èíàåòñÿ ñ êëþ÷åâîãî ñëîâà struct è èìååò äâå
  2468.     ôîðìû çàïèñè.
  2469.  
  2470.         Â ïåðâîé ôîðìå òèïû è èìåíà ýëåìåíòîâ ñòðóêòóðû ñïåöèôèöèðóþòñÿ â
  2471.     ñïèñêå-îáúÿâëåíèé-ýëåìåíòîâ. Íåîáÿçàòåëüíûé â äàííîì ñëó÷àå <b>òåã</b> - ýòî
  2472.     èäåíòèôèêàòîð, êîòîðûé èìåíóåò ñòðóêòóðíûé òèï, îïðåäåëåííûé äàííûì
  2473.     ñïèñêîì îáúÿâëåíèé ýëåìåíòîâ. <b>îïèñàòåëü</b> ñïåöèôèöèðóåò ëèáî ïåðåìåííóþ
  2474.     ñòðóêòóðíîãî òèïà, ëèáî ìàññèâ ñòðóêòóð äàííîãî òèïà.
  2475.  
  2476.         Âòîðàÿ ñèíòàêñè÷åñêàÿ ôîðìà îáúÿâëåíèÿ èñïîëüçóåò òåã ñòðóêòóðû äëÿ
  2477.     ññûëêè íà ñòðóêòóðíûé òèï, îïðåäåëåííûé ãäå-òî â äðóãîì ìåñòå ïðîãðàììû.
  2478.  
  2479.         Ñïèñîê îáúÿâëåíèé ýëåìåíòîâ ïðåäñòàâëÿåò ñîáîé ïîñëåäîâàòåëüíîñòü èç
  2480.     îäíîé èëè áîëåå îáúÿâëåíèé ïåðåìåííûõ. Êàæäàÿ ïåðåìåííàÿ, îáúÿâëåííàÿ â
  2481.     ýòîì ñïèñêå, íàçûâàåòñÿ ýëåìåíòîì ñòðóêòóðû.
  2482.  
  2483.         Ýëåìåíòû ñòðóêòóðû çàïîìèíàþòñÿ â ïàìÿòè ïîñëåäîâàòåëüíî â òîì
  2484.     ïîðÿäêå, â êîòîðîì îíè îáúÿâëÿþòñÿ. Âûðàâíèâàíèå ýëåìåíòîâ âíóòðè
  2485.     ñòðóêòóðû ïî óìîë÷àíèþ íå ïðîèçâîäèòñÿ. Íî ñóùåñòâóåò îïöèÿ, âêëþ÷åíèå
  2486.     êîòîðîé â êîìàíäíóþ ñòðîêó ïîçâîëÿåò èìåòü âûðàâíèâàíèå è âíóòðè
  2487.     ñòðóêòóðû. Ñàìà ñòðóêòóðà âûðàâíèâàåòñÿ íà ÷åòíûé àäðåñ åñëè âêëþ÷åíî
  2488.     âûðàâíèâàíèå.
  2489.  
  2490.       Ïðèìåðû îáúÿâëåíèé ñòðóêòóð:
  2491.  
  2492.     struct test
  2493.     {
  2494.       int a;
  2495.       char b[8];
  2496.       long c;
  2497.     } rr, ff[4];
  2498.  
  2499.         Â ýòîì ïðèìåðå îáúÿâëåíû ñòðóêòóðà ñ èìåíåì <b>rr</b> è ìàññèâ èç 4 ñòðóêòóð
  2500.     ñ èìåíåì <b>ff</b>. Âñåìó íàáîðó ïåðåìåííûõ ïðèñâîåíî íàçâàíèå <b>(òåã) test</b>. Ýòîò
  2501.     òåã ìîæíî èñïîëüçîâàòü äëÿ îáúÿâëåíèÿ äðóãèõ ñòðóêòóð. Íàïðèìåð:
  2502.  
  2503.    struct test dd;
  2504.  
  2505.         Çäåñü îáúÿâëåíà ñòðóêòóðà ñ èìåíåì <b>dd</b>, èìåþùàÿ íàáîð ýëåìåíòîâ
  2506.     îïèñàííûõ â òåãå <b>test</b>.
  2507.  
  2508.         Ïðè îáúÿâëåíèè ñòðóêòóð ñ ðàíåå îáúÿâëåííûì òåãîì êëþ÷åâîå ñëîâî
  2509.    <b>struct</b> ìîæíî íå ïèñàòü. Ò.å ìîæíî íàïèñàòü âîò òàê:
  2510.  
  2511.       test dd;
  2512. <a href="#contents8"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2513.  
  2514.  
  2515. <h2 id=8.1.3>
  2516.     8.1.3 Èíèöèàëèçàöèÿ ñòðóêòóð ïðè îáúÿâëåíèè.
  2517. </h2>
  2518.  
  2519.         Ïîñëå îáúÿâëåíèÿ ñòðóêòóðû åå ýëåìåíòû ìîãóò ïðèíèìàòü ïðîèçâîëüíûå
  2520.     çíà÷åíèÿ. ×òî áû ýòîãî íå áûëî íàäî ñòðóêòóðû ïðîèíèöèàëèçèðîâàòü.
  2521.     Èíèöèàëèçèðîâàòü ñòðóêòóðû ïðè èõ îáúÿâëåíèè ìîæíî òîëüêî ãëîáàëüíûå. C--
  2522.     ïîääåðæèâàåò íåñêîëüêî ñïîñîáîâ èíèöèàëèçàöèè ñòðóêòóð ïðè èõ îáúÿâëåíèè:
  2523.  
  2524.       1. Îäíèì çíà÷åíèåì:
  2525.  
  2526.        struct test dd=2;
  2527.  
  2528.      ýòîì ïðèìåðå âñåì ýëåìåíòàì ñòðóêòóðû dd ïðèñâàèâàåòñÿ çíà÷åíèå 2.
  2529.  
  2530.       2. Ìàññèâîì çíà÷åíèé:
  2531.  
  2532.        struct test dd={1,2,,6};
  2533.  
  2534.      ýòîì ïðèìåðå ïåðâîìó ýëåìåíòó ñòðóêòóðû dd ïðèñâàèâàåòñÿ çíà÷åíèå 1,
  2535.     âòîðîìó - 2, ÷åòâåðòîìó - 6. Ïðîïóùåííûì è íå äîèíèöèàëèçèðîâàííûì
  2536.     çíà÷åíèÿì áóäåò ïðèñâîåíî 0 çíà÷åíèå.
  2537.  
  2538.       3. Êîìàíäîé FROM:
  2539.  
  2540.        struct test dd=FROM "file.dat";
  2541.  
  2542.     Â ýòîì ïðèìåðå íà ìåñòî ãäå ðàñïîëîæåíà ñòðóêòóðà dd ïðè êîìïèëÿöèè áóäåò
  2543.     çàãðóæåíî ñîäåðæèìîå ôàéëà <file.dat>. Åñëè ðàçìåð ôàéëà áîëüøå ÷åì ðàçìåð
  2544.     ñòðóêòóðû, òî ëèøíèå áàéòû áóäóò çàãðóæåíû â êîä ïðîãðàììû, íî îíè íå
  2545.     áóäóò âîñòðåáîâàíû. Åñëè ðàçìåð ôàéëà ìåíüøå ÷åì ðàçìåð ñòðóêòóðû, òî
  2546.     íåäîñòàþùèå áàéòû ñòðóêòóðû áóäóò çàïîëíåíû íóëÿìè.
  2547.  
  2548.       4. Êîìàíäîé EXTRACT:
  2549.  
  2550.        struct test dd=EXTRACT "file.dat", 24, 10;
  2551.  
  2552.     Â ýòîì ïðèìåðå íà ìåñòî ãäå ðàñïîëîæåíà ñòðóêòóðà dd ïðè êîìïèëÿöèè áóäåò
  2553.     çàãðóæåí ôðàãìåíò èç ôàéëà <b>file.dat</b> äëèíîé 10 áàéò ñî ñìåùåíèÿ 24.
  2554.     Íåäîñòàþùèå áàéòû áóäóò çàïîëíåíû íóëÿìè.
  2555. <a href="#contents8"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2556.  
  2557.  
  2558. <h2 id=8.1.4>
  2559.     8.1.4 Èíèöèàëèçàöèÿ ñòðóêòóðû ïðè âûïîëíåíèè ïðîãðàììû.
  2560. </h2>
  2561.  
  2562.         Ïðè âûïîëíåíèè ïðîãðàììû, êðîìå ïðèñâîåíèÿ êàæäîìó ýëåìåíòó ñòðóêòóðû
  2563.     çíà÷åíèÿ, ìîæíî ïðîèíèöèàëèçèðîâàòü âñþ ñòðóêòóðó ïðèñâîåíèåì åé ÷èñëà èëè
  2564.     ïåðåìåííîé. Ïðèìåðû:
  2565.  
  2566.     void proc()
  2567.     struct test aa[5],rr;
  2568.     int i;
  2569.     {
  2570.       aa[0]=0x12345678;
  2571.       aa[i]=int 0x12345678;
  2572.       aa=long 0x12345678;
  2573.       rr=i;
  2574.  
  2575.     Â ïåðâîì ïðèìåðå ïàìÿòü, çàíèìàåìàÿ ïåðâîé ñòðóêòóðîé ìàññèâà èç 5
  2576.     ñòðóêòóð, áóäåò çàïîëíåíà áàéòîì 0x78 (ïî óìîë÷àíèþ).
  2577.  
  2578.     Âî âòîðîì ïðèìåðå ïàìÿòü, çàíèìàåìàÿ (i+1)-âîé ñòðóêòóðîé ìàññèâà èç 5
  2579.     ñòðóêòóð, áóäåò çàïîëíåíà ñëîâîì 0x5678.
  2580.  
  2581.     Â òðåòüåì ïðèìåðå ïàìÿòü, çàíèìàåìàÿ âñåì ìàññèâîì èç 5 ñòðóêòóð, áóäåò
  2582.     çàïîëíåíà äëèííûì ñëîâîì 0x12345678.
  2583.  
  2584.      ÷åòâåðòîì ïðèìåðå ïàìÿòü, çàíèìàåìàÿ ñòðóêòóðîé rr, áóäåò çàïîëíåíà
  2585.     ñîäåðæèìûì ïåðåìåííîé i.
  2586.  
  2587.         Ìîæíî òàêæå êîïèðîâàòü ñîäåðæèìîå îäíîé ñòðóêòóðû â äðóãóþ. Íàïðèìåð:
  2588.  
  2589.       rr=aa[2];
  2590.  
  2591.     Áóäåò ñêîïèðîâàíî ñîäåðæèìîå òðåòüåé ñòðóêòóðû ìàññèâà ñòðóêòóð aa â
  2592.     ñòðóêòóðó rr.
  2593. <a href="#contents8"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2594.  
  2595.  
  2596. <h2 id=8.1.5>
  2597.     8.1.5 Îïåðàöèè ñ ýëåìåíòàìè ñòðóêòóð.
  2598. </h2>
  2599.  
  2600.         Ñ ýëåìåíòàìè ñòðóêòóð ìîæíî âûïîëíÿòü âñå òå îïåðàöèè, êîòîðûå
  2601.     äîñòóïíû äëÿ ïåðåìåííûõ ñîîòâåòñòâóþùåãî òèïà. Íàïðèìåð:  Îáúÿâëåíà
  2602.     ñòðóêòóðà:
  2603.  
  2604.     struct test
  2605.     {
  2606.       int a;
  2607.       char b[8];
  2608.       long c;
  2609.     } rr[3];
  2610.     Ïðèìåð äîïóñòèìîãî ñèíòàêñèñà:
  2611.         rr.a = rr.b[i] * rr[1].c + i ;
  2612.  
  2613.     Ïðèìå÷àíèå:
  2614.         Ïðè îïåðàöèÿõ ñ ýëåìåíòàìè ìàññèâà ñòðóêòóð è ñ èíäåêñèðîâàííûìè
  2615.     ýëåìåíòàìè, â êîòîðûõ â êà÷åñòâå èíäåêñà èëè íîìåðà ñòðóêòóðû èñïîëüçóåòñÿ
  2616.     ïåðåìåííàÿ, êîìïèëÿòîð ìîæåò èñïîëüçîâàòü ðåãèñòðû SI è DI, à â íåêîòîðûõ
  2617.     ñèòóàöèÿõ (íàïðèìåð:  rr[i].b[j] >< rr[i+1].b[j+2] ) áóäåò çàäåéñòâîâàí è
  2618.     ðåãèñòð DX.
  2619.  
  2620.         Äëÿ îòäåëüíûõ ýëåìåíòîâ ñòðóêòóðû, ìîæíî ïîëó÷àòü èõ àäðåñ, ðàçìåð
  2621.     è ñìåùåíèå â òåãå ñòðóêòóðû. Âîò ïðèìåð:
  2622.  
  2623.     struct AA       //îáúÿâëåíèå òåãà ñòðóêòóðû
  2624.     {
  2625.       word a[3];    // ïåðâûé ýëåìåíò ñòðóêòóðû
  2626.       char b;       // âòîðîé ýëåìåíò ñòðóêòóðû
  2627.       long c;       // òðåòèé ýëåìåíò ñòðóêòóðû
  2628.     };
  2629.  
  2630.     struct BB   //òåã âòîðîé ñòðóêòóðû
  2631.     {
  2632.       word aa;  // ïåðâûé ýëåìåíò
  2633.       AA bb;    // âòîðîé ýëåìåíò - âëîæåííàÿ ñòðóêòóðà
  2634.     }ss;                // îáúÿâëÿåì ñòðóêòóðó ñ òåãîì <b>BB</b>
  2635.  
  2636.     void proc()
  2637.     {
  2638.       AX=#ss.bb.b; // ïîëó÷èòü àäðåñ ýëåìåíòà <b>b</b> ñòðóêòóðû <b>bb</b> â ñòðóêòóðå <b>ss</b>
  2639.       AX=#BB.bb.b; // ïîëó÷èòü ñìåùåíèå ýòîãî æå ýëåìåíòà â òåãå <b>BB</b>
  2640.       AX=sizeof(ss.bb); // ïîëó÷èòü ðàçìåð ýëåìåíòà <b>bb</b> â ñòðóêòóðå <b>ss</b>
  2641.       AX=sizeof(BB.bb); // ïîëó÷èòü ðàçìåð ýëåìåíòà <b>bb</b> â òåãå <b>BB</b>
  2642.     }
  2643. <a href="#contents8"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2644.  
  2645.  
  2646. <h2 id=8.1.6>
  2647.     8.1.6 Âëîæåííûå ñòðóêòóðû.
  2648. </h2>
  2649.  
  2650.         Ïðè îáúÿâëåíèè òåãîâ ñòðóêòóð ìîæíî èñïîëüçîâàòü òåãè äðóãèõ,
  2651.     îáúÿâëåííûõ ðàíåå ñòðóêòóð. Ïðèìåð âëîæåííûõ ñòðóêòóð:
  2652.  
  2653.     struct RGB
  2654.     {
  2655.       byte Red;
  2656.       byte Green;
  2657.       byte Blue;
  2658.       byte Reserved;
  2659.     };
  2660.  
  2661.     struct BMPINFO
  2662.     {
  2663.       struct BMPHEADER header; //îïèñàíèå ýòîé ñòðóêòóðû ïðîïóùåíî
  2664.       struct RGB color[256];
  2665.     }info;
  2666.  
  2667.         Ïðåäïîëîæèì Âàì íóæíî ïîëó÷èòü ñîäåðæèìîå ïåðåìåííîé <b>Red</b> äåñÿòîãî
  2668.     ýëåìåíòà <b>color</b>. Ýòî ìîæíî áóäåò çàïèñàòü òàê:
  2669.  
  2670.       AL=info.color[10].Red;
  2671.  
  2672.         Íî ñóùåñòâóåò îäíî îãðàíè÷åíèå èñïîëüçîâàíèÿ âëîæåííûõ ñòðóêòóð â C--.
  2673.     Ýòî íåâîçìîæíîñòü èñïîëüçîâàíèÿ ïåðåìåííîé â êà÷åñòâå èíäåêñà áîëåå îäíîãî
  2674.     ðàçà ïðè îáðàùåíèè ê ìíîãîýêçåìïëÿðíûì ñòðóêòóðàì. Ïîÿñíèì ýòî íà ïðèìåðå:
  2675.  
  2676.     struct ABC
  2677.     {
  2678.       int a;
  2679.       int b;
  2680.       int c;
  2681.     };
  2682.  
  2683.     struct
  2684.     {
  2685.       struct ABC first[4];  //4 ýêçåìïëÿðà ñòðóêòóðû ABC
  2686.       int d;
  2687.     }second[4];
  2688.  
  2689.     int i,j;
  2690.  
  2691.     void proc()
  2692.     {
  2693.       AX=second[i].first[j].a; //òàêàÿ çàïèñü âûçîâåò ñîîáùåíèå îá îøèáêà, òàê
  2694.                                //êàê ïåðåìåííàÿ èñïîëüçîâàëàñü â äâóõ ìåñòàõ
  2695.       AX=second[2].first[j].a; //à ýòîò ñèíòàêñèñ äîïóñòèì.
  2696.       AX=second[i].first[3].a;
  2697.     }
  2698. <a href="#contents8"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2699.  
  2700.  
  2701. <h2 id=8.1.7>
  2702.     8.1.7 Îòîáðàæåíèå òåãà ñòðóêòóðû íà áëîê ïàìÿòè.
  2703. </h2>
  2704.  
  2705.         Îòîáðàæåíèå òåãà ñòðóêòóðû íà áëîê ïàìÿòè ÿâëÿåòñÿ àëüòåðíàòèâîé
  2706.     óêàçàòåëÿì íà ñòðóêòóðû.
  2707.  
  2708.         Àëüòåðíàòèâíûé ñïîñîá èñïîëüçîâàíèÿ óêàçàòåëåé íà ñòðóêòóðû ïîçâîëèò
  2709.     Âàì ñàìèì âûáðàòü ðåãèñòð, â êîòîðîì áóäåò õðàíèòñÿ àäðåñ ñòðóêòóðû è
  2710.     ñàìèì ñëåäèòü çà åãî ñîõðàííîñòüþ è ïî ìåðå íåîáõîäèìîñòè âîññòàíàâëèâàòü
  2711.     åãî ñîäåðæèìîå.
  2712.  
  2713.         Îáúÿñíèòü, êàê èñïîëüçîâàòü îòîáðàæåíèå òåãà ñòðóêòóðû íà ïàìÿòü,
  2714.     íàâåðíîå, áóäåò ïðîùå íà ïðèìåðå:
  2715.  
  2716.     struct AA       //îáúÿâëåíèå òåãà ñòðóêòóðû
  2717.     {
  2718.       word a[3];    // ïåðâûé ýëåìåíò ñòðóêòóðû
  2719.       char b;       // âòîðîé ýëåìåíò ñòðóêòóðû
  2720.       long c;       // òðåòèé ýëåìåíò ñòðóêòóðû
  2721.     };
  2722.  
  2723.     byte buf[256];  //áëîê ïàìÿòè, íà êîòîðûé áóäåò îòîáðàæåí òåã ñòðóêòóðû
  2724.  
  2725.     void proc1()
  2726.     {
  2727.      ...
  2728.      proc2 ( #buf );  // âûçîâ ïðîöåäóðû ñ ïåðåäà÷åé åé â êà÷åñòâå ïàðàìåòðà
  2729.                       // àäðåñà áëîêà ïàìÿòè
  2730.      ...
  2731.     }
  2732.  
  2733.     long proc2 (unsigned int pointer_to_mem)
  2734.     {
  2735.     int i;
  2736.       BX=pointer_to_mem;  // â BX çàãðóçèì àäðåñ áëîêà ïàìÿòè
  2737.       FOR(i=0; i<3; i++){ // â ìàññèâ ýëåìåíòà <b>a</b> çàïèñàòü -1
  2738.         BX.AA.a[i]=-1;
  2739.       }
  2740.       BX.AA.b=0;
  2741.       ES:BX.AA.c=EAX;
  2742.       return BX.AA.c;  // âåðíóòü ñîäåðæèìîå ýëåìåíòà <b>c</b>
  2743.     }
  2744.  
  2745.         Â 16-áèòíîì ðåæèìå äëÿ õðàíåíèÿ àäðåñà ñòðóêòóðû ìîæíî èñïîëüçîâàòü
  2746.     ðåãèñòðû: <b>BX,DI,SI,BP</b>. Íî ëó÷øå äëÿ ýòîãî èñïîëüçîâàòü ðåãèñòð <b>BX</b>.
  2747.     Ðåãèñòðû <b>DI è SI</b> ìîæåò èñïîëüçîâàòü êîìïèëÿòîð ïðè âû÷èñëåíèè àäðåñà
  2748.     ìíîãîýëåìåíòíûõ îáúåêòîâ. Ðåãèñòð <b>BP</b> êîìïèëÿòîð èñïîëüçóåò äëÿ ðàáîòû ñ
  2749.     ëîêàëüíûìè è ïàðàìåòðè÷åñêèìè ïåðåìåííûìè.  32-áèòíîì ðåæèìå ìîæíî
  2750.     èñïîëüçîâàòü ëþáîé êðîìå <b>ESP è EBP</b> ðåãèñòð, à ðåãèñòðû <b>EDI è ESI</b> íàäî
  2751.     èñïîëüçîâàòü îñòîðîæíî.
  2752. <a href="#contents8"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2753.  
  2754.  
  2755. <h2 id=8.1.8>
  2756.     8.1.8 Áèòîâûå ïîëÿ ñòðóêòóð.
  2757. </h2>
  2758.  
  2759.         Áèòîâûå ïîëÿ ñòðóêòóð èñïîëüçóþòñÿ äëÿ ýêîíîìèè ïàìÿòè, ïîñêîëüêó
  2760.     ïîçâîëÿþò ïëîòíî óïàêîâàòü çíà÷åíèÿ, è äëÿ îðãàíèçàöèè óäîáíîãî äîñòóïà ê
  2761.     ðåãèñòðàì âíåøíèõ óñòðîéñòâ, â êîòîðûõ ðàçëè÷íûå áèòû ìîãóò èìåòü
  2762.     ñàìîñòîÿòåëüíîå ôóíêöèîíàëüíîå íàçíà÷åíèå.
  2763.  
  2764.         Îáúÿâëåíèå áèòîâîãî ïîëÿ èìååò ñëåäóþùèé ñèíòàêñèñ:
  2765.  
  2766.     <òèï> [<èäåíòèôèêàòîð>]:<êîíñòàíòà>;
  2767.  
  2768.     èëè íà ïðèìåðå:
  2769.  
  2770.     int var:5;  //îáúÿâëåíèå áèòîâîãî ïîëÿ ðàçìåðîì 5 áèò ñ èìåíåì <b>var</b>
  2771.  
  2772.         Áèòîâîå ïîëå ñîñòîèò èç íåêîòîðîãî ÷èñëà áèòîâ, êîòîðîå çàäàåòñÿ
  2773.     ÷èñëîâûì âûðàæåíèåì <b>êîíñòàíòà</b>. Åãî çíà÷åíèå äîëæíî áûòü öåëûì
  2774.     ïîëîæèòåëüíûì ÷èñëîì è åãî çíà÷åíèå íå äîëæíî ïðåâûøàòü ÷èñëà ðàçðÿäîâ,
  2775.     ñîîòâåòñòâóþùèå <b>òèïó</b> îïðåäåëÿåìîãî áèòîâîãî ïîëÿ. Â C-- áèòîâûå ïîëÿ
  2776.     ìîãóò ñîäåðæàòü òîëüêî áåç çíàêîâûå çíà÷åíèÿ. Íåëüçÿ èñïîëüçîâàòü ìàññèâû
  2777.     áèòîâûõ ïîëåé, óêàçàòåëè íà áèòîâûå ïîëÿ.
  2778.  
  2779.        <b> èäåíòèôèêàòîð</b> èìåíóåò áèòîâîå ïîëå. Åãî íàëè÷èå íåîáÿçàòåëüíî.
  2780.     Íåèìåíîâàííîå áèòîâîå ïîëå îçíà÷àåò ïðîïóñê ñîîòâåòñòâóþùåãî ÷èñëà áèòîâ
  2781.     ïåðåä ðàçìåùåíèåì ñëåäóþùåãî ýëåìåíòà ñòðóêòóðû. Íåèìåíîâàííîå áèòîâîå
  2782.     ïîëå, äëÿ êîòîðîãî óêàçàí íóëåâîé ðàçìåð, èìååò ñïåöèàëüíîå íàçíà÷åíèå:
  2783.     îíî ãàðàíòèðóåò, ÷òî ïàìÿòü äëÿ ñëåäóþùåãî áèòîâîãî ïîëÿ áóäåò íà÷èíàòüñÿ
  2784.     íà ãðàíèöå òîãî òèïà, êîòîðûé çàäàí äëÿ íåèìåíîâàííîãî áèòîâîãî ïîëÿ.
  2785.     Ò.å.  áóäåò ïðîèçâåäåíî âûðàâíèâàíèå áèòîâîãî ïîëÿ íà 8/16/32 áèòà.
  2786.  
  2787.         Â C-- âñå áèòîâûå ïîëÿ óïàêîâûâàþòñÿ îäíî çà äðóãèì íåçàâèñèìî îò
  2788.     ãðàíèö òèïà èäåíòèôèêàòîðîâ. Åñëè ïîñëåäóþùåå ïîëå íå ÿâëÿåòñÿ áèòîâûì
  2789.     ïîëåì, òî îñòàâøèåñÿ äî ãðàíèöû áàéòà áèòû íå áóäóò èñïîëüçîâàíû.
  2790.     Ìàêñèìàëüíûé ðàçìåð áèòîâîãî ïîëÿ ðàâåí 32 áèòà äëÿ òèïà <b>dword/long</b>, 16
  2791.     áèò äëÿ òèïà <b>word/int</b> è 8 áèò äëÿ òèïà <b>byte/char</b>. Áèòîâûå ïîëÿ ìîæíî
  2792.     îáúåäèíÿòü, ò.å. èñïîëüçîâàòü èõ â îïåðàòîðå<b> union. sizeof</b>
  2793.     ïðèìåíåííûé ê áèòîâîìó ïîëþ âåðíåò ðàçìåð ýòîãî ïîëÿ â áèòàõ. Ïðè
  2794.     èñïîëüçîâàíèè áèòîâîãî ïîëÿ, åãî ñîäåðæèìîå áóäåò ðàñøèðÿòñÿ â ðåãèñòð
  2795.     êàê áåç çíàêîâîå öåëîå ÷èñëî.
  2796. <a href="#contents8"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2797.  
  2798.  
  2799. <h2 id=8.2>
  2800.   8.2 Îáúåäèíåíèÿ.
  2801. </h2>
  2802.  
  2803.       Îáúåäèíåíèÿ ïîçâîëÿþò â ðàçíûå ìîìåíòû âðåìåíè õðàíèòü â îäíîì îáúåêòå
  2804.   çíà÷åíèÿ ðàçëè÷íîãî òèïà.
  2805.  
  2806.       Ïàìÿòü, êîòîðàÿ âûäåëÿåòñÿ ïîä îáúåäèíåíèå, îïðåäåëÿåòñÿ ðàçìåðîì
  2807.   íàèáîëåå äëèííîãî èç ýëåìåíòîâ îáúåäèíåíèÿ. Âñå ýëåìåíòû îáúåäèíåíèÿ
  2808.   ðàçìåùàþòñÿ â îäíîé è òîé æå îáëàñòè ïàìÿòè ñ îäíîãî è òîãî æå àäðåñà.
  2809.   Çíà÷åíèå òåêóùåãî ýëåìåíòà îáúåäèíåíèÿ òåðÿåòñÿ, êîãäà äðóãîìó ýëåìåíòó
  2810.   îáúåäèíåíèÿ ïðèñâàèâàåòñÿ çíà÷åíèå.
  2811.  
  2812.       Â C-- ðåàëèçîâàíû òàê íàçûâàåìûå àíîíèìíûå îáúåäèíåíèÿ. Ò.å.
  2813.   îáúåäèíåíèÿì íå ïðèñâàèâàåòñÿ èìÿ, à îáðàùåíèå ê ýëåìåíòàì îáúåäèíåíèÿ
  2814.   ïðîèñõîäèò êàê ê îáû÷íîé ïåðåìåííîé. Ïðèìåð:
  2815.  
  2816.   union
  2817.   {
  2818.     dword regEAX;
  2819.     word  regAX;
  2820.     byte  regAL;
  2821.   };  // îáúÿâèëè, ÷òî 3 ïåðåìåííûå ðàñïîëîæåíû ïî îäíîìó è òîìó æå
  2822.       // ôèçè÷åñêîìó àäðåñó
  2823.  
  2824.   void test()
  2825.   {
  2826.         regEAX = 0x2C;
  2827.         BL = regAL;     //â ðåãèñòðå BL îêàæåòñÿ çíà÷åíèå 0x2C
  2828.   }
  2829.  
  2830.       Îáúåäèíÿòü ìîæíî ïåðåìåííûå ðàçëè÷íûõ òèïîâ, ìàññèâû, ñòðîêîâûå
  2831.   ïåðåìåííûå è ñòðóêòóðû. Îáúåäèíåíèÿ ìîãóò áûòü ãëîáàëüíûìè è ëîêàëüíûìè, à
  2832.   òàêæå ðàñïîëàãàòüñÿ âíóòðè ñòðóêòóð (ïîêà â îáúåäèíåíèÿõ âíóòðè ñòðóêòóð
  2833.   íåëüçÿ èñïîëüçîâàòü ñòðóêòóðû). Ãëîáàëüíûå îáúåäèíåíèÿ ìîãóò áûòü
  2834.   èíèöèàëèçèðîâàííûìè è íåèíèöèàëèçèðîâàííûìè. ×òîáû ïîëó÷èòü
  2835.   èíèöèàëèçèðîâàííîå îáúåäèíåíèå äîñòàòî÷íî ïðîèíèöèàëèçèðîâàòü ëèøü ïåðâûé
  2836.   ýëåìåíò îáúåäèíåíèÿ. Åñëè æå ïåðâûé ýëåìåíò îáúåäèíåíèÿ íå èíèöèàëèçèðîâàí,
  2837.   à ñëåäóþùèå ýëåìåíòû èíèöèàëèçèðîâàíû, òî ýòî âûçîâåò ñîîáùåíèå êîìïèëÿòîðà
  2838.   îá îøèáêå.
  2839. <a href="#contents8"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2840.  
  2841.  
  2842. <h2 id=8.3>
  2843.   8.3 Êîìàíäû 'FROM' è 'EXTRACT'.
  2844. </h2>
  2845.  
  2846.        C-- åñòü î÷åíü îðèãèíàëüíûå êîìàíäû, êîòîðûõ íåò â äðóãèõ ÿçûêàõ. Ýòî
  2847.   <b>FROM è EXTRACT</b>.
  2848.  
  2849.       Êîìàíäà <b>FROM</b> èìååò ñèíòàêñèñ:
  2850.  
  2851.   <òèï_ïåðåìåííîé> <èìÿ_ïåðåìåííîé> = FROM <èìÿ_ôàéëà>;
  2852.  
  2853.       Âñòðåòèâ ýòó êîìàíäó ïðè êîìïèëÿöèè, êîìïèëÿòîð çàãðóçèò â âûõîäíîé
  2854.   ôàéë ñîäåðæèìîå ôàéëà <b>èìÿ_ôàéëà</b>, à <b>èìÿ_ïåðåìåííîé</b> áóäåò èäåíòèôèêàòîðîì
  2855.   íà÷àëà çàãðóæåííîãî êîäà. Âîò ïðèìåð èñïîëüçîâàíèÿ ýòîé êîìàíäû èç ôàéëà
  2856.   tinydraw.c--:
  2857.  
  2858.   byte palette[PALSIZE] = FROM "TINYDRAW.PAL";  // buffer for palette
  2859.  
  2860.      Êîìàíäà <b>EXTRACT</b> èìååò ñèíòàêñèñ:
  2861.  
  2862.   <òèï_ïåðåìåííîé> <èìÿ_ïåðåìåííîé> = EXTRACT <èìÿ_ôàéëà>, <íà÷àëî>, <äëèíà>;
  2863.  
  2864.       Âñòðåòèâ ýòó êîìàíäó ïðè êîìïèëÿöèè, êîìïèëÿòîð çàãðóçèò â âûõîäíîé
  2865.   ôàéë èç ôàéëà <b>èìÿ_ôàéëà</b> ÷èñëî áàéò ðàâíîå <b>äëèíà</b> ñî ñìåùåíèÿ <b>íà÷àëî</b>, à
  2866.   <b>èìÿ_ïåðåìåííîé</b> áóäåò èäåíòèôèêàòîðîì íà÷àëà çàãðóæåííîãî êîäà. Âîò ïðèìåð
  2867.   èñïîëüçîâàíèÿ ýòîé êîìàíäû:
  2868.  
  2869.   byte LIT128 = EXTRACT "8X16.FNT", 16*128, 16;
  2870.   byte LIT130 = EXTRACT "8X16.FNT", 16*130, 16;
  2871. <a href="#contents8"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2872.  
  2873.  
  2874. <h2 id=9.1>
  2875. 9. Îïåðàòîðû.
  2876.  
  2877.   9.1 Óñëîâíûå èíñòðóêöèè.
  2878. </h2>
  2879.  
  2880.       Óñëîâíûå èíñòðóêöèè, ïðè ïîìîùè êîòîðûõ îñóùåñòâëÿåòñÿ âåòâëåíèå, òàêèå
  2881.   æå êàê â C.
  2882.  
  2883.       C-- èìååò äâå èíñòðóêöèè âåòâëåíèÿ. <b>if è IF</b>.
  2884.  
  2885.       <b>if</b> äåëàåò áëèçêèé óñëîâíûé ïåðåõîä, à <b>IF</b> äåëàåò êîðîòêèé
  2886.   (8-ðàçðÿäíûé) óñëîâíûé ïåðåõîä. <b>IF</b> âûïîëíÿåòñÿ áûñòðåå è ìîæåò ýêîíîìèòü
  2887.   äî 3 áàéò â ðàçìåðå êîäà, íî ìîæåò îñóùåñòâëÿòü ïåðåõîäû òîëüêî â ïðåäåëàõ
  2888.   127 áàéòîâ êîäà.
  2889.  
  2890.       Óñëîâíûå èíñòðóêöèè, êàê è â <b>C</b>, ìîãóò ñîïðîâîæäàòüñÿ, êàê îäèíî÷íîé
  2891.   êîìàíäîé, òàê è áëîêîì èç íåñêîëüêèõ êîìàíä, çàêëþ÷åííûõ â ôèãóðíûå ñêîáêè
  2892.   { è }. Óñëîâíûå èíñòðóêöèè èìåþò òå æå îãðàíè÷åíèÿ, ÷òî è óñëîâíûå
  2893.   âûðàæåíèÿ.
  2894.  
  2895.       Åñëè çà èíñòðóêöèåé <b>IF</b> ñëåäóåò áîëüøå ÷åì 127 áàéòîâ êîäà, òðàíñëÿòîð
  2896.   âûäàñò ñëåäóþùåå ñîîáùåíèå îá îøèáêå:
  2897.  
  2898.           IF jump distance too far, use if.
  2899.  
  2900.   Ýòî ìîæíî ïðîñòî èñïðàâèòü, çàìåíèâ â ýòîì ìåñòå èíñòðóêöèþ <b>IF</b> íà <b>if</b>.
  2901.  
  2902.       Êîìàíäû <b>else è ELSE</b> èñïîëüçóþòñÿ òî÷íî òàê æå, êàê â ÿçûêå <b>C</b>.
  2903.   Îòëè÷èå èõ â òîì, ÷òî <b>ELSE</b> èìååò îãðàíè÷åíèå àäðåñà ïåðåõîäà 127 áàéò,
  2904.   òàêîå æå êàê <b>IF. else</b> ãåíåðèðóåò êîä íà 1 áàéò äëèííåå, ÷åì <b>ELSE</b>.
  2905.  
  2906.       Êîìàíäû <b>IF è else</b>, à òàêæå <b>if è ELSE</b> ìîãóò ñâîáîäíî ñìåøèâàòüñÿ
  2907.   êàê â ñëåäóþùåì ïðèìåðå:
  2908.  
  2909.           if( x == 2 )
  2910.               WRITESTR("Two");
  2911.           ELSE{ WRITESTR("not two.");
  2912.                 printmorestuff();
  2913.               }
  2914.  
  2915.       Åñëè çà èíñòðóêöèåé <b>ELSE</b> ñëåäóåò áîëüøå ÷åì 127 áàéòîâ êîäà,
  2916.   òðàíñëÿòîð âûäàñò ñëåäóþùåå ñîîáùåíèå îá îøèáêå:
  2917.  
  2918.           ELSE jump distance too far, use else.
  2919.  
  2920.       Ýòî ìîæíî ïðîñòî èñïðàâèòü, çàìåíèâ â ýòîì ìåñòå èíñòðóêöèþ <b>ELSE</b> íà
  2921.   <b>else</b>.
  2922. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2923.  
  2924.  
  2925. <h2 id=9.2>
  2926.   9.2 Öèêëû do{} while.
  2927. </h2>
  2928.  
  2929.       Â òàêîì öèêëå áëîê êîäà, ñîñòàâëÿþùèé òåëî öèêëà, áóäåò ïîâòîðÿòüñÿ,
  2930.   ïîêà óñëîâíîå âûðàæåíèå èìååò çíà÷åíèå <b>èñòèííî</b>.
  2931.  
  2932.       Èñòèííîñòü óñëîâíîãî âûðàæåíèÿ ïðîâåðÿåòñÿ ïîñëå âûïîëíåíèÿ òåëà  öèêëà,
  2933.   ïîýòîìó áëîê êîäà áóäåò âûïîëíåí, ïî êðàéíåé ìåðå, îäèí ðàç.
  2934.  
  2935.    Ïðèìåð <b>do {} while</b> öèêëà, â êîòîðîì òåëî áóäåò èñïîëíåíî ïÿòü ðàç:
  2936.  
  2937.            count = 0;
  2938.            do {
  2939.               count++;
  2940.               WRITEWORD(count);
  2941.               WRITELN();
  2942.               } while (count < 5);
  2943.  
  2944.   Óñëîâíîå âûðàæåíèå â <b>do {} while</b> èíñòðóêöèè äîëæíî ñîîòâåòñòâîâàòü òåì æå
  2945.   ïðàâèëàì, ÷òî è â èíñòðóêöèÿõ <b>IF è if</b>.
  2946. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  2947.  
  2948.  
  2949. <h2 id=9.3>
  2950.   9.3 Öèêëû loop, LOOPNZ, loopnz.
  2951. </h2>
  2952.  
  2953.       Öèêëû <b>loop</b> ïîâòîðÿþò áëîê êîäà, ïîêà îïðåäåëåííàÿ ïåðåìåííàÿ èëè
  2954.   ðåãèñòð, âûïîëíÿþùèå ðîëü ñ÷åò÷èêà öèêëà, ñîäåðæàò çíà÷åíèå, îòëè÷íîå îò
  2955.   íóëÿ. Â êîíöå âûïîëíåíèÿ áëîêà êîäà, ñîñòàâëÿþùåãî òåëî öèêëà, óêàçàííàÿ
  2956.   ïåðåìåííàÿ èëè ðåãèñòð - óìåíüøàåòñÿ íà 1, à çàòåì ïðîâåðÿåòñÿ íà ðàâåíñòâî
  2957.   íóëþ. Åñëè ïåðåìåííàÿ (èëè ðåãèñòð) íå ðàâíà íóëþ, òåëî öèêëà áóäåò
  2958.   âûïîëíåíî ñíîâà, è ïðîöåññ ïîâòîðèòñÿ.
  2959.  
  2960.       Ïðèìåð èñïîëüçîâàíèÿ öèêëà <b>loop</b> â êîòîðîì â êà÷åñòâå ñ÷åò÷èêà öèêëà
  2961.   èñïîëüçîâàíà ïåðåìåííàÿ:
  2962.  
  2963.           count = 5;
  2964.           loop( count )
  2965.               {WRITEWORD(count);
  2966.               WRITELN();
  2967.               }
  2968.  
  2969.       Íàèáîëüøèé ýôôåêò äàåò èñïîëüçîâàíèå ðåãèñòðà CX äëÿ öèêëîâ ñ íåáîëüøèì
  2970.   òåëîì, ïîñêîëüêó â ýòîì ñëó÷àå êîìïèëÿòîðîì ãåíåðèðóåòñÿ öèêë ñ ïðèìåíåíèåì
  2971.   ìàøèííîé êîìàíäû <b>LOOP</b>.
  2972.  
  2973.       Åñëè ïåðåä ñòàðòîì ñ÷åò÷èê öèêëîâ ñîäåðæèò íóëåâîå çíà÷åíèå, êîìàíäû
  2974.   òåëà öèêëà áóäóò âûïîëíåíû ìàêñèìàëüíîå ÷èñëî ðàç äëÿ äèàïàçîíà ïåðåìåííîé
  2975.   (256 ðàç äëÿ 8-áèòíîãî ñ÷åò÷èêà (ïåðåìåííîé òèïà <b>byte</b> èëè <b>char</b>), 65536 äëÿ
  2976.   16-áèòíîãî ñ÷åò÷èêà (ïåðåìåííîé òèïà <b>word</b> èëè <b>int</b>), è 4294967296 äëÿ
  2977.   32-áèòíîãî ñ÷åò÷èêà (ïåðåìåííîé òèïà <b>dword</b> èëè <b>long</b>).
  2978.  
  2979.    Â ñëåäóþùåì ïðèìåðå öèêë áóäåò âûïîëíåí 256 ðàç:
  2980.  
  2981.            BH = 0;
  2982.            loop (BH)
  2983.               {
  2984.               }
  2985.  
  2986.       Åñëè â êîìàíäå íå óêàçàíî íèêàêîãî ñ÷åò÷èêà öèêëà, öèêë áóäåò
  2987.   ïðîäîëæàòüñÿ áåñêîíå÷íî.
  2988.  
  2989.       Ñëåäóþùèé ïðèìåð áóäåò íåïðåðûâíî âûâîäèòü ñèìâîë çâåçäî÷êè (*) íà
  2990.   ýêðàí:
  2991.  
  2992.           loop()
  2993.               WRITE('*');
  2994.  
  2995.       Ïðîãðàììèñò, åñëè õî÷åò, ìîæåò èñïîëüçîâàòü èëè èçìåíÿòü çíà÷åíèå
  2996.   ïåðåìåííîé ñ÷åò÷èêà öèêëà âíóòðè öèêëà.
  2997.  
  2998.       Íàïðèìåð, ñëåäóþùèé öèêë âûïîëíèòñÿ òîëüêî 3 ðàçà:
  2999.  
  3000.            CX = 1000;
  3001.            loop( CX )
  3002.               {
  3003.               IF( CX > 3 )
  3004.                   CX = 3;
  3005.               }
  3006.  
  3007.       Öèêë ìîæíî òàêæå ïðåðâàòü îïåðàòîðîì ðàçðûâà <b>BREAK</b> èëè <b>break</b>. Âîò
  3008.   òîò æå ïðèìåð ñ èñïîëüçîâàíèåì <b>BREAK</b>:
  3009.  
  3010.            CX = 1000;
  3011.            loop( CX )
  3012.               {
  3013.               IF( CX > 3 )
  3014.                   BREAK;
  3015.               }
  3016.  
  3017.       Öèêëû <b>LOOPNZ/loopnz</b> îòëè÷àþòñÿ îò öèêëà <b>loop</b>, òåì, ÷òî ïåðåä âõîäîì
  3018.   â öèêë ïðîâåðÿåòñÿ ðàâåíñòâî íóëþ àðãóìåíòà öèêëà. Åñëè àðãóìåíò ðàâåí
  3019.   íóëþ, òî òåëî öèêëà íè ðàçó íå âûïîëíèòñÿ (â öèêëå <b>loop</b> â ýòîì ñëó÷àå
  3020.   òåëî öèêëà âûïîëíèòñÿ ìàêñèìàëüíîå ÷èñëî ðàç). Öèêë <b>LOOPNZ</b> ïîëó÷àåòñÿ
  3021.   ìàêñèìàëüíî ýôôåêòèâíûì ïðè îïòèìèçàöèè íà ðàçìåð êîäà, åñëè â êà÷åñòâå
  3022.   ïàðàìåòðà-ñ÷åò÷èêà èñïîëüçóåòñÿ ðåãèñòð <b>CX/ECX</b>. Ïðè ýòîì êîìïèëÿòîð
  3023.   èñïîëüçóåò àññåìáëåðíûå èíñòðóêöèè <b>JCXZ/JECXZ è LOOP</b>.
  3024. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3025.  
  3026.  
  3027. <h2 id=9.4>
  3028.   9.4 Öèêë while, WHILE.
  3029. </h2>
  3030.  
  3031.        Ñèíòàêñèñ:
  3032.     while(<âûðàæåíèå>)
  3033.          <îïåðàòîð>
  3034.  
  3035.       Öèêë âûïîëíÿåòñÿ äî òåõ ïîð, ïîêà çíà÷åíèå <b>âûðàæåíèÿ</b> íå ñòàíåò
  3036.   ëîæíûì. Âíà÷àëå âû÷èñëÿåòñÿ <b>âûðàæåíèå</b>. Åñëè <b>âûðàæåíèå</b> èçíà÷àëüíî ëîæíî,
  3037.   òî òåëî îïåðàòîðà <b>while</b> âîîáùå íå âûïîëíÿåòñÿ è óïðàâëåíèå ñðàçó
  3038.   ïåðåäàåòñÿ íà ñëåäóþùèé îïåðàòîð ïðîãðàììû.
  3039.  
  3040.       Öèêë <b>WHILE</b> àíàëîãè÷åí öèêëó <b>while</b>, íî ïðè ýòîì ãåíåðèðóåòñÿ êîä íà
  3041.   3 áàéòà êîðî÷å. Ðàçìåð ñãåíåðèðîâàííîãî êîäà â öèêëå <b>WHILE</b> äîëæåí áûòü
  3042.   ìåíüøå 127 áàéò.
  3043.  
  3044.     Ïðèìåðû:
  3045.         while ( i < 20 ){
  3046.                 WRITEWORD(i);
  3047.                 i++;
  3048.         }
  3049.  
  3050.         WHILE (i < 20 ) @WRITEWORD(i);  //öèêë ëèáî áóäåò áåñêîíå÷íûì ëèáî íå
  3051.                                           //âûïîëíèòñÿ íè ðàçó
  3052. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3053.  
  3054.  
  3055. <h2 id=9.5>
  3056.   9.5 Öèêë for, FOR.
  3057. </h2>
  3058.  
  3059.        Ñèíòàêñèñ:
  3060.     for ([<íà÷àëüíîå âûðàæåíèå>]; [<óñëîâèå>]; [<ïðèðàùåíèå>])
  3061.       <îïåðàòîð>
  3062.  
  3063.       Öèêë <b>for</b> âûïîëíÿåòñÿ äî òåõ ïîð, ïîêà çíà÷åíèå <b>óñëîâèÿ</b> íå ñòàíåò
  3064.   ëîæíûì. Åñëè <b>óñëîâèå</b> èçíà÷àëüíî ëîæíî, òî òåëî îïåðàòîðà <b>for</b> âîîáùå íå
  3065.   âûïîëíÿåòñÿ è óïðàâëåíèå ñðàçó ïåðåäàåòñÿ íà ñëåäóþùèé îïåðàòîð ïðîãðàììû.
  3066.   <b>Íà÷àëüíîå âûðàæåíèå</b> è <b>ïðèðàùåíèå</b> îáû÷íî èñïîëüçóþòñÿ äëÿ èíèöèàëèçàöèè
  3067.   è ìîäèôèêàöèè ïàðàìåòðîâ öèêëà.
  3068.  
  3069.       Ïåðâûì øàãîì ïðè âûïîëíåíèè <b>for</b> ÿâëÿåòñÿ âû÷èñëåíèå <b>íà÷àëüíîãî
  3070.   âûðàæåíèÿ</b>, åñëè îíî èìååòñÿ. Çàòåì âû÷èñëÿåòñÿ <b>óñëîâèå</b> è ïðîèçâîäèòñÿ
  3071.   åãî îöåíêà ñëåäóþùèì îáðàçîì:
  3072.  
  3073.       1) Åñëè <b>óñëîâèå</b> èñòèííî, òî âûïîëíÿåòñÿ òåëî îïåðàòîðà. Çàòåì
  3074.   âû÷èñëÿåòñÿ <b>ïðèðàùåíèå</b> (åñëè îíî åñòü), è ïðîöåññ ïîâòîðÿåòñÿ.
  3075.  
  3076.       2) Åñëè <b>óñëîâèå</b> îïóùåíî, òî åãî çíà÷åíèå ïðèíèìàåòñÿ çà èñòèíó. Â
  3077.   ýòîì ñëó÷àå öèêë for ïðåäñòàâëÿåò áåñêîíå÷íûé öèêë, êîòîðûé ìîæåò
  3078.   çàâåðøèòüñÿ òîëüêî ïðè âûïîëíåíèè â åãî òåëå îïåðàòîðîâ <b>break, goto,
  3079.   return</b>.
  3080.  
  3081.       3) Åñëè <b>óñëîâèå</b> ëîæíî, òî âûïîëíåíèå öèêëà <b>for</b> çàêàí÷èâàåòñÿ è
  3082.   óïðàâëåíèå ïåðåäàåòñÿ ñëåäóþùåìó îïåðàòîðó.
  3083.  
  3084.       Öèêë <b>FOR</b> àíàëîãè÷åí öèêëó <b>for</b>, íî ïðè ýòîì ãåíåðèðóåòñÿ êîä íà 3
  3085.   áàéòà êîðî÷å. Ðàçìåð ñãåíåðèðîâàííîãî êîäà â öèêëå <b>FOR</b> äîëæåí áûòü ìåíüøå
  3086.   127 áàéò.
  3087.  
  3088.     Ïðèìåðû:
  3089.         for(i=0;i<5;i++){
  3090.                 WRITESTR("ÑÒÐÎÊÀ ");
  3091.                 WRITEWORD(i);
  3092.                 WRITELN();
  3093.         }
  3094.  
  3095.       ×èñëî <b>íà÷àëüíûõ âûðàæåíèé</b> è ÷èñëî <b>ïðèðàùåíèé</b> íå îãðàíè÷åíî. Êàæäûé
  3096.   îïåðàòîð â <b>íà÷àëüíûõ âûðàæåíèÿõ</b> è <b>ïðèðàùåíèÿõ</b> äîëæåí ðàçäåëÿòüñÿ
  3097.   çàïÿòîé. Ïðèìåð:
  3098.  
  3099.         for ( a=1, b=2 ; a<5 ; a++, b+=a ) {...
  3100.  
  3101.       Òàêæå åñòü âîçìîæíîñòü ëîãè÷åñêîãî îáúåäèíåíèÿ <b>óñëîâèé</b>. Îáúåäèíÿòü
  3102.   ìîæíî äî 32 óñëîâèé. Êàæäîå îáúåäèíÿåìîå óñëîâèå äîëæíî áûòü çàêëþ÷åíî â
  3103.   ñêîáêè. Ïðèìåð:
  3104.  
  3105.         for ( a=0 ; (a>=0) && (a<10) ; a++ ){...
  3106. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3107.  
  3108.  
  3109. <h2 id=9.6>
  3110.   9.6 Îïåðàòîð ïåðåêëþ÷àòåëü switch.
  3111. </h2>
  3112.  
  3113.       Ñèíòàêñèñ:
  3114.     switch(<âûðàæåíèå>){
  3115.       case <êîíñòàíòà>:
  3116.         <îïåðàòîð>
  3117.         ...
  3118.       case <êîíñòàíòà>:
  3119.         <îïåðàòîð>
  3120.         ...
  3121.       ...
  3122.       default:
  3123.         <îïåðàòîð>
  3124.     }
  3125.       Îïåðàòîð ïåðåêëþ÷àòåëü <b>switch</b> ïðåäíàçíà÷åí äëÿ âûáîðà îäíîãî èç
  3126.   íåñêîëüêèõ àëüòåðíàòèâíûõ ïóòåé âûïîëíåíèÿ ïðîãðàììû. Âûïîëíåíèå íà÷èíàåòñÿ
  3127.   ñ âû÷èñëåíèÿ çíà÷åíèÿ <b>âûðàæåíèÿ</b>. Ïîñëå ýòîãî óïðàâëåíèå ïåðåäàåòñÿ îäíîìó
  3128.   èç <b>îïåðàòîðîâ</b> òåëà ïåðåêëþ÷àòåëÿ.  òåëå ïåðåêëþ÷àòåëÿ ñîäåðæàòñÿ
  3129.   êîíñòðóêöèè: <b>case êîíñòàíòà:</b>, êîòîðûå ñèíòàêñè÷åñêè ïðåäñòàâëÿþò ñîáîé
  3130.   ìåòêè îïåðàòîðîâ. Îïåðàòîð, ïîëó÷àþùèé óïðàâëåíèå, - ýòî òîò îïåðàòîð,
  3131.   çíà÷åíèå êîíñòàíòû êîòîðîãî ñîâïàäàþò ñî çíà÷åíèåì <b>âûðàæåíèÿ</b>
  3132.   ïåðåêëþ÷àòåëÿ. Çíà÷åíèå <b>êîíñòàíòû</b> äîëæíî áûòü óíèêàëüíûì.
  3133.  
  3134.       Âûïîëíåíèå òåëà îïåðàòîðà-ïåðåêëþ÷àòåëÿ <b>switch</b> íà÷èíàåòñÿ ñ âûáðàííîãî
  3135.   òàêèì îáðàçîì îïåðàòîðà, è ïðîäîëæàåòñÿ äî êîíöà òåëà èëè äî òåõ ïîð, ïîêà
  3136.   êàêîé-ëèáî îïåðàòîð íå ïåðåäàñò óïðàâëåíèå çà ïðåäåëû òåëà.
  3137.  
  3138.     Îïåðàòîð, ñëåäóþùèé çà êëþ÷åâûì ñëîâîì <b>default</b>, âûïîëíÿåòñÿ, åñëè íè
  3139.   îäíà èç êîíñòàíò íå ðàâíà çíà÷åíèþ <b>âûðàæåíèÿ</b>. Åñëè <b>default</b> îïóùåíî, òî
  3140.   íè îäèí îïåðàòîð â òåëå ïåðåêëþ÷àòåëÿ íå âûïîëíÿåòñÿ, è óïðàâëåíèå
  3141.   ïåðåäàåòñÿ íà îïåðàòîð, ñëåäóþùèé çà <b>switch</b>.
  3142.  
  3143.       Äëÿ âûõîäà èç òåëà ïåðåêëþ÷àòåëÿ îáû÷íî èñïîëüçóåòñÿ îïåðàòîð ðàçðûâà
  3144.   <b>break (BREAK)</b>.
  3145.  
  3146.     Ïðèìåð:
  3147.     switch (i){
  3148.       case 'A':
  3149.         WRITE(i);
  3150.         i++;
  3151.         BREAK;
  3152.       case 32:
  3153.         WRITE('_');
  3154.         i++;
  3155.         BREAK;
  3156.       default:
  3157.         WRITE('i');
  3158.     }
  3159.  
  3160.       Îïåðàòîð <b>switch</b> ñåé÷àñ â êîìïèëÿòîðå ìîæåò ðåàëèçîâûâàòüñÿ òðåì
  3161.   ñïîñîáàìè: äâóõòàáëè÷íûì, òàáëè÷íûì è ìåòîäîì ïîñëåäîâàòåëüíûõ ïðîâåðîê.
  3162.  
  3163.       Òàáëè÷íûé ìåòîä ÿâëÿåòñÿ ñàìûì áûñòðûì, à ïðè áîëüøîì ÷èñëå îïåðàòîðîâ
  3164.   <b>case</b> è ïðè íåçíà÷èòåëüíîé ðàçíèöå ìåæäó ìàêñèìàëüíûì è ìèíèìàëüíûì
  3165.   çíà÷åíèÿìè <b>case</b> îí åùå ìîæåò áûòü è áîëåå êîìïàêòíûì. Íî ó íåãî åñòü è
  3166.   íåäîñòàòêè: â 16-áèòíîì ðåæèìå êîìïèëÿòîð âñåãäà èñïîëüçóåò ðåãèñòð BX, à â
  3167.   32-áèòíîì ðåæèìå, åñëè îïåðàíäîì <b>switch</b> ÿâëÿåòñÿ ðåãèñòð, òî åãî çíà÷åíèå
  3168.   áóäåò ðàçðóøåíî.
  3169.  
  3170.        ìåòîäå ïîñëåäîâàòåëüíûõ ïðîâåðîê áëîê ñðàâíåíèé íàõîäèòñÿ â íà÷àëå
  3171.   òåëà îïåðàòîðà <b>switch</b>, ýòî ïîçâîëÿåò èçáàâèòüñÿ îò 1-2 ëèøíèõ <b>jmp</b>. Íî
  3172.   êîìïèëÿòîð íå ìîæåò îïðåäåëèòü, êàêîé òèï ïåðåõîäà èñïîëüçîâàòü ïðè
  3173.   ïðîâåðêå çíà÷åíèé <b>case</b>. Ýòî áóäåò Âàøåé çàáîòîé. Åñëè ðàçìåð êîäà îò
  3174.   íà÷àëà òåëà îïåðàòîðà <b>switch</b> äî ìåñòà ðàñïîëîæåíèÿ îïåðàòîðà <b>case</b>
  3175.   ìåíüøå 128 áàéò, ìîæíî èñïîëüçîâàòü êîðîòêèé ïåðåõîä.  ýòîì ñëó÷àå Âû
  3176.   ìîæåòå óêàçàòü îïåðàòîð <b>CASE</b>, ÷òî ïðèâåäåò ê ãåíåðàöèè áîëåå êîìïàêòíîãî
  3177.   êîäà. Êîìïèëÿòîð â ïðåäóïðåæäåíèÿõ áóäåò Âàì ïîäñêàçûâàòü î âîçìîæíîñòè
  3178.   èñïîëüçîâàíèÿ îïåðàòîðîâ <b>CASE</b>. Èñïîëüçîâàíèå îïåðàòîðà <b>CASE</b> â ñëó÷àÿõ,
  3179.   êîãäà ðàçìåð áëîêà êîäà áîëåå 128 áàéò ïðèâåäåò ê âûäà÷å êîìïèëÿòîðîì
  3180.   ñîîáùåíèÿ îá îøèáêå.
  3181.  
  3182.      Ïðè äâóõòàáëè÷íîì ìåòîäå ñîçäàþòñÿ äâå òàáëèöû - òàáëèöà àäðåñîâ âõîäà â
  3183.   òåëî îïåðàòîðà <b>switch/SWITCH</b> è òàáëèöà çíà÷åíèé <b>case</b>. Ãåíåðèðóåòñÿ
  3184.   ïðîöåäóðà ñðàâíåíèÿ âõîäíîãî çíà÷åíèÿ ñî çíà÷åíèÿìè âî âòîðîé òàáëèöå. Åñëè
  3185.   åñòü ñîâïàäåíèå, òî äåëàåòñÿ ïåðåõîä ïî àäðåñó èç âòîðîé òàáëèöû. Ýòîò
  3186.   ìåòîä ÿâëÿåòñÿ ñàìûì ìåäëåííûì, íî ïðè áîëüøîì ÷èñëå çíà÷åíèé <b>case</b> (áîëåå
  3187.   15) îí ñòàíîâèòñÿ ñàìûì êîìïàêòíûì.
  3188.  
  3189.       Ïðè îïòèìèçàöèè êîäà íà ðàçìåð, êîìïèëÿòîð ïðåäâàðèòåëüíî âû÷èñëÿåò
  3190.   ðàçìåð êîäà, êîòîðûé ìîæåò áûòü ïîëó÷åí âñåìè ìåòîäàìè è ðåàëèçóåò ñàìûé
  3191.   êîìïàêòíûé. Ïðè îïòèìèçàöèè íà ñêîðîñòü ïðåèìóùåñòâî îòäàåòñÿ òàáëè÷íîìó
  3192.   ìåòîäó, åñëè ðàçìåð òàáëèöû ïîëó÷àåòñÿ íå ñëèøêîì áîëüøèì.
  3193.  
  3194.       Äëÿ îïåðàòîðà <b>switch</b> ââåäåíà òàêæå è êîðîòêàÿ åãî ôîðìà - <b>SWITCH</b>.
  3195.   Åå ìîæíî ïðèìåíÿòü â ñëó÷àå, åñëè ðàçìåð áëîêà êîäà ìåæäó íà÷àëîì òåëà
  3196.   îïåðàòîðà è îïåðàòîðîì <b>default</b> (åñëè îí îòñóòñòâóåò, òî êîíöîì òåëà
  3197.   îïåðàòîðà <b>switch</b>) ìåíüøå 128 áàéò. Î âîçìîæíîñòè èñïîëüçîâàíèÿ êîðîòêîé
  3198.   ôîðìû êîìïèëÿòîð áóäåò ñîîáùàòü â ïðåäóïðåæäåíèÿõ.
  3199.  
  3200.       Äëÿ îïåðàòîðà <b>case/CASE</b>, êîòîðûé ìîæåò èñïîëüçîâàòüñÿ òîëüêî â òåëå
  3201.   áëîêà îïåðàòîðà <b>switch/SWITCH</b>, ìîæíî óêàçûâàòü äèàïàçîí çíà÷åíèé. Ñíà÷àëà
  3202.   íàäî óêàçûâàòü ìåíüøåå çíà÷åíèå, çàòåì ïîñëå ìíîãîòî÷èÿ áîëüøåå. Ïðèìåð:
  3203.  
  3204.   switch(AX){
  3205.     case 1...5:
  3206.       WRITESTR("Range AX from 1 to 5");
  3207.       BREAK;
  3208.   };
  3209.  
  3210.       Ðàíüøå Âàì áû ïðèøëîñü ïèñàòü áîëåå ãðîìîçäêóþ êîíñòðóêöèþ:
  3211.  
  3212.   switch(AX){
  3213.     case 1:
  3214.     case 2:
  3215.     case 3:
  3216.     case 4:
  3217.     case 5:
  3218.       WRITESTR("Range AX from 1 to 5");
  3219.       BREAK;
  3220.   };
  3221.  
  3222.       Êðîìå òîãî, ÷òî íîâûé ôîðìàò çàïèñè áîëåå êîìïàêòåí è áîëåå ÷èòàáåëåí,
  3223.   íî åùå ïðè ýòîì êîìïèëÿòîð ñîçäàåò áîëåå êîìïàêòíûé è áûñòðûé êîä.
  3224. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3225.  
  3226.  
  3227. <h2 id=9.7>
  3228.   9.7 Îïåðàòîð ïåðåõîäà goto, GOTO.
  3229. </h2>
  3230.  
  3231.        Ñèíòàêñèñ:
  3232.        goto <ìåòêà>;
  3233.         .
  3234.         .
  3235.         .
  3236.   <ìåòêà>:
  3237.  
  3238.       Îïåðàòîð ïåðåõîäà <b>goto</b> ïåðåäàåò óïðàâëåíèå íà <b>îïåðàòîð</b> ïîìå÷åííûé
  3239.   <b>ìåòêîé</b>. Àíàëîãîì â àññåìáëåðå îïåðàòîðó goto ÿâëÿåòñÿ êîìàíäà <b>jmp near</b>.
  3240.   Àíàëîãîì â àññåìáëåðå îïåðàòîðó <b>GOTO</b> ÿâëÿåòñÿ êîìàíäà <b>jmp short</b>.
  3241. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3242.  
  3243.  
  3244. <h2 id=9.8>
  3245.   9.8 Îïåðàòîð ðàçðûâà break, BREAK.
  3246. </h2>
  3247.  
  3248.       Îïåðàòîð ðàçðûâà <b>break</b> ïðåðûâàåò âûïîëíåíèå îïåðàòîðîâ <b>do-while,
  3249.   for, switch, while, loop, loopnz, LOOPNZ</b>. Îí ìîæåò ñîäåðæàòüñÿ
  3250.   òîëüêî â òåëå ýòèõ îïåðàòîðîâ. Óïðàâëåíèå ïåðåäàåòñÿ îïåðàòîðó, ñëåäóþùåìó
  3251.   çà ïðåðâàííûì öèêëîì.
  3252.  
  3253.       Îïåðàòîð <b>BREAK</b> àíàëîãè÷åí <b>break</b>, íî ïðè ýòîì ãåíåðèðóåòñÿ êîä íà 1
  3254.   áàéò êîðî÷å. Ðàçìåð ñãåíåðèðîâàííîãî êîäà îò ìåñòà ãäå ïðèìåíÿåòñÿ <b>BREAK</b>
  3255.   äî êîíöà öèêëà äîëæåí áûòü ìåíüøå 127 áàéò.
  3256.  
  3257.     Ïðèìåðû:
  3258.         FOR (i=0; ; i++){
  3259.                 FOR(j=0; j < WIDTH; j++){
  3260.                         IF(i==5)BREAK;
  3261.                 }
  3262.                 IF(i==10)BREAK;
  3263.         }
  3264. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3265.  
  3266.  
  3267. <h2 id=9.9>
  3268.   9.9 Îïåðàòîð ïðîäîëæåíèÿ continue, CONTINUE.
  3269. </h2>
  3270.  
  3271.       Îïåðàòîð ïðîäîëæåíèÿ <b>continue</b> ïåðåäàåò óïðàâëåíèå íà ñëåäóþùóþ
  3272.   èòåðàöèþ â öèêëàõ <b>do-while, for, while, loop, loopnz</b>. Â öèêëàõ
  3273.   <b>do-while, while, loop</b> ñëåäóþùàÿ èòåðàöèÿ íà÷èíàåòñÿ ñ âû÷èñëåíèÿ
  3274.   óñëîâíîãî âûðàæåíèÿ. Äëÿ öèêëà <b>for</b> ñëåäóþùàÿ èòåðàöèÿ íà÷èíàåòñÿ ñ
  3275.   âû÷èñëåíèÿ âûðàæåíèÿ ïðèðàùåíèÿ, à çàòåì ïðîèñõîäèò âû÷èñëåíèå óñëîâíîãî
  3276.   âûðàæåíèÿ.
  3277.  
  3278.     Îïåðàòîð <b>CONTINUE</b> àíàëîãè÷åí <b>continue</b>, íî ïðè ýòîì ãåíåðèðóåòñÿ êîä íà
  3279.   1 áàéò êîðî÷å. Ðàçìåð ñãåíåðèðîâàííîãî êîäà îò ìåñòà ãäå ïðèìåíÿåòñÿ
  3280.   <b>CONTINUE</b> äî íà÷àëà èòåðàöèè äîëæåí áûòü ìåíüøå 127 áàéò.
  3281. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3282.  
  3283.  
  3284. <h2 id=9.10>
  3285.   9.10 Ëîãè÷åñêîå îáúåäèíåíèå óñëîâèé.
  3286. </h2>
  3287.  
  3288.       Ñóùåñòâóåò âîçìîæíîñòü ëîãè÷åñêîãî îáúåäèíåíèÿ ñðàâíåíèé â óñëîâèÿõ
  3289.   <b>IF è if</b>, öèêëàõ <b>do{}while, while{}, WHILE{}, for{} è FOR{}</b>.
  3290.   Êàæäîå ñðàâíåíèå ïðè èõ ëîãè÷åñêîì îáúåäèíåíèè äîëæíî áûòü çàêëþ÷åíî â
  3291.   ñêîáêè.  Îáúåäèíÿòü ìîæíî íå áîëåå 32 ñðàâíåíèé.
  3292.  
  3293.        îòëè÷èå îò <b>C</b> â C-- àíàëèç ëîãè÷åñêèõ îáúåäèíåíèé ïðîèñõîäèò ñëåâà
  3294.   íàïðàâî è âñå ëèøíèå ñêîáêè áóäóò âîñïðèíÿòû êîìïèëÿòîðîì êàê îøèáî÷íûå.
  3295.   Ýòî íåñêîëüêî ñíèæàåò ãèáêîñòü è âîçìîæíîñòè ïðèìåíåíèÿ ýòèõ îáúåäèíåíèé,
  3296.   íî òàêîâà òðàäèöèÿ è ôèëîñîôèÿ, çàëîæåííàÿ â C--.
  3297.  
  3298.       Ïðèìåð:
  3299.  
  3300.            if ( (a>3) && (b>4) || (c<8) ){
  3301.  
  3302.   Ò.å. åñëè ïðîèçâåñòè ðàñøèôðîâêó ýòîãî óñëîâèÿ, òî ïîëó÷èòñÿ ñëåäóþùåå:
  3303.   óñëîâèå âûïîëíèòñÿ åñëè a>3 è b>4 èëè a>3 è c<8.
  3304. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3305.  
  3306.  
  3307. <h2 id=9.11>
  3308.   9.11 Ïåðåõîä ÷åðåç öèêëû.
  3309. </h2>
  3310.  
  3311.      Äëÿ îïåðàòîðîâ <b>BREAK, break, CONTINUE, continue</b> ââåäåíà
  3312.   ïîääåðæêà ÷èñëîâîãî ïàðàìåòðà, îïðåäåëÿþùåãî, ñêîëüêî öèêëîâ íàäî
  3313.   ïðîïóñòèòü, ïðåæäå ÷åì áóäåò âûïîëíåí ýòîò îïåðàòîð. Íàïðèìåð, ìû èìååì òðè
  3314.   âëîæåííûõ öèêëà:
  3315.  
  3316.   do{
  3317.      loop(CX){
  3318.         for(BX=0;BX<10;BX++){
  3319.          break;   //ñòàíäàðòíûé îïåðàòîð
  3320.          break 0; //break ñ ïàðàìåòðîì - ïðîïóñòèòü 0 öèêëîâ
  3321.          break 1; //break ñ ïàðàìåòðîì - ïðîïóñòèòü 1 öèêë
  3322.          break 2; //break ñ ïàðàìåòðîì - ïðîïóñòèòü 2 öèêëà
  3323.         }
  3324.   LABL0:
  3325.      }
  3326.   LABL1:
  3327.   }while (DX!=0);
  3328.   LABL2:
  3329.  
  3330.        òðåòüåì öèêëå íàõîäèòñÿ ãðóïïà ðàçëè÷íûõ âàðèàíòîâ îïåðàòîðà <b>break</b>.
  3331.   Ïåðâûì ñòîèò ñòàíäàðòíûé îïåðàòîð <b>break</b>, ïðè âûïîëíåíèè êîòîðîãî
  3332.   óïðàâëåíèå áóäåò ïåðåäàâàòüñÿ çà ïðåäåëû òðåòüåãî öèêëà - íà ìåòêó <b>LABL0</b>.
  3333.   Âòîðûì èäåò îïåðàòîð <b>break 0</b>, ïðè âûïîëíåíèè êîòîðîãî áóäåò ïðîïóùåíî 0
  3334.   öèêëîâ è óïðàâëåíèå áóäåò ïåðåäàíî îïÿòü æå íà ìåòêó <b>LABL0</b>. Òàêèì
  3335.   îáðàçîì, çàïèñü <b>break è break 0</b> ÿâëÿþòñÿ ñèíîíèìàìè. Òðåòüèì èäåò
  3336.   îïåðàòîð <b>break 1</b>, ïðè âûïîëíåíèè êîòîðîãî áóäåò ïðîïóùåí îäèí öèêë è
  3337.   óïðàâëåíèå áóäåò ïåðåäàíî çà ïðåäåëû âòîðîãî öèêëà íà ìåòêó <b>LABL1</b>. Íó è
  3338.   íàêîíåö, ïîñëåäíèì èäåò îïåðàòîð <b>break 2</b>, ïðè âûïîëíåíèè êîòîðîãî
  3339.   êîìïèëÿòîð ïðîïóñòèò äâà öèêëà è ïåðåäàñò óïðàâëåíèå çà ïðåäåëû òðåòüåãî,
  3340.   íà ìåòêó <b>LABL2</b>. Ìåòêè â ýòîì ïðèìåðå ïðîñòàâëåíû äëÿ óäîáñòâà îáúÿñíåíèÿ.
  3341.   Íó è ÿ íàäåþñü, Âàì ïîíÿòíî, ÷òî çíà÷åíèå ïàðàìåòðà íå ìîæåò ïðåâûøàòü
  3342.   ÷èñëà öèêëîâ íàõîäÿùèõñÿ ïåðåä òåêóùèì. Òàê äëÿ îäèíî÷íîãî öèêëà ýòîò
  3343.   ïàðàìåòð ìîæåò ïðèíèìàòü ìàêñèìàëüíîå è åäèíñòâåííîå çíà÷åíèå - 0.
  3344. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3345.  
  3346.  
  3347. <h2 id=9.12>
  3348.   9.12 Èíâåðòèðîâàíèå ôëàãà ïðîâåðêè óñëîâèé.
  3349. </h2>
  3350.  
  3351.       Èíâåðòèðîâàíèå ôëàãà ïðîâåðêè óñëîâèé â îïåðàöèÿõ ñðàâíåíèÿ <b>if/IF
  3352.   for/FOR while/WHILE</b> ïðîèñõîäèò ñ ïîìîùüþ ñèìâîëà <b>! - not</b>.
  3353.  
  3354.      Âûðàæåíè
  3355.  
  3356.     IF ( NOTCARRYFLAG )...   è  IF ( ! CARRYFLAG )...
  3357.     IF ( proc() == 0 )...    è IF ( ! proc() ) ...
  3358.  
  3359.   ÿâëÿþòñÿ ñèíîíèìàìè.
  3360. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3361.  
  3362.  
  3363. <h2 id=9.13>
  3364.   9.13 Âû÷èñëåíèå âûðàæåíèÿ, à çàòåì ïðîâåðêà óñëîâèÿ.
  3365. </h2>
  3366.  
  3367.       Â îïåðàöèÿõ ñðàâíåíèÿ â ëåâîì îïåðàíäå òåïåðü äîïóñòèìî èñïîëüçîâàòü
  3368.   âû÷èñëåíèÿ âûðàæåíèÿ ñ ïðèñâàèâàíèåì è îïåðàöèè èíêðåìåíòà, äåêðåìåíòà.
  3369.   Íàïðèìåð:
  3370.  
  3371.     IF (i=a+2 != 0 )...
  3372.     IF ( i++ )...
  3373.     IF ( a-- )...
  3374.     IF ( i+=4 == 0 )...
  3375.  
  3376.       Âî âñåõ ýòèõ ïðèìåðàõ ñíà÷àëà ïðîèçîéäåò âû÷èñëåíèå âûðàæåíèÿ â ëåâîé
  3377.   ÷àñòè îïåðàöèè ñðàâíåíèÿ, à ïîòîì áóäåò ïðîèçâåäåíî ñðàâíåíèå ðåçóëüòàòà ñ
  3378.   ïðàâîé ÷àñòüþ âûðàæåíèÿ ñðàâíåíèÿ.
  3379. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3380.  
  3381.  
  3382. <h2 id=9.14>
  3383.   9.14 Ïðîâåðêà áèòîâ ïðè îïåðàöèè ñðàâíåíèÿ.
  3384. </h2>
  3385.  
  3386.       Åñëè â ëåâîé ÷àñòè âûðàæåíèÿ ñðàâíåíèÿ íàïèñàíî: BX & 5, òî ïðè
  3387.   âû÷èñëåíèè âûðàæåíèÿ ñîäåðæèìîå ðåãèñòðà BX áóäåò èçìåíåíî èíñòðóêöèåé
  3388.   <b>and</b>. Íî èíîãäà âîçíèêàåò íåîáõîäèìîñòü â ïðîâåðêå áèòîâ áåç èçìåíåíèÿ
  3389.   ñîäåðæèìîãî ðåãèñòðà BX. Äëÿ ýòèõ öåëåé íàäî èñïîëüçîâàòü èíñòðóêöèþ
  3390.   <b>test</b>. Êàê æå óêàçàòü êîìïèëÿòîðó, â êàêèõ ñèòóàöèÿõ èñïîëüçîâàòü
  3391.   èíñòðóêöèþ <b>and</b>, à â êàêèõ <b>test</b>? Â ñòàíäàðòíûõ ÿçûêàõ <b>C</b> äëÿ ýòîãî
  3392.   èñïîëüçóåòñÿ ìåõàíèçì ïðèîðèòåòîâ - åñëè âûðàæåíèå çàêëþ÷åíî â ñêîáêè, òî
  3393.   ïðîèçâîäèòñÿ åãî âû÷èñëåíèå, åñëè íåò, òî ïðîèçâîäèòñÿ ïðîâåðêà. Íî C-- íå
  3394.   ïîääåðæèâàåò ïðèîðèòåòîâ. Äëÿ ðàçðåøåíèÿ ýòîé ïðîáëåìû â C-- ðåøåíî
  3395.   èñïîëüçîâàòü íåïîñðåäñòâåííî ñàìó èíñòðóêöèþ <b>test</b>. Âîò äîïóñòèìûå
  3396.   âàðèàíòû ñèíòàêñèñà:
  3397.  
  3398.   IF ( $test AX,5 )
  3399.   IF ( ! $test AX,5)
  3400.   IF ( asm test AX,5)
  3401.   IF ( ! asm { test AX,5 } )
  3402. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3403.  
  3404.  
  3405. <h2 id=9.15>
  3406.   9.15 Îïåðàòîð ïåðåñòàíîâêè.
  3407. </h2>
  3408.  
  3409.        C-- åñòü îïåðàòîð, êîòîðûé íå âñòðå÷àåòñÿ â äðóãèõ ÿçûêàõ, ýòî
  3410.   îïåðàòîð ïåðåñòàíîâêè. Îïåðàòîð ïåðåñòàíîâêè ìåíÿåò ìåñòàìè ñîäåðæèìîå äâóõ
  3411.   ïåðåìåííûõ. Ñèìâîëüíîå îáîçíà÷åíèå ýòîãî îïåðàòîðà ><. Ïåðåìåííûå ñ îáåèõ
  3412.   ñòîðîí îïåðàòîðà ïåðåñòàíîâêè äîëæíû èìåòü îäèíàêîâûé ðàçìåð, 8 áèò è 8
  3413.   áèò, 16 áèò è 16 áèò, èëè 32 áèòà è 32 áèòà.
  3414.  
  3415.     Âîò íåêîòîðûå ïðèìåðû:
  3416.  
  3417.       AX >< BX; // ñîõðàíÿåò çíà÷åíèå BX â AX è çíà÷åíèå AX â BX
  3418.       CH >< BL; // ìåíÿåò ìåñòàìè ñîäåðæèìîå ðåãèñòðîâ CH è BL
  3419.       dog >< cat; /* ìåíÿåò ìåñòàìè çíà÷åíèÿ ïåðåìåííîé dog è ïåðåìåííîé cat*/
  3420.       counter >< CX; // ìåíÿåò ìåñòàìè çíà÷åíèÿ ïåðåìåííîé counter
  3421.                      // è ñîäåðæèìîå ðåãèñòðà CX
  3422.  
  3423.       Åñëè ïåðåñòàíîâêà îñóùåñòâëÿåòñÿ ìåæäó äâóìÿ 8-ðàçðÿäíûìè ïåðåìåííûìè â
  3424.   ïàìÿòè, áóäåò ðàçðóøåíî ñîäåðæèìîå ðåãèñòðà AL. Åñëè ïåðåñòàíîâêà - ìåæäó
  3425.   äâóìÿ 16-ðàçðÿäíûìè ïåðåìåííûìè â ïàìÿòè, áóäåò ðàçðóøåíî ñîäåðæèìîå
  3426.   ðåãèñòðà AX. Åñëè ïåðåñòàíîâêà - ìåæäó äâóìÿ 32-ðàçðÿäíûìè ïåðåìåííûìè â
  3427.   ïàìÿòè, áóäåò ðàçðóøåíî ñîäåðæèìîå EAX.  ëþáîì äðóãîì ñëó÷àå, íàïðèìåð,
  3428.   ìåæäó ïåðåìåííîé â ïàìÿòè è ðåãèñòðîì, çíà÷åíèÿ âñåõ ðåãèñòðîâ áóäóò
  3429.   ñîõðàíåíû.
  3430. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3431.  
  3432.  
  3433. <h2 id=9.16>
  3434.   9.16 Îïåðàòîð îòðèöàíèÿ.
  3435. </h2>
  3436.  
  3437.       C-- ïîääåðæèâàåò áûñòðûé ñèíòàêñèñ ñìåíû çíàêà ïåðåìåííîé - îïåðàòîð
  3438.   îòðèöàíèÿ. Ïîñòàâèâ <b>-</b> (çíàê ìèíóñ) ïåðåä èäåíòèôèêàòîðîì ïåðåìåííîé ïàìÿòè
  3439.   èëè ðåãèñòðà è <b>;</b> (òî÷êó ñ çàïÿòîé) ïîñëå èäåíòèôèêàòîðà, âû ñìåíèòå çíàê
  3440.   ïåðåìåííîé ïàìÿòè èëè ðåãèñòðà.
  3441.  
  3442.   Âîò íåêîòîðûå ïðèìåðû:
  3443.  
  3444.            -AX; // ðåçóëüòàò òîò æå, ÷òî è ïðè 'AX = -AX;' ,íî áûñòðåå.
  3445.            -tree; // òî æå ñàìîå, ÷òî 'tree = -tree;' ,íî áûñòðåå.
  3446.            -BH; // ìåíÿåò çíàê BH.
  3447. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3448.  
  3449.  
  3450. <h2 id=9.17>
  3451.   9.17 Îïåðàòîð èíâåðñèè.
  3452. </h2>
  3453.  
  3454.       C-- ïîääåðæèâàåò áûñòðûé ñèíòàêñèñ âûïîëíåíèÿ ëîãè÷åñêîé èíâåðñèè
  3455.   çíà÷åíèÿ ïåðåìåííîé - îïåðàòîð èíâåðñèè. Ïîñòàâèâ <b>!</b> (âîñêëèöàòåëüíûé çíàê)
  3456.   ïåðåä èäåíòèôèêàòîðîì ïåðåìåííîé ïàìÿòè èëè ðåãèñòðîì è <b>;</b> (òî÷êó ñ
  3457.   çàïÿòîé) ïîñëå èäåíòèôèêàòîðà, âû âûïîëíèòå ëîãè÷åñêóþ (âûïîëíèòñÿ
  3458.   àññåìáëåðíàÿ êîìàíäà NOT) èíâåðñèþ òåêóùåãî çíà÷åíèÿ ïåðåìåííîé. Âîò
  3459.   íåêîòîðûå ïðèìåðû:
  3460.  
  3461.           !AX; // òî æå ñàìîå, ÷òî ' AX ^ = 0xFFFF; ' íî áûñòðåå.
  3462.           !node; // çàìåíÿåò çíà÷åíèå 'node' åãî ëîãè÷åñêîé èíâåðñèåé.
  3463.           !CL; // òî æå ñàìîå, ÷òî ' CL ^ = 0xFF ' íî áûñòðåå.
  3464. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3465.  
  3466.  
  3467. <h2 id=9.18>
  3468.   9.18 Ñïåöèàëüíûå óñëîâíûå âûðàæåíèÿ.
  3469. </h2>
  3470.  
  3471.       C-- ïîääåðæèâàåò âîñåìü ñïåöèàëüíûõ óñëîâíûõ âûðàæåíèé:
  3472.  
  3473.            CARRYFLAG
  3474.            NOTCARRYFLAG
  3475.            OVERFLOW
  3476.            NOTOVERFLOW
  3477.            ZEROFLAG
  3478.            NOTZEROFLAG
  3479.            MINUSFLAG
  3480.            PLUSFLAG
  3481.  
  3482.       Îíè ìîãóò èñïîëüçîâàòüñÿ âìåñòî ëþáûõ íîðìàëüíûõ óñëîâíûõ âûðàæåíèé.
  3483.   Åñëè Âû æåëàåòå, íàïðèìåð, âûïîëíèòü áëîê êîäà òîëüêî åñëè óñòàíîâëåí ôëàã
  3484.   ïåðåíîñà, Âàì ñëåäóåò èñïîëüçîâàòü ñëåäóþùóþ ïîñëåäîâàòåëüíîñòü êîìàíä:
  3485.  
  3486.            IF( CARRYFLAG )
  3487.            {
  3488.            // çäåñü âû ÷åãî-òî äåëàåòå
  3489.            }
  3490.  
  3491.       Åñëè Âû æåëàåòå íåïðåðûâíî âûïîëíÿòü áëîê êîäà äî òåõ ïîð, ïîêà íå
  3492.   óñòàíîâèòñÿ ôëàã ïåðåïîëíåíèÿ, Âàì ñëåäóåò èñïîëüçîâàòü íå÷òî ïîäîáíîå
  3493.   ñëåäóþùåìó êóñêó êîäà:
  3494.  
  3495.           do {
  3496.               // çäåñü âû îïÿòü ÷åãî-òî äåëàåòå
  3497.               } while( NOTOVERFLOW );
  3498. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3499.  
  3500.  
  3501. <h2 id=9.19>
  3502.   9.19 Ñèìâîë $ - âñòàâëÿåò òåêóùèé àäðåñ ïðîãðàììû.
  3503. </h2>
  3504.  
  3505.       Ñèìâîë <b>$</b>, êðîìå òîãî, ÷òî ÿâëÿåòñÿ ïðèçíàêîì ïîñëåäóþùåé àññåìáëåðíîé
  3506.   èíñòðóêöèè, â ÿçûêå C--, êàê è â ÿçûêå Assembler ìîæåò óêàçûâàòü òåêóùèé
  3507.   àäðåñ (ñìåùåíèå) êîìïèëèðóåìîé ïðîãðàììû. Íî â C-- îí èìåë îãðàíè÷åííûå
  3508.   âîçìîæíîñòè. Îí ìîã áûòü èñïîëüçîâàí ëèøü êàê àðãóìåíò â îïåðàòîðàõ
  3509.   <b>GOTO/goto</b> è àññåìáëåðíûõ èíñòðóêöèÿõ <b>DW/DD/JMP</b>.
  3510.  
  3511.       Ýòîò ñèìâîë ìîæåò íàõîäèòüñÿ â ëþáîì ìåñòå âû÷èñëÿåìîãî ÷èñëîâîãî
  3512.   âûðàæåíèÿ è ìîæåò áûòü ïðèìåíåí â ëþáîì ìåñòå ñîâìåñòíî ñ äðóãèìè ÷èñëîâûìè
  3513.   âûðàæåíèÿìè.
  3514.  
  3515.   Ïðèìåðû ïðèìåíåíèÿ:
  3516.  
  3517.   DW #main-$    //çàïèñàòü ðàññòîÿíèå îò ïðîöåäóðû main äî òåêóùåãî ìåñòà
  3518.   GOTO $+2;     //ïåðåéòè ïî àäðåñó íà 2 áîëüøå, ÷åì òåêóùèé àäðåñ
  3519. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3520.  
  3521.  
  3522. <h2 id=9.20>
  3523.   9.20 Êëþ÷åâîå ñëîâî static è îïåðàòîð ::.
  3524. </h2>
  3525.  
  3526.       Åñëè ïåðåä îáúÿâëåíèåì ãëîáàëüíîé ïåðåìåííîé, ñòðóêòóðû èëè ïðîöåäóðû
  3527.   óêàçàòü ñëîâî <b>static</b>, òî ýòè ïåðåìåííàÿ, ñòðóêòóðà èëè ïðîöåäóðà áóäóò
  3528.   äîñòóïíû òîëüêî â òîì ôàéëå, â êîòîðîì îíè áûëè îáúÿâëåíû. Ò.å. åñëè Âû
  3529.   âêëþ÷èòå ýòîò ôàéë â äðóãîé äèðåêòèâîé <b>include</b>, òî ïåðåìåííûå îáúÿâëåííûå
  3530.   âî âêëþ÷àåìîì ôàéëå ñî ñëîâîì <b>static</b> íå áóäóò äîñòóïíû â îñíîâíîì ôàéëå,
  3531.   è Âû ìîæåòå â îñíîâíîì ôàéëå îáúÿâèòü äðóãèå ïåðåìåííûå ñ òàêèìè æå
  3532.   èìåíàìè.
  3533.  
  3534.       Åñëè Âû ïðèìåíèòå ñëîâî <b>static</b> ïðè îáúÿâëåíèè ëîêàëüíîé ïåðåìåííîé â
  3535.   ïðîöåäóðå, òî ïàìÿòü äëÿ ýòîé ïåðåìåííîé áóäåò âûäåëåíà íå â ñòåêå, à â
  3536.   îáëàñòè äàííûõ ïðîöåäóðû. Íî ýòà ïåðåìåííàÿ áóäåò äîñòóïíà òîëüêî âíóòðè
  3537.   ïðîöåäóðû, â êîòîðîé îíà áûëà îáúÿâëåíà. Ïðèìåíåíèå <b>static</b> ê ëîêàëüíûì
  3538.   ïåðåìåííûì äàåò âîçìîæíîñòü ñîõðàíÿòü çíà÷åíèå ïåðåìåííîé äëÿ ñëåäóþùåãî
  3539.   âõîäà â ïðîöåäóðó.
  3540.  
  3541.       Ñëîâî <b>static</b> ìîæíî ïðèìåíÿòü ê ëþáîìó ãëîáàëüíîìó îáúåêòó
  3542.   (ïåðåìåííîé, ñòðóêòóðå, ïðîöåäóðå). Äëÿ ëîêàëüíîãî èñïîëüçîâàíèÿ ýòî ñëîâî
  3543.   ìîæíî ïðèìåíÿòü òîëüêî ê ïåðåìåííûì.
  3544.  
  3545.       Åñëè â Âàøåé ïðîãðàììå åñòü ãëîáàëüíàÿ è ëîêàëüíàÿ ïåðåìåííàÿ ñ
  3546.   îäèíàêîâûìè èìåíàìè, òî â ïðîöåäóðå, â êîòîðîé îáúÿâëåíà ýòà ëîêàëüíàÿ
  3547.   ïåðåìåííàÿ, Âû íå èìåëè äîñòóïà ê îäíîèìåííîé ãëîáàëüíîé ïåðåìåííîé.
  3548.   Ïðèìåíèâ ïåðåä èìåíåì ïåðåìåííîé îïåðàòîð <b>::</b>, Âû ïîëó÷èòå äîñòóï ê
  3549.   ãëîáàëüíîé ïåðåìåííîé.  Ïðèìåð:
  3550.  
  3551.   int var;  //îáúÿâëÿåì ãëîáàëüíóþ ïåðåìåííóþ
  3552.  
  3553.   void proc()
  3554.   int var;  //îáúÿâëÿåì ëîêàëüíóþ ïåðåìåííóþ ñ èìåíåì óæå ñóùåñòâóþùåé
  3555.             //ãëîáàëüíîé ïåðåìåííîé
  3556.   {
  3557.     (E)AX=var;  //èìååì äîñòóï òîëüêî ê ëîêàëüíîé ïåðåìåííîé
  3558.     (E)AX=::var;  //à òàê ìîæíî ïîëó÷èòü äîñòóï ê ãëîáàëüíîé ïåðåìåííîé
  3559.   }
  3560. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3561.  
  3562.  
  3563. <h2 id=9.21>
  3564.   9.21 Îïåðàòîð sizeof.
  3565. </h2>
  3566.  
  3567.       Îïåðàöèÿ <b>sizeof</b> îïðåäåëÿåò ðàçìåð ïàìÿòè, êîòîðûé ñîîòâåòñòâóåò îáúåêòó
  3568.   èëè òèïó. Îïåðàöèÿ sizeof èìååò ñëåäóþùèé âèä:
  3569.  
  3570.    sizeof (<èìÿ òèïà>)
  3571.  
  3572.       Ðåçóëüòàòîì îïåðàöèè <b>sizeof</b> ÿâëÿåòñÿ ðàçìåð ïàìÿòè â áàéòàõ,
  3573.   ñîîòâåòñòâóþùèé çàäàííîìó îáúåêòó èëè òèïó.
  3574.  
  3575.       Â C-- îïåðàòîð <b>sizeof</b> ìîæíî ïðèìåíÿòü ê ïåðåìåííûì, ðåãèñòðàì, òèïàì
  3576.   ïåðåìåííûõ, ñòðóêòóðàì, ïðîöåäóðàì, òåêñòîâûì ñòðîêàì è ôàéëàì.
  3577.  
  3578.       Åñëè îïåðàöèÿ <b>sizeof</b> ïðèìåíÿåòñÿ ê òèïó ñòðóêòóðû, òî ðåçóëüòàòîì
  3579.   ÿâëÿåòñÿ ðàçìåð òåãà äàííîé ñòðóêòóðû.
  3580.  
  3581.       Åñëè îïåðàöèÿ <b>sizeof</b> ïðèìåíÿåòñÿ ê òåêñòîâîé ñòðîêå, òî ðåçóëüòàòîì
  3582.   îïåðàöèè ÿâëÿåòñÿ ðàçìåð ñòðîêè ïëþñ çàâåðøàþùèé íóëü. Íàïðèìåð:
  3583.  
  3584.    sizeof ("Test")
  3585.  
  3586.   ðåçóëüòàòîì ýòîé îïåðàöèè áóäåò ÷èñëî 5. Åñëè Âû íàïèøèòå òàêóþ
  3587.   êîíñòðóêöèþ:
  3588.  
  3589.   char a="Test";
  3590.  
  3591.    sizeof(a)
  3592.  
  3593.   òî ðåçóëüòàòîì áóäåò 5 - ðàçìåð ïàìÿòè, îòâåäåííûé äëÿ ïåðåìåííîé a.
  3594.  
  3595.       Ïðè èñïîëüçîâàíèè îïåðàòîðà <b>sizeof</b> ñ èìåíåì ñòðóêòóðû âñòàâëÿåò
  3596.   ôàêòè÷åñêèé ðàçìåð ïàìÿòè, çàíèìàåìûé ñòðóêòóðîé. Ýòî îñîáåííî âàæíî, åñëè
  3597.   Âû îáúÿâèëè ìàññèâ ñòðóêòóð.
  3598.  
  3599.       Îïåðàòîð <b>sizeof</b> ìîæíî ïðèìåíÿòü è ê èìåíè îïðåäåëåííîé ðàíåå
  3600.   ïðîöåäóðû. Ðåçóëüòàòîì áóäåò ðàçìåð ýòîé ïðîöåäóðû. Íî äëÿ äèíàìè÷åñêèõ
  3601.   ïðîöåäóð âñåãäà áóäåò íîëü.
  3602.  
  3603.       Îïåðàöèþ <b>sizeof</b> ìîæíî ïðèìåíÿòü è ê ôàéëàì. Ýòî áûâàåò î÷åíü ïîëåçíûì
  3604.   ïðè èñïîëüçîâàíèè îïåðàòîðà <b>FROM</b>, íî ìîæåò ïðèìåíÿòüñÿ è â äðóãèõ ñëó÷àÿõ.
  3605.   Ïðèìåð ïðèìåíåíèÿ îïåðàòîðà <b>sizeof</b> ê ôàéëàì:
  3606.  
  3607.    sizeof ( file "filename.dat" )
  3608.  
  3609.   Ðåçóëüòàòîì ýòîé îïåðàöèè áóäåò ðàçìåð ôàéëà "filename.dat".
  3610. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3611.  
  3612.  
  3613. <h2 id=9.22>
  3614.   9.22 Ìåòêè ïåðåõîäà.
  3615. </h2>
  3616.  
  3617.       Ìåòêè ïåðåõîäà ïðèìåíÿþòñÿ äëÿ óêàçàíèÿ íà÷àëüíûõ òî÷åê ó÷àñòêîâ êîäà,
  3618.   èñïîëüçóåìûõ êîìàíäàìè ïåðåõîäà âñòðîåííîãî àññåìáëåðà è îïåðàòîðàìè
  3619.   <b>goto/GOTO</b>.
  3620.  
  3621.       Èìåþòñÿ äâà òèïà ìåòîê ïåðåõîäà: ãëîáàëüíûå è ëîêàëüíûå. Ãëîáàëüíûå
  3622.   ìåòêè, êàê ñëåäóåò èç íàçâàíèÿ, ýòî ìåòêè, êîòîðûå âèäèìû èç ëþáîãî ìåñòà â
  3623.   ïðîãðàììå. Ëîêàëüíûå ìåòêè âèäíû òîëüêî â ïðåäåëàõ ñâîåãî ïðîöåäóðíîãî
  3624.   áëîêà, è íå îïðåäåëåíû çà åãî ïðåäåëàìè.
  3625.  
  3626.       Ìåòêè îïðåäåëÿþòñÿ èäåíòèôèêàòîðîì, îêàí÷èâàþùèìèñÿ äâîåòî÷èåì. Åñëè
  3627.   èäåíòèôèêàòîð ñîäåðæèò õîòÿ áû îäèí ñèìâîë ñòðî÷íûõ áóêâ (áóêâ íèæíåãî
  3628.   ðåãèñòðà, ìàëåíüêèõ áóêâ), ýòî ãëîáàëüíàÿ ìåòêà ïåðåõîäà, â ïðîòèâíîì
  3629.   ñëó÷àå, ýòî ëîêàëüíàÿ ìåòêà ïåðåõîäà.
  3630.  
  3631.       Ãëîáàëüíûå ìåòêè ïåðåõîäà íå äîëæíû èñïîëüçîâàòüñÿ âíóòðè äèíàìè÷åñêèõ
  3632.   ïðîöåäóð; òàì ìîæíî èñïîëüçîâàòü òîëüêî ëîêàëüíûå ìåòêè. Ýòî âàæíî ïîìíèòü,
  3633.   ïîñêîëüêó, èç-çà ïðèìåíåíèÿ òàêîãî ñðåäñòâà êàê ìàêðîêîìàíäû, äèíàìè÷åñêàÿ
  3634.   ïðîöåäóðà ìîæåò ïðèñóòñòâîâàòü â íåñêîëüêèõ ìåñòàõ êîäà, ÷òî áóäåò
  3635.   îçíà÷àòü, ÷òî ìåòêå ñîîòâåòñòâóåò áîëüøå ÷åì îäèí àäðåñ.
  3636.  
  3637.       Ìåòêè âíå ïðîöåäóð ôàêòè÷åñêè ðàñïîëàãàþòñÿ â îáëàñòè äàííûõ ïðîãðàììû.
  3638.   Åñëè äàííûå è êîä íàõîäÿòñÿ â îäíîì ñåãìåíòå (à èìåííî òàê îðãàíèçîâàííà
  3639.   ïðîãðàììà, íàïèñàííàÿ íà C--), òî ìåòêè âíå ïðîöåäóð ñòàíîâÿòñÿ ïðîñòûì è
  3640.   ýôôåêòèâíûì ìåòîäîì äëÿ ïîëó÷åíèÿ ðàññòîÿíèé ìåæäó ÷àñòÿìè ïðîãðàììû. Â
  3641.   êà÷åñòâå èìåí äëÿ ìåòîê âíå ïðîöåäóð ìîãóò áûòü èñïîëüçîâàíû óíèêàëüíûå
  3642.   èäåíòèôèêàòîðû, â êîòîðûõ ìîæíî èñïîëüçîâàòü áîëüøèå, ìàëåíüêèå è ñìåñü
  3643.   áîëüøèõ è ìàëåíüêèõ áóêâ.
  3644. <a href="#contents9"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3645.  
  3646.  
  3647. <h2 id=10.1>
  3648. 10. Àññåìáëåð.
  3649.  
  3650.   10.1 Ïîääåðæêà êîìàíä àññåìáëåðà.
  3651. </h2>
  3652.  
  3653.       Âñòðîåííûé â C-- àññåìáëåð ïîääåðæèâàåò âñå èíñòðóêöèè 8088/8086,
  3654.   80286, 80386, 80486, Pentium, Pentium II è Pentium III ïðîöåññîðîâ.
  3655.  
  3656.       Âñå èíñòðóêöèè âñòðîåííîãî àññåìáëåðà äîëæíû íà÷èíàòüñÿ ñ ñèìâîëà
  3657.   äîëëàðà <b>$</b>. Ïîääåðæèâàåòñÿ òàêæå êëþ÷åâîå ñëîâî <b>asm</b>, êîòîðîå ÿâëÿÿñü
  3658.   ñèíîíèìîì ê ñèìâîëó äîëëàðà, åùå è ïîääåðæèâàåò îáúåäèíåíèå àññåìáëåðíûõ
  3659.   èíñòðóêöèé â áëîêè.
  3660. <a href="#contents10"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3661.  
  3662.  
  3663. <h2 id=10.2>
  3664.   10.2 Êëþ÷åâîå ñëîâî asm.
  3665. </h2>
  3666.  
  3667.       Êëþ÷åâîå ñëîâî <b>asm</b> ÿâëÿåòñÿ ñèíîíèìîì ê <b>$</b> - ïðåôèêñ àññåìáëåðíîé
  3668.   êîìàíäû. Ïîñëå ñëîâà asm ìîæíî ïèñàòü áëîê àññåìáëåðíûõ êîìàíä.  Ïðèìåð:
  3669.  
  3670.         asm {
  3671.                 .
  3672.                 .
  3673.                 push AX
  3674.   labl:
  3675.                 push BX
  3676.                 mov AX,0x1234
  3677.                 jmp short labl
  3678.                 .
  3679.                 .
  3680.                 .
  3681.         }
  3682.  
  3683.     Ìåòêè âíóòðè áëîêà àññåìáëåðíûõ êîìàíä äîïóñòèìû.
  3684. <a href="#contents10"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3685.  
  3686.  
  3687. <h2 id=10.3>
  3688.   10.3 Ïðåôèêñ dup - ïîâòîðåíèå èíñòðóêöèé DB/DW/DD.
  3689. </h2>
  3690.  
  3691.       Äëÿ àññåìáëåðíûõ èíñòðóêöèè <b>DB, DW, DD</b> ââåäåíà âîçìîæíîñòü èñïîëüçîâàòü
  3692.   ïðåôèêñ ïîâòîðåíèé <b>dup</b>. Ïðèìåíåíèå ýòîãî ïðåôèêñà èìååò ñëåäóþùèé
  3693.   ñèíòàêñèñ:
  3694.  
  3695.     $DW NUMREP dup VALTOREP
  3696.  
  3697.   NUMREP - ÷èñëî ïîâòîðîâ èíñòðóêöèè DW.
  3698.   VALTOREP - âåëè÷èíà, êîòîðàÿ áóäåò ïîâòîðåíà NUMREP ðàç.
  3699.  
  3700.        îòëè÷èå îò àíàëîãà ýòîãî ïðåôèêñà èç àññåìáëåðà ïîâòîðÿåìóþ âåëè÷èíó
  3701.   çàêëþ÷àòü â ñêîáêè íåëüçÿ.
  3702. <a href="#contents10"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3703.  
  3704.  
  3705. <h2 id=10.4>
  3706.   10.4 Èíñòðóêöèè ïðîöåññîðà Pentium III.
  3707. </h2>
  3708.  
  3709.       Â êîìïèëÿòîð äîáàâëåíà ïîääåðæêà 19 íîâûõ èíñòðóêöèé MMX ðàñøèðåíèÿ
  3710.  
  3711.   MASKMOVQ   mmx,mmx
  3712.   MOVNTQ     m64,mmx
  3713.   PAVGB      mmx,mmx/m64
  3714.   PAVGW      mmx,mmx/m64
  3715.   PEXTRW     r32,mmx,i8
  3716.   PINSRW     mmx,r32/m16,i8
  3717.   PMAXUB     mmx,mmx/m64
  3718.   PMAXSW     mmx,mmx/m64
  3719.   PMINUB     mmx,mmx/m64
  3720.   PMINSW     mmx,mmx/m64
  3721.   PMOVMSKB   r32,mmx
  3722.   PMULHUW    mmx,mmx/m64
  3723.   PREFETCHT0 mem
  3724.   PREFETCHT1 mem
  3725.   PREFETCHT2 mem
  3726.   PREFETCHNTA mem
  3727.   SFENCE
  3728.   PSADBW     mmx,mmx/m64
  3729.   PSHUFW     mmx,mmx/m64,i8
  3730.  
  3731.       è 46 èíñòðóêöèé SSE ðàñøèðåíèÿ.
  3732.  
  3733.   ADDPS      xmm,m128/xmm
  3734.   ADDSS      xmm,xmm/m32
  3735.   ANDNPS     xmm,xmm/m128
  3736.   ANDPS      xmm,xmm/m128
  3737.   COMISS     xmm,xmm/m32
  3738.   DIVPS      xmm,m128/xmm
  3739.   DIVSS      xmm,xmm/m32
  3740.   MAXPS      xmm,m128/xmm
  3741.   MAXSS      xmm,xmm/m32
  3742.   MINPS      xmm,m128/xmm
  3743.   MINSS      xmm,xmm/m32
  3744.   MULPS      xmm,m128/xmm
  3745.   MULSS      xmm,xmm/m32
  3746.   ORPS       xmm,xmm/m128
  3747.   RCPPS      xmm,xmm/m128
  3748.   RCPSS      xmm,xmm/m32
  3749.   RSQRTPS    xmm,xmm/m128
  3750.   RSQRTSS    xmm,xmm/m32
  3751.   SQRTPS     xmm,m128/xmm
  3752.   SQRTSS     xmm,xmm/m32
  3753.   SUBPS      xmm,m128/xmm
  3754.   SUBSS      xmm,xmm/m32
  3755.   UCOMISS    xmm,xmm/m32
  3756.   UNPCKHPS   xmm,xmm/m128
  3757.   UNPCKLPS   xmm,xmm/m128
  3758.   XORPS      xmm,xmm/m128
  3759.   CMPPS      xmm,xmm/m128,i8
  3760.   CMPSS      xmm,xmm/m32,i8
  3761.   SHUFPS     xmm,xmm/m128,i8
  3762.   CVTPI2PS   xmm,m64/mmx
  3763.   CVTSI2SS   xmm,m32/r32
  3764.   CVTPS2PI   mmx,m128/xmm
  3765.   CVTTPS2PI  mmx,xmm/m128
  3766.   CVTSS2SI   r32,xmm/m128
  3767.   CVTTSS2SI  r32,xmm/m128
  3768.   LDMXCSR    m32
  3769.   STMXCSR    m32
  3770.   MOVHLPS    xmm,xmm
  3771.   MOVLHPS    xmm,xmm
  3772.   MOVMSKPS   r32,xmm
  3773.   MOVNTPS    m128,xmm
  3774.   MOVAPS     m128/xmm,xmm/m128
  3775.   MOVSS      xmm/m32,xmm/m32
  3776.   MOVUPS     xmm/m128,m128/xmm
  3777.   MOVHPS     xmm/m64,m64/xmm
  3778.   MOVLPS     xmm/m64,m64/xmm
  3779.  
  3780.       Ìíîãèå èç ýòèõ èíñòðóêöèé ìîãóò èñïîëüçîâàòü â êà÷åñòâå îïåðàíäà
  3781.   64-áèòíûå è 128-áèòíûå ÿ÷åéêè ïàìÿòè. Êîìïèëÿòîð C-- ñåé÷àñ ìîæåò ðàáîòàòü
  3782.   òîëüêî ñ 32-áèòíûìè ïåðåìåííûìè. Ïîýòîìó äëÿ èíñòðóêöèé èñïîëüçóþùèõ â
  3783.   êà÷åñòâå îïåðàíäà ÿ÷åéêè ïàìÿòè ðàçìåðîì áîëüøå 32-áèò ìîæíî èñïîëüçîâàòü
  3784.   ïåðåìåííûå ëþáûõ òèïîâ. Êîìïèëÿòîð íå áóäåò âûäàâàòü íà ýòî ñîîáùåíèé îá
  3785.   îøèáêå, áóäåò èñïîëüçîâàí àäðåñ ýòîé ïåðåìåííîé, à ñàìà èíñòðóêöèÿ áóäåò
  3786.   èñïîëüçîâàòü íóæíîå åé ÷èñëî áèòîâ ïàìÿòè, íà÷èíàÿ ñ àäðåñà óêàçàííîé
  3787.   ïåðåìåííîé. Íàïðèìåð:
  3788.  
  3789.       Äëÿ èíñòðóêöèè <b>movaps</b> îäèí èç îïåðàíäîâ ìîæåò áûòü 128-áèòíîé
  3790.   ÿ÷åéêîé ïàìÿòè. Äëÿ ýòîé èíñòðóêöèè äîïóñòèìû ñëåäóþùèé ñèíòàêñèñ:
  3791.  
  3792.   byte  var8_128[16];
  3793.   word  var16_128[8];
  3794.   dword var32_128[4];
  3795.  
  3796.   void proc()
  3797.   {
  3798.   asm{
  3799.     movaps var8_128,xmm0 //â ìàññèâ èç 16 áàéò áóäåò çàïèñàíî ñîäåðæèìîå XMM0
  3800.     movaps xmm1,var16_128       //â XMM1 áóäåò çàïèñàíî ñîäåðæèìîå 8 ñëîâ
  3801.     movaps var32_128,xmm1 //â ìàññèâ èç 4 äâîéíûõ ñëîâ áóäåò çàïèñàíî XMM1
  3802.   }
  3803.   }
  3804. <a href="#contents10"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3805.  
  3806.  
  3807. <h2 id=11.1>
  3808. 11. Ïðîöåäóðû.
  3809.  
  3810.   11.1 Òèïû ïðîöåäóð, ôóíêöèé è ìàêðîêîìàíä.
  3811. </h2>
  3812.  
  3813.       Ñåé÷àñ C-- ïîääåðæèâàåò 4 òèïà âûçîâà ïðîöåäóð: <b>cdecl, pascal, stdcall
  3814.   è fastcall</b>. Âîò êðàòêèå õàðàêòåðèñòèêè ýòèõ òèïîâ âûçîâîâ ïðîöåäóð:
  3815.  
  3816.   <b><font color="Red">cdecl</font></b>  Ýòîò òèï âûçîâà ïðîöåäóð ÿâëÿåòñÿ ïî óìîë÷àíèþ äëÿ ÿçûêà <b>Ñ</b>. Îí
  3817.   õàðàêòåðèçóåòñÿ òåì, ÷òî ïàðàìåòðû ïðîöåäóðû ïåðåäàþòñÿ â ïîðÿäêå îáðàòíîì
  3818.   èõ çàïèñè. Î÷èñòêà ñòåêà îò ïàðàìåòðîâ ïðîèçâîäèòñÿ ïîñëå çàâåðøåíèÿ ðàáîòû
  3819.   ïðîöåäóðû. Ýòîò ñïîñîá âûçîâà ïðîöåäóð î÷åíü óäîáåí äëÿ ïðîöåäóð ñ
  3820.   ïåðåìåííûì ÷èñëîì ïàðàìåòðîâ.
  3821.  
  3822.   <b><font color="Red">pascal</font></b>  Ýòîò òèï âûçîâà ïðåäïîëàãàåò, ÷òî ïàðàìåòðû ïåðåäàþòñÿ â òîì
  3823.   ïîðÿäêå, â êîòîðîì îíè çàïèñàíû â ïðîãðàììå. Îñâîáîæäåíèå ñòåêà îò
  3824.   ïàðàìåòðîâ ïðîèçâîäèò ñàìà âûçûâàåìàÿ ïðîöåäóðà. Ýòîò òèï âûçîâà ÿâëÿåòñÿ
  3825.   áîëåå êîìïàêòíûì, ÷åì <b>cdecl</b>.
  3826.  
  3827.   <b><font color="Red">stdcall</font></b>  Ýòîò òèï âûçîâà ÿâëÿåòñÿ ãèáðèäîì ïåðâûõ äâóõ. Ïàðàìåòðû
  3828.   ïåðåäàþòñÿ ïðîöåäóðå â ïîðÿäêå îáðàòíîì, òîìó â êîòîðîì îíè çàïèñàíû â
  3829.   ïðîãðàììå. Îñâîáîæäåíèå ñòåêà îò ïàðàìåòðîâ ïðîèçâîäèòñÿ â ñàìîé âûçûâàåìîé
  3830.   ïðîöåäóðå.
  3831.  
  3832.   <b><font color="Red">fastcall</font></b>  Ýòîò òèï âûçîâà ïðîöåäóð ïðåäïîëàãàåò ÷òî ïåðåäà÷à ïàðàìåòðîâ
  3833.   ïðîöåäóðå ïðîèçâîäèòñÿ ÷åðåç ðåãèñòðû, òåì ñàìûì îòïàäàåò íåîáõîäèìîñòü
  3834.   îñâîáîæäåíèÿ ñòåêà îò ïàðàìåòðîâ. Äëÿ ýòîãî òèïà âûçîâà ïðîöåäóðû
  3835.   ñóùåñòâóþò îãðàíè÷åíèÿ ïî ÷èñëó ïåðåäàâàåìûõ ïàðàìåòðîâ. Äëÿ C ýòî òðè
  3836.   ïàðàìåòðà, à äëÿ C-- øåñòü.  C-- ïàðàìåòðû ïåðåäàþòñÿ ïî óìîë÷àíèþ â
  3837.   ñëåäóþùåì ïîðÿäêå: <b>1-é - AX/EAX, 2-é - BX/EBX, 3 - CX/ECX, 4 - DX/EDX, 5 -
  3838.   DI/EDI, 6 - SI/ESI</b>. Ïàðàìåòðû òèïîâ char èëè byte ìîãóò ïåðåäàâàòüñÿ â
  3839.   êîëè÷åñòâå íå áîëåå 4 èëè òîëüêî â ïåðâûõ 4 ðåãèñòðàõ: <b>1 - AL, 2 - BL, 3 -
  3840.   CL, 4 - DL</b>. Ýòîò ïîðÿäîê ðåãèñòðîâ ìîæåò áûòü èçìåíåí, åñëè ÿâíî óêàçàòü
  3841.   åãî ëèáî ïðè îáúÿâëåíèè ïðîöåäóðû, ëèáî ïðè åå îïðåäåëåíèè. Ïðîöåäóðû òèïà
  3842.   fastcall èíîãäà åùå íàçûâàþò ðåãèñòðîâûìè.
  3843.  
  3844.        C-- ïî óìîë÷àíèþ, åñëè èìÿ ïðîöåäóðû íàïèñàíî áîëüøèìè áóêâàìè, òî
  3845.   ñ÷èòàåòñÿ, ÷òî ýòà ïðîöåäóðà èìååò òèï âûçîâà <b>fastcall</b>. Åñëè æå â èìåíè
  3846.   ïðîöåäóðû åñòü õîòÿ áû îäíà ìàëåíüêàÿ áóêâà, òî ïî óìîë÷àíèþ ñ÷èòàåòñÿ, ÷òî
  3847.   ýòà ïðîöåäóðà èìååò òèï âûçîâà <b>pascal</b>, çà èñêëþ÷åíèåì ïðîãðàìì
  3848.   êîìïèëèðóåìûõ ñ êëþ÷îì <b>/w32 /w32c</b> èëè <b>/DLL</b>.  íèõ ïî óìîë÷àíèþ ïðèìåíÿåòñÿ
  3849.   òèï âûçîâà ïðîöåäóð <b>stdcall</b>. Åñëè æå Âû õîòèòå èçìåíèòü òèï âûçîâà ïðîöåäóð
  3850.   èç ïî óìîë÷àíèþ íà ëþáîé äðóãîé, òî ýòó ïðîöåäóðó íàäî îáÿçàòåëüíî îáúÿâèòü
  3851.   ñ óêàçàíèåì òèïà æåëàåìîãî âûçîâà.
  3852.  
  3853.       Îáúÿâëåíèå ïðîöåäóð ââåäåíî äëÿ òîãî, ÷òîáû ñîîáùàòü êîìïèëÿòîðó î
  3854.   òèïå âîçâðàòà èç ïðîöåäóð, ñïîñîáå ïåðåäà÷è ïàðàìåòðîâ ïðîöåäóðå è èõ ÷èñëå.
  3855. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3856.  
  3857.  
  3858. <h2 id=11.2>
  3859.   11.2 Ñòåêîâûå ïðîöåäóðû.
  3860. </h2>
  3861.  
  3862.       Ñòåêîâûå ïðîöåäóðû ïî óìîë÷àíèþ îáúÿâëÿþòñÿ ïðè ïîìîùè èäåíòèôèêàòîðà,
  3863.   êîòîðûé ñîäåðæèò, ïî êðàéíåé ìåðå, îäèí ñèìâîë ñòðî÷íûõ áóêâ (áóêâ íèæíåãî
  3864.   ðåãèñòðà, ìàëåíüêèõ áóêâ). Òàêèì îáðàçîì, ñòåêîâûå ïðîöåäóðû ëåãêî îòëè÷èìû
  3865.   îò ðåãèñòðîâûõ ïðîöåäóð, ïîñêîëüêó äëÿ èìåí ðåãèñòðîâûõ ïðîöåäóð ñèìâîëû
  3866.   ñòðî÷íûõ áóêâ çàïðåùåíû.
  3867.  
  3868.       Ïàðàìåòðû äëÿ ñòåêîâûõ ïðîöåäóð, åñëè îíè åñòü, ìîãóò èìåòü ëþáîé òèï
  3869.   <b>byte, char, word, int, dword, long</b> èëè <b>float</b>.
  3870.  
  3871.       Ïàðàìåòðû ïåðåäàþòñÿ â ñîîòâåòñòâèè ñ ïðàâèëàìè, ïðèíÿòûìè äëÿ äàííîãî
  3872.   òèïà ïðîöåäóð. Åñëè ïðîöåäóðà íå èìååò îáúÿâëåíèÿ, òî êîìïèëÿòîð íå ñëåäèò
  3873.   çà ÷èñëîì è òèïîì ïåðåäàâàåìûõ ïàðàìåòðîâ.  ýòîì ñëó÷àå ó Âàñ ïîÿâëÿåòñÿ
  3874.   ñâîáîäà â èõ èñïîëüçîâàíèè, íî Âû äîëæíû îñîçíàâàòü è ïîñëåäñòâè
  3875.   íåïðàâèëüíîãî èõ èñïîëüçîâàíèÿ.
  3876.  
  3877.       Â ñïèñêå ïàðàìåòðîâ äëÿ êàæäîãî ïàðàìåòðà óêàçûâàåòñÿ åãî òèï.
  3878.   Ïàðàìåòðû îäíîãî òèïà, èäóùèå ïîäðÿä, ðàçäåëÿþòñÿ çàïÿòûìè. Ôîðìàëüíûå
  3879.   ïàðàìåòðû ðàçíîãî òèïà â îáúÿâëåíèè ôóíêöèè ðàçäåëÿþòñÿ ñèìâîëîì <b>;</b>.
  3880.  
  3881.       Â ñëåäóþùåì ïðèìåðå ñòåêîâàÿ ïðîöåäóðà âîçâðàùàåò ñóììó âñåõ ñâîèõ
  3882.   ïàðàìåòðîâ (èìåþùèõ ðàçëè÷íûå òèïû) êàê âåëè÷èíó òèïà word:
  3883.  
  3884.         word add_them_all (int a,b,c; byte d,e; word x,y)
  3885.         {
  3886.         return( a+b+c+d+e+x+y );
  3887.         }
  3888.  
  3889.       Ðàíåå C-- äåëàë âûçîâû ñòåêîâûõ ïðîöåäóð ëèøü â ñòèëå <b>pascal</b>.
  3890.   Ïðåèìóùåñòâîì ýòîãî ñïîñîáà âûçîâà ïðîöåäóð ÿâëÿåòñÿ êîìïàêòíîñòü è áîëåå
  3891.   ïðîñòîé ìåõàíèçì ãåíåðàöèè êîäà. Ê íåäîñòàòêàì, à ñîîòâåòñòâåííî è
  3892.   ïðåèìóùåñòâàì Ñ-ñòèëÿ, ìîæíî îòíåñòè æåñòêóþ ïðèâÿçàííîñòü ïàñêàëåâñêèõ
  3893.   ïðîöåäóð ê ÷èñëó è òèïó ïåðåäàâàåìûõ ïàðàìåòðîâ (ïîïðîáóéòå ïðè âûçîâå
  3894.   ïðîöåäóðû â ñòèëå <b>pascal</b> îïóñòèòü îäèí ïàðàìåòð è ïîëó÷èòå 100% çàâèñàíèå).
  3895.   Íàïîìíþ íåêîòîðûå òåõíè÷åñêèå äåòàëè îáîèõ òèïîâ âûçîâîâ ïðîöåäóð.
  3896.  
  3897.   Êàäð ñòåêà C-- äëÿ áëèçêèõ ïðîöåäóð ñòåêà â ñòèëå pascal:
  3898.        ÀÄÐÅÑ
  3899.         ...
  3900.       BP + FFFE ïðåäïîñëåäíèé áàéòà ëîêàëüíûõ ïåðåìåííûõ
  3901.       BP + FFFF ïîñëåäíèé áàéò ëîêàëüíûõ ïåðåìåííûõ
  3902.       BP + 0000 Ñîõðàíåííûé BP
  3903.       BP + 0002 RET àäðåñ
  3904.       BP + 0004 ïîñëåäíåå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ (åñëè îíè
  3905.                 åñòü)
  3906.       BP + 0006 ïðåäïîñëåäíåå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ
  3907.        ...
  3908.       BP + nnnn ïåðâîå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ
  3909.  
  3910.       Îñâîáîæäåíèå ñòåêà îò ïåðåäàííûõ ïðîöåäóðå ïàðàìåòðîâ ïðîèñõîäèò ïðÿìî
  3911.   â ñàìîé ïðîöåäóðå êîìàíäîé <b>RET nnnn</b> - ãäå nnnn ÿâëÿåòñÿ ðàçìåðîì ïåðåäàííûõ
  3912.   â ñòåê ïàðàìåòðîâ.
  3913.  
  3914.   Êàäð ñòåêà C-- äëÿ áëèçêèõ ïðîöåäóð ñòåêà â ñòèëå ñè:
  3915.        ÀÄÐÅÑ
  3916.         ...
  3917.       BP + FFFE ïðåäïîñëåäíèé áàéòà ëîêàëüíûõ ïåðåìåííûõ
  3918.       BP + FFFF ïîñëåäíèé áàéò ëîêàëüíûõ ïåðåìåííûõ
  3919.       BP + 0000 Ñîõðàíåííûé BP
  3920.       BP + 0002 RET àäðåñ
  3921.       BP + 0004 ïåðâîå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ (åñëè îíè
  3922.                 åñòü)
  3923.       BP + 0006 âòîðîå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ
  3924.        ...
  3925.       BP + nnnn ïîñëåäíåå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ
  3926.  
  3927.       Ïðîöåäóðû â ñòèëå <b>Ñ</b> çàêàí÷èâàþòñÿ êîìàíäîé <b>RET</b>. Îñâîáîæäåíèå ñòåêà îò
  3928.   ïàðàìåòðîâ ïðîèñõîäèò â òîì ìåñòå îòêóäà áûëà âûçâàíà ïðîöåäóðà. Îáû÷íî ýòî
  3929.   äåëàåòñÿ êîìàíäîé <b>ADD SP,nnnn</b>. Ò.å. êîìïèëÿòîð ìîæåò òî÷íî çíàòü ñêîëüêî è
  3930.   êàêèõ ïàðàìåòðîâ Âû ïåðåäàåòå â äàííîì ñëó÷àå ïðîöåäóðå è ñîîòâåòñòâåííî
  3931.   îñâîáîæäàåò ñòåê ïîñëå çàâåðøåíèÿ ïðîöåäóðû. Ýòî î÷åíü óäîáíî äëÿ ïðîöåäóð,
  3932.   êîòîðûå ìîãóò îáðàáàòûâàòü ïåðåìåííîå ÷èñëî ïàðàìåòðîâ (íàïðèìåð, ïðîöåäóðû
  3933.   òèïà printf).
  3934.  
  3935.       Îáúÿâëåíèå ïðîöåäóðû èìååò ñëåäóþùèé âèä:
  3936.  
  3937.     rettype modif procname();
  3938.  
  3939.       Ïåðâûì èäåò íåîáÿçàòåëüíûé òèï âîçâðàòà èç ïðîöåäóð. Ïî óìîë÷àíèþ îí
  3940.   äëÿ 16-áèòíûõ ïðîãðàìì ðàâåí word, à äëÿ 32-áèòíûõ dword. Çàòåì äîëæåí èäòè
  3941.   òàêæå íåîáÿçàòåëüíûé ìîäèôèêàòîð. Ïî óìîë÷àíèþ âñå ñòåêîâûå ïðîöåäóðû â C--
  3942.   (çà èñêëþ÷åíèåì ðåæèìà êîìïèëÿöèè ïðîãðàìì ïîä Windows, ãäå ïî óìîë÷àíèþ
  3943.   äåéñòâóåò ñòèëü âûçîâà ïðîöåäóð <b>stdcall</b>) èìåþò ñòèëü <b>pascal</b>. Äàëåå èäåò èì
  3944.   ïðîöåäóðû ñî ñêîáêàìè, êîòîðûå ÿâëÿþòñÿ ïðèçíàêîì òîãî ÷òî Âû îáúÿâëÿåòå
  3945.   ïðîöåäóðó, à íå ïåðåìåííóþ. Çàâåðøàåò îáúÿâëåíèå ñèìâîë òî÷êà ñ çàïÿòîé.
  3946.  
  3947.       Ïðè îáúÿâëåíèè ïðîöåäóð â C-- ïðîïèñûâàòü ïàðàìåòðû ïðîöåäóðû
  3948.   íåîáÿçàòåëüíî (òîãäà êîìïèëÿòîð íå áóäåò êîíòðîëèðîâàòü ÷èñëî è òèï
  3949.   ïåðåäàâàåìûõ ïàðàìåòðîâ), íî åñëè Âû èõ âñòàâèòå, òî âêëþ÷èòñÿ ìåõàíèçì
  3950.   êîíòðîëÿ çà ÷èñëîì è òèïîì ïàðàìåòðîâ.
  3951. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  3952.  
  3953.  
  3954. <h2 id=11.3>
  3955.   11.3 Ðåãèñòðîâûå ïðîöåäóðû.
  3956. </h2>
  3957.  
  3958.       Ðåãèñòðîâûå ïðîöåäóðû îïðåäåëÿþòñÿ, ïî óìîë÷àíèþ, ïðè ïîìîùè
  3959.   èäåíòèôèêàòîðà, êîòîðûé íå ñîäåðæèò ñèìâîëîâ ñòðî÷íûõ áóêâ. Èëè æå ÿâíûì
  3960.   óêàçàíèåì ÷òî ýòî ðåãèñòðîâàÿ ïðîöåäóðà ñ ïîìîùüþ êëþ÷åâîãî ñëîâà <b>fastcall</b>.
  3961.  
  3962.       Êàê óæå áûëî ñêàçàíî, ïàðàìåòðû (åñëè îíè åñòü) äëÿ ðåãèñòðîâîé
  3963.   ïðîöåäóðû ïåðåäàþòñÿ ÷åðåç ðåãèñòðû. Ðåãèñòðîâûå ïðîöåäóðû ìîãóò èìåòü íå
  3964.   áîëåå 6 ïàðàìåòðîâ. Åñëè ïàðàìåòðû èìåþò òèï int èëè word, ðåãèñòðû ïî
  3965.   óìîë÷àíèþ èñïîëüçóþòñÿ â ñëåäóþùåì ïîðÿäêå: <b>AX, BX, CX, DX, DI, è SI</b>.
  3966.   Ïåðâûå ÷åòûðå ïàðàìåòðà ìîãóò òàêæå èìåòü òèï <b>char</b> èëè <b>byte</b>, â ýòîì ñëó÷àå
  3967.   çàäåéñòâóþòñÿ ðåãèñòðû <b>AL, BL, CL è DL</b> ñîîòâåòñòâåííî. Ëþáîé èç øåñòè
  3968.   ïàðàìåòðîâ ìîæåò èìåòü òèï <b>long, dword</b> èëè <b>float</b>, òîãäà äëÿ íåãî
  3969.   èñïîëüçóåòñÿ ðåãèñòð <b>EAX, EBX, ECX, EDX, EDI</b>, èëè <b>ESI</b>.
  3970.  
  3971.       Â ñëåäóþùåì ïðèìåðå ðåãèñòðîâàÿ ïðîöåäóðà ñ èìåíåì TOGETHER âîçâðàùàåò
  3972.   çíà÷åíèå òèïà word êàê ðåçóëüòàò óìíîæåíèÿ ïåðâîãî ïàðàìåòðà, èìåþùåãî òèï
  3973.   word, íà âòîðîé ïàðàìåòð òîãî æå òèïà:
  3974.  
  3975.            word TOGETHER() /* AX = ïåðâûé ïàðàìåòð, BX = âòîðîé ïàðàìåòð */
  3976.            {
  3977.            return (AX * BX);
  3978.            }
  3979.  
  3980.       Â ñëåäóþùåì ïðèìåðå ðåãèñòðîâàÿ ïðîöåäóðà ñ èìåíåì SHOW_NUM, êîòîðàÿ íå
  3981.   âîçâðàùàåò íèêàêîãî çíà÷åíèÿ, çàòî âûâîäèò íà ýêðàí ïåðâûé ïàðàìåòð
  3982.   (èìåþùèé òèï int), çàòåì ðàçäåëèòåëüíûé çíàê â âèäå äâîåòî÷èÿ <b>:</b>, à çàòåì
  3983.   âòîðîé ïàðàìåòð (èìåþùèé òèï byte) :
  3984.  
  3985.            void SHOW_NUM () /* AX = ïåðâîå ÷èñëî, BL = âòîðîå ÷èñëî */
  3986.            {
  3987.            $ PUSH BX
  3988.            WRITEINT (int AX);
  3989.            WRITE (':');
  3990.            $ POP BX
  3991.            WRITEWORD (BL);
  3992.            }
  3993.  
  3994.       Íî åñëè â ïðîöåäóðå ñäåëàòü îáúÿâëåíèå ïîðÿäêà è òèïîâ èñïîëüçóåìûõ
  3995.   ðåãèñòðîâ, òî âîçìîæíî ïðîèçâîëüíîå èñïîëüçîâàíèå ðåãèñòðîâ. Áîëåå ïîäðîáíî
  3996.   îá ýòîì ìîæíî ïî÷èòàòü â ðàçäåëå îá îáúÿâëåíèÿõ ïàðàìåòðîâ â ðåãèñòðîâûõ
  3997.   ïðîöåäóðàõ.
  3998.  
  3999.       Äëÿ òîãî, ÷òîáû èñïîëüçîâàòü ðåãèñòðîâóþ ïðîöåäóðó êàê ìàêðîêîìàíäó,
  4000.   îíà äîëæíà áûòü îáúÿâëåíà êàê äèíàìè÷åñêàÿ ïðîöåäóðà. Äèíàìè÷åñêèå
  4001.   ïðîöåäóðû îïèñàíû â ñëåäóþùåì ïîäðàçäåëå.
  4002. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4003.  
  4004.  
  4005. <h2 id=11.4>
  4006.   11.4 Äèíàìè÷åñêèå ïðîöåäóðû.
  4007. </h2>
  4008.  
  4009.       Äèíàìè÷åñêèå ïðîöåäóðû - ïðîöåäóðû, êîòîðûå îïðåäåëåíû, íî âñòàâëÿþòñÿ
  4010.   â êîä ïðîãðàììû, òîëüêî åñëè åñòü âûçîâ. Äèíàìè÷åñêèå ïðîöåäóðû ìîãóò
  4011.   èñïîëüçîâàòüñÿ êàê ìàêðîêîìàíäû.
  4012.  
  4013.       Îïðåäåëåíèå äèíàìè÷åñêîé ïðîöåäóðû íà÷èíàåòñÿ ñ ñèìâîëà äâîåòî÷èÿ ':'.
  4014.  
  4015.   Ïðèìåð äèíàìè÷åñêîé ïðîöåäóðû ñòåêà:
  4016.  
  4017.           : void setvideomode (byte mode)
  4018.           {
  4019.           AL = mode;
  4020.           AH = 0;
  4021.           $ INT 0x10
  4022.           }
  4023.  
  4024.   Ïðèìåð äèíàìè÷åñêîé ðåãèñòðîâîé ïðîöåäóðû:
  4025.  
  4026.           : int ABS () /* AX = ÷èñëî, àáñîëþòíîå çíà÷åíèå êîòîðîãî èùåòñÿ*/
  4027.           {
  4028.           IF (int AX < 0)
  4029.                -AX;
  4030.           }
  4031. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4032.  
  4033.  
  4034. <h2 id=11.4.1>
  4035.     11.4.1 Óñòàíîâêà äèíàìè÷åñêîé ïðîöåäóðû â îïðåäåëåííîå ìåñòî ïðîãðàììû.
  4036. </h2>
  4037.  
  4038.         Äèíàìè÷åñêèå ïðîöåäóðû, åñëè îíè íå èñïîëüçóþòñÿ êàê ìàêðîñû è åñëè
  4039.     îíè áûëè âîñòðåáîâàíû â ïðîãðàììå, âñòàâëÿþòñÿ â êîä ïðîãðàììû â ñàìîì
  4040.     êîíöå êîìïèëÿöèè.  êàêîì òî÷íî ìåñòå Âàøåé ïðîãðàììû îíè îêàæóòñÿ óçíàòü
  4041.     íåâîçìîæíî. Åñëè æå Âàì íåîáõîäèìî, ÷òîáû êàêàÿ-òî äèíàìè÷åñêàÿ ïðîöåäóðà
  4042.     íàõîäèëàñü â êîíêðåòíîì ìåñòå ïðîãðàììû, òî ýòî ìîæíî ñäåëàòü òàêèì
  4043.     îáðàçîì:
  4044.  
  4045.     :void proc ( int par1, par2)
  4046.     {
  4047.        ...
  4048.     }
  4049.  
  4050.         Ìû èìååì äèíàìè÷åñêóþ ïðîöåäóðó, êîä êîòîðîé áûë áû ðàñïîëîæåí ðàíåå
  4051.     êîäà îáû÷íîé ïðîöåäóðû íàøåé ïðîãðàììû. Äëÿ ýòîãî ïåðåä îïðåäåëåíèåì ýòîé
  4052.     ïðîöåäóðû íàäî íàïèñàòü òàêóþ ñòðîêó:
  4053.  
  4054.     @ void proc ();
  4055.  
  4056.          èòîãå äèíàìè÷åñêàÿ ïðîöåäóðà áóäåò âñòàâëåíà â êîä ïðîãðàììû íå â
  4057.     êîíöå åå, êàê îáû÷íî, à â ìåñòå, ãäå áóäåò ðàñïîëîæåíà ýòà ñòðîêà. Åñëè
  4058.     äèíàìè÷åñêàÿ ïðîöåäóðà èìååò ïàðàìåòðû, òî ïðîïèñûâàòü ýòè ïàðàìåòðû
  4059.     íåîáÿçàòåëüíî.
  4060.  
  4061.         Â êîìïèëÿòîðå åñòü åùå áîëåå ìîùíîå ñðåäñòâî, ïîçâîëÿþùåå âñå
  4062.     äèíàìè÷åñêèå îáúåêòû ( ïðîöåäóðû, ïåðåìåííûå, ñòðóêòóðû ) ðàñïîëîæèòü â
  4063.     óêàçàííîì ìåñòå, à íå â êîíöå ïðîãðàììû, êàê îáû÷íî. Ýòî äèðåêòèâà
  4064.     <b>#setdinproc</b>. Âñòðåòèâ ýòó äèðåêòèâó, êîìïèëÿòîð íåìåäëåííî ðàñïîëîæèò âñå
  4065.     èçâåñòíûå åìó íà ýòîò ìîìåíò äèíàìè÷åñêèå îáúåêòû â ìåñòå îáúÿâëåíèÿ ýòîé
  4066.     äèðåêòèâû. Ïîñëåäóþùèå äèíàìè÷åñêèå îáúåêòû áóäóò ðàñïîëàãàòüñÿ êàê
  4067.     îáû÷íî, â êîíöå ïðîãðàììû, åñëè êîíå÷íî, íå áóäåò ïîâòîðíî ïðèìåíåíà
  4068.     äèðåêòèâà <b>#setdinproc</b>.
  4069.  
  4070.         Ýòî ìîæåò áûòü ïðèìåíåíî è áûòü ïîëåçíûì ïðè ñîçäàíèè ðåçèäåíòíûõ
  4071.     ïðîãðàìì (TSR) è äðàéâåðîâ óñòðîéñòâ.
  4072. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4073.  
  4074.  
  4075. <h2 id=11.5>
  4076.   11.5 inline-ïðîöåäóðû.
  4077. </h2>
  4078.  
  4079.       inline-ïðîöåäóðàìè ìîãóò áûòü äèíàìè÷åñêèå ïðîöåäóðû, êîòîðûå ìîæíî
  4080.   èñïîëüçîâàòü êàê ìàêðîñû. Íî â îòëè÷èå îò ìàêðîñîâ, inline-ïðîöåäóðû, ïðè
  4081.   âêëþ÷åííîé îïòèìèçàöèè íà ñêîðîñòü, àâòîìàòè÷åñêè âñòàâëÿþòñÿ â êîä, à ïðè
  4082.   îïòèìèçàöèè êîäà íà ðàçìåð, äåëàåòñÿ âûçîâ èõ, êàê äèíàìè÷åñêèõ ïðîöåäóð.
  4083.  
  4084.       Íî èíîãäà áûâàåò íóæíî ïðè âêëþ÷åííîé îïòèìèçàöèè íà ðàçìåð êîäà, ÷òîáû
  4085.   ïðîöåäóðû âñòàâëÿëèñü â êîä, à íå äåëàëñÿ èõ âûçîâ. Äëÿ ýòèõ öåëåé ââåäåíà
  4086.   äèðåêòèâà <b>#inline TRUE</b>. Ýòîé æå äèðåêòèâîé ( <b>#inline FALSE</b> ), ìîæíî ïðè
  4087.   îïòèìèçàöèè íà ñêîðîñòü äåëàòü âûçîâû ïðîöåäóð, âìåñòî èõ âñòàâêè.
  4088.  
  4089.       Âàæíî ïîìíèòü, ÷òî ñòàòóñ äèðåêòèâû <b>#inline</b> àâòîìàòè÷åñêè ìåíÿåòñÿ ïðè
  4090.   ñìåíå ðåæèìà îïòèìèçàöèè. Ïðè óñòàíîâêå îïòèìèçàöèè íà ñêîðîñòü ñòàòóñ
  4091.   äèðåêòèâû <b>#inline</b> óñòàíàâëèâàåòñÿ â <b>TRUE</b>, à ïðè ñìåíå ðåæèìà îïòèìèçàöèè ïî
  4092.   ðàçìåðó êîäà, óñòàíàâëèâàåòñÿ â <b>FALSE</b>. Ïîýòîìó ïðèìåíÿéòå äèðåêòèâó <b>#inline</b>
  4093.   ëèøü ïîñëå ñìåíû ðåæèìà îïòèìèçàöèè.
  4094.  
  4095.       Äèðåêòèâû ìåíÿþùèå ðåæèì îïòèìèçàöèè <b>#codesize, #speed</b> è äèðåêòèâà
  4096.   <b>#inline</b>, îáúÿâëåííûå âíóòðè ïðîöåäóðû ðàñïðîñòðàíÿþòñÿ òîëüêî íà îñòàâøóþñÿ
  4097.   ÷àñòü ïðîöåäóðû, ò.å. îíè ñòàíîâÿòñÿ ëîêàëüíûìè. Äëÿ òîãî ÷òîáû èçìåíåíèÿ
  4098.   áûëè ãëîáàëüíûìè ýòè äèðåêòèâû íàäî îáúÿâëÿòü âíå òåëà ïðîöåäóðû.
  4099.  
  4100.       Äëÿ òîãî ÷òîáû îïðåäåëèòü inline-ïðîöåäóðó, íàäî â ïåðâîé ñòðîêå ñ
  4101.   èìåíåì ïðîöåäóðû âìåñòî ñèìâîëà äèíàìè÷åñêîé ïðîöåäóðû <b>(:)</b> íàïèñàòü
  4102.   êëþ÷åâîå ñëîâî <b>inline</b>. Ïðèìåð îïðåäåëåíèÿ inline-ïðîöåäóðû:
  4103.  
  4104.   inline int fastcall abs(AX)
  4105.   {
  4106.       IF ( int AX < 0 ) -AX ;
  4107.   }
  4108. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4109.  
  4110.  
  4111. <h2 id=11.5.1>
  4112.     11.5.1 Äðóãîå ïðèìåíåíèå inline.
  4113. </h2>
  4114.  
  4115.         Êëþ÷åâîå ñëîâî <b>inline</b> èìååò â ïðîöåäóðàõ è äðóãîå ïðèìåíåíèå. Åñëè
  4116.     ýòî ñëîâî ðàñïîëîæåíî ïåðåä íà÷àëîì áëîêà ïðîöåäóðû, òî äëÿ òàêîé
  4117.     ïðîöåäóðû íå ñîçäàåòñÿ êàäð ñòåêà è íå ãåíåðèðóåòñÿ çàâåðøàþùèé ïðîöåäóðó
  4118.     <b>ret</b>. Ïðèìåð:
  4119.  
  4120.     void PROC ()
  4121.     inline
  4122.     {
  4123.       ...
  4124.     }
  4125.  
  4126.         Òàêèå ïðîöåäóðû íå äîëæíû ñîäåðæàòü ëîêàëüíûõ ïåðåìåííûõ. Åñëè
  4127.     ïðîöåäóðà ÿâëÿåòñÿ ðåãèñòðîâîé (òèï <b>fastcall</b>), òî ñ ïåðåäà÷åé åé
  4128.     ïàðàìåòðîâ íåò ïðîáëåì. Åñëè æå ïðîöåäóðà ÿâëÿåòñÿ ñòåêîâîé, òî ïåðåäàòü
  4129.     â òàêóþ ïðîöåäóðó ïàðàìåòðû Âû ìîæåòå, íî âîñïîëüçîâàòüñÿ ýòèìè
  4130.     ïàðàìåòðàìè èñïîëüçóÿ èõ èìåíà, Âû óæå íå ñìîæåòå. Ýòî ïðîèñõîäèò ïîòîìó,
  4131.     ÷òî â ýòèõ ïðîöåäóðàõ êàäð ñòåêà íå ôîðìèðóåòñÿ. Ïðèìåð:
  4132.  
  4133.     void proc (int par1, par2)
  4134.     inline
  4135.     {
  4136.       AX=par1; /* êîìïèëÿòîð îáðàòèòñÿ ñ ïàðàìåòðó 'par1' ÷åðåç ðåãèñòð BP.
  4137.                   Íî òàê êàê êàäð ñòåêà íå áûë ñîçäàí, ïðè âûïîëíåíèè ýòîãî
  4138.                   êîäà ïðîãðàììà áóäåò ðàáîòàòü íå ïðàâèëüíî. */
  4139.        ...
  4140.     }
  4141.  
  4142.         Âñòðåòèâ òàêîå îïðåäåëåíèå ïðîöåäóðû, êîìïèëÿòîð âûäàñò ïðåäóïðåæäåíèå
  4143.     î òîì, ÷òî â òàêèõ ïðîöåäóðàõ èñïîëüçîâàòü ëîêàëüíûå è ïàðàìåòðè÷åñêèå
  4144.     ïåðåìåííûå íåëüçÿ.
  4145. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4146.  
  4147.  
  4148. <h2 id=11.6>
  4149.   11.6 Ïðîöåäóðû îáðàáîòêè ïðåðûâàíèé.
  4150. </h2>
  4151.  
  4152.       Ïðîöåäóðû îáðàáîòêè ïðåðûâàíèé îïðåäåëÿþòñÿ ñëåäóþùèì ñïîñîáîì:
  4153.  
  4154.           interrupt procedure_name ()
  4155.           {
  4156.           // put code here (çäåñü äîëæåí áûòü êîä îáðàáîòêè)
  4157.           }
  4158.  
  4159.       Ïðîöåäóðû îáðàáîòêè ïðåðûâàíèé íå ñîõðàíÿþò íèêàêèõ ðåãèñòðîâ
  4160.   àâòîìàòè÷åñêè, è íèêàêèå ðåãèñòðû ñàìè ïî ñåáå íå çàãðóæàþòñÿ ïåðåä
  4161.   ïåðåäà÷åé óïðàâëåíèÿ îáðàáîò÷èêó ïðåðûâàíèÿ, ñëåäîâàòåëüíî, íà Âàøåé
  4162.   ñîâåñòè ñîõðàíåíèå çíà÷åíèé ðåãèñòðîâ â ñòåêå è ïîñëåäóþùèé èõ âîçâðàò, à
  4163.   òàêæå çàãðóçêà ðåãèñòðà DS íóæíûì çíà÷åíèåì.
  4164.  
  4165.       Âîò ïðèìåð îáðàáîò÷èêà ïðåðûâàíèÿ, êîòîðûé ñîõðàíÿåò çíà÷åíèÿ âñåõ
  4166.   ðåãèñòðîâ è çàãðóæàåò ðåãèñòð DS:
  4167.  
  4168.        interrupt safe_handle ()
  4169.        {
  4170.        $ PUSH DS
  4171.        $ PUSH ES
  4172.        $ PUSHA   // äëÿ âûïîëíåíèÿ ýòîé êîìàíäû íóæåí ïðîöåññîð íå õóæå 80286
  4173.        DS = CS;  // çäåñü DS çàãðóæàåòñÿ äëÿ ðàáîòû ñ ìîäåëüþ ïàìÿòè òèïà tiny
  4174.  
  4175.  
  4176.        /* do your thing here (çäåñü âû äåëàåòå ñâîþ îáðàáîòêó)*/
  4177.  
  4178.        $ POPA   // äëÿ âûïîëíåíèÿ ýòîé êîìàíäû íóæåí ïðîöåññîð íå õóæå 80286
  4179.        $ POP ES
  4180.        $ POP DS
  4181.        }
  4182.  
  4183.       Ïðè çàâåðøåíèè ïðîöåäóðû ïðåðûâàíèÿ áóäåò àâòîìàòè÷åñêè ñãåíåðèðîâàíà
  4184.   èíñòðóêöèÿ âûõîäà èç îáðàáîò÷èêà ïðåðûâàíèÿ - IRET.
  4185. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4186.  
  4187.  
  4188. <h2 id=11.7>
  4189.   11.7 Çàìåíà return íà goto.
  4190. </h2>
  4191.  
  4192.       Â íåêîòîðûõ ñèòóàöèÿõ, ïðè êîìïèëÿöèè ïðîãðàììû, îïåðàòîð <b>return</b>
  4193.   áóäåò çàìåíÿòüñÿ íà <b>goto</b>. Ýòî ïðîèñõîäèò ïðè ðàçðåøåííîé îïòèìèçàöèè ïî
  4194.   ðàçìåðó êîäà äëÿ îïåðàòîðîâ <b>return</b>, êîòîðûå ðàñïîëîæåíû âíóòðè ïðîöåäóðû
  4195.   è, åñòåñòâåííî, åñëè ðàçìåð êîäà äëÿ âûïîëíåíèÿ <b>return</b> áîëüøå, ÷åì ðàçìåð
  4196.   êîäà äëÿ ðåàëèçàöèè <b>goto</b>. Äëÿ äèíàìè÷åñêèõ ïðîöåäóð, êîòîðûå èñïîëüçóþòñÿ
  4197.   êàê ìàêðîñû, òàêàÿ çàìåíà áóäåò ïðîèçâîäèòñÿ âñåãäà. Îïåðàòîð <b>goto</b> áóäåò
  4198.   âûïîëíåí íà êîíåö ïðîöåäóðû, òàì, ãäå áóäåò ðàñïîëàãàòüñÿ åäèíñòâåííûé
  4199.   âûõîä èç ïðîöåäóðû.  äèíàìè÷åñêèõ ïðîöåäóðàõ, èñïîëüçóåìûõ â êà÷åñòâå
  4200.   ìàêðîñîâ, <b>return</b> â êîíöå ïðîöåäóðû áóäåò ïðîïóùåí êîìïèëÿòîðîì.
  4201.  
  4202.       Òàêèì îáðàçîì, ñíÿòî ïîñëåäíåå îãðàíè÷åíèå íà èñïîëüçîâàíèå
  4203.   äèíàìè÷åñêèõ ïðîöåäóð â êà÷åñòâå ìàêðîñîâ. Ëþáàÿ äèíàìè÷åñêàÿ ïðîöåäóðà
  4204.   ìîæåò áûòü èñïîëüçîâàíà êàê ìàêðîñ.
  4205.  
  4206.       Äëÿ îïåðàòîðà <b>goto</b> ñóùåñòâóåò åãî áîëåå êîðîòêèé àíàëîã - <b>GOTO</b>.
  4207.   Äëÿ ïîëó÷åíèÿ áîëåå êîìïàêòíîãî êîäà äëÿ îïåðàòîðà <b>return</b> ââåäåí òàêæå
  4208.   áîëåå êîðîòêèé îïåðàòîð <b>RETURN</b>. Åãî ìîæíî èñïîëüçîâàòü, åñëè îò ìåñòà
  4209.   åãî ïðèìåíåíèÿ äî êîíöà ïðîöåäóðû íàõîäèòñÿ íå áîëåå 128 áàéò. Åñëè Âû
  4210.   áóäåòå èñïîëüçîâàòü <b>RETURN</b> íà áîëüøåì ðàññòîÿíèè äî êîíöà ïðîöåäóðû, òî
  4211.   êîìïèëÿòîð âûäàñò ñîîáùåíèå îá îøèáêå. Ïðè èñïîëüçîâàíèè <b>return</b> íà
  4212.   ðàññòîÿíèè ìåíüøå 128 áàéò äî êîíöà êîäà, êîìïèëÿòîð âûäàñò âàì
  4213.   ïðåäóïðåæäåíèå î âîçìîæíîì èñïîëüçîâàíèè <b>RETURN</b>.
  4214. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4215.  
  4216.  
  4217. <h2 id=11.8>
  4218.   11.8 Âîçâðàùàåìûå çíà÷åíèÿ.
  4219. </h2>
  4220.  
  4221.       Âîçâðàùàåìûå èç ôóíêöèé çíà÷åíèÿ ðàñïîëàãàþòñÿ â ðåãèñòðàõ.  òàáëèöå
  4222.   ïîêàçàíî, êàêîé ðåãèñòð èñïîëüçóåòñÿ äëÿ êàæäîãî èç âîçâðàùàåìûõ òèïîâ:
  4223.  
  4224.       --------------------------------------------
  4225.       | âîçâðàùàåìûé òèï |  èñïîëüçóåìûé ðåãèñòð |
  4226.       --------------------------------------------
  4227.       |        byte      |        AL             |
  4228.       |        word      |        AX             |
  4229.       |        dword     |        EAX            |
  4230.       |        char      |        AL             |
  4231.       |        int       |        AX             |
  4232.       |        long      |        EAX            |
  4233.       |        float     |        EAX            |
  4234.       --------------------------------------------
  4235.  
  4236.       Ñàìûé ïðîñòîé ñïîñîá âåðíóòü çíà÷åíèå èç ôóíêöèè ñîñòîèò â òîì, ÷òîáû
  4237.   èñïîëüçîâàòü êîìàíäó return(), íî âìåñòî ýòîãî ìîæíî íàïðÿìóþ çàãðóçèòü
  4238.   âîçâðàùàåìîå çíà÷åíèå â ñîîòâåòñòâóþùèé ðåãèñòð. Íàïðèìåð, ñëåäóþùèå äâå
  4239.   ôóíêöèè âîçâðàùàþò îäíî è òî æå çíà÷åíèå:
  4240.  
  4241.            byte proc_one ()
  4242.            {
  4243.            return (42);
  4244.            }
  4245.  
  4246.            byte proc_two ()
  4247.            {
  4248.            AL = 42;
  4249.            }
  4250.  
  4251.       Ìíîãèå DOS ôóíêöèè 0x21 ïðåðûâàíèÿ â êà÷åñòâå èíäèêàòîðà óñïåøíîãî
  4252.   âûïîëíåíèÿ èñïîëüçóþò óñòàíîâêó èëè ñáðîñ carry ôëàãà. Èñïîëüçîâàòü ôëàãè
  4253.   ïðîöåññîðà ïðè âîçâðàòå èç ïðîöåäóð ìîæíî è â äðóãèõ ñëó÷àÿõ, êîãäà íàäî
  4254.   èìåòü ñòàòóñ óñïåøíîãî èëè íå óñïåøíîãî âûïîëíåíèÿ ïðîöåäóðû. Ýòî ïîçâîëèò
  4255.   áîëåå ïîëíî èñïîëüçîâàòü âîçìîæíîñòè ïðîöåññîðà è ñîîòâåòñòâåííî óìåíüøèò
  4256.   ðàçìåð êîäà è ïîâûñèò áûñòðîäåéñòâèå ïðîãðàììû.
  4257.  
  4258.       Íàðÿäó ñ ôëàãàìè, ïðè âîçâðàòå èç ïðîöåäóð, ïî ïðåæíåìó îñòàåòñÿ
  4259.   âîçâðàò ðàçëè÷íûõ òèïîâ è ÷åðåç ðåãèñòð <b>AL/AX/EAX</b>. Åñëè äëÿ ïðîöåäóðû
  4260.   îáúÿâëåíî, ÷òî îíà èìååò òèï âîçâðàòà <b>int è CARRYFLAG</b>, òî ïðè èñïîëüçîâàíèè
  4261.   òàêîé ïðîöåäóðû â îïåðàöèÿõ ñðàâíåíèÿ <b>IF, WHILE...</b> áóäåò äåëàòüñÿ ïðîâåðêà
  4262.   carry ôëàãà, à íå ñðàâíåíèå ðåãèñòðà AX. Ïðèìåð èñïîëüçîâàíèÿ âîçâðàòà
  4263.   ôëàãîâ èç ïðîöåäóð:
  4264.  
  4265.   int CARRYFLAG FOPEN();        // îáúÿâëåíèå ïðîöåäóðû
  4266.  
  4267.   void proc()
  4268.   {
  4269.     IF ( FOPEN(name,0) ) Error ( "Not open file" );
  4270.   }
  4271.  
  4272.       Âàðèàíòû äîïóñòèìîãî ñèíòàêñèñà äëÿ èñïîëüçîâàíèÿ âîçâðàòà ôëàãà:
  4273.  
  4274.   IF ( ! FOPEN() )...
  4275.   IF ( @ FOPEN() )...
  4276.   IF ( ! @ FOPEN() )...
  4277.   IF ( handl = FOPEN() )...
  4278.   IF ( handl = @ FOPEN() )...
  4279.   IF ( ! handl = FOPEN() )...
  4280.   IF ( ! handl = @ FOPEN() )...
  4281.  
  4282.       À âîò âàðèàíòû, â êîòîðûõ, íåñìîòðÿ íà òî, ÷òî äëÿ ïðîöåäóðû îáúÿâëåí
  4283.   âîçâðàò ôëàãà, áóäåò ïðîèçâîäèòüñÿ ñðàâíåíèå ðåãèñòðà AX:
  4284.  
  4285.   IF ( FOPEN() == 5 )...        // ïðîèçâîäèòñÿ ñðàâíåíèå
  4286.   IF ( FOPEN() + 2 )...   // ðåçóëüòàò ïðîöåäóðû ïîäâåðãàåòñÿ äàëüíåéøåìó
  4287.                           // âû÷èñëåíèþ, â ðåçóëüòàòå êîòîðîãî ôëàãè áóäóò
  4288.                         // èçìåíåíû.
  4289. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4290.  
  4291.  
  4292. <h2 id=11.9>
  4293.   11.9 Îáúÿâëåíèå ïàðàìåòðîâ â ðåãèñòðîâûõ ïðîöåäóðàõ.
  4294. </h2>
  4295.  
  4296.       Ðàíåå êàæäîìó ïàðàìåòðó ðåãèñòðîâîé ïðîöåäóðû ñîîòâåòñòâîâàë ñòðîãî
  4297.   îïðåäåëåííûé ðåãèñòð. Íàïðèìåð, äëÿ ïåðåìåííûõ òèïà int èëè word ïåðâûé
  4298.   ïàðàìåòð ïåðåäàâàëñÿ ÷åðåç ðåãèñòð AX, 2-é - BX, 3-é - CX, 4-é - DX, 5-é -
  4299.   DI, 6-é - SI. Ïîýòîìó, åñëè Âàì áûëî íåîáõîäèìî ïåðåäàòü òîëüêî îäèí
  4300.   ïàðàìåòð ÷åðåç ðåãèñòð SI, òî ïðèõîäèëîñü ïåðåä íèì ïèñàòü ïÿòü çàïÿòûõ.
  4301.   Âîò êàê, íàïðèìåð, âûãëÿäèò âûçîâ ïðîöåäóðû STRCPY:
  4302.  
  4303.   void main ()
  4304.   {
  4305.     STRCPY ( , , , , #dest, #sourc ) ;
  4306.   }
  4307.  
  4308.       Òåïåðü ðåãèñòðû ìîãóò ðàñïîëàãàòüñÿ ïðè ïåðåäà÷å ïàðàìåòðîâ
  4309.   ïðîèçâîëüíûì îáðàçîì. Íàäî òîëüêî îáúÿâèòü êîìïèëÿòîðó î òîì, êàêîé ðåãèñòð
  4310.   çàêðåïëåí çà êàêèì ïàðàìåòðîì äàííîé ïðîöåäóðû. Ïîñëå òàêîãî îáúÿâëåíèÿ
  4311.   êîìïèëÿòîð áóäåò ñàì ñëåäèòü çà òåì, ÷åðåç êàêîé ðåãèñòð ïåðåäàâàòü
  4312.   ïàðàìåòð ïðîöåäóðå, åãî ðàçìåðíîñòüþ è ÷èñëîì ïåðåäàâàåìûõ ïàðàìåòðîâ. Âîò
  4313.   êàê áóäåò âûãëÿäåòü îáúÿâëåíèå è èñïîëüçîâàíèå ïðîöåäóðû STRCPY:
  4314.  
  4315.   void STRCPY ( DI, SI ) ;      //ýòî îáúÿâëåíèå ïðîöåäóðû
  4316.  
  4317.   void main ()
  4318.   {
  4319.     STRCPY ( #dest, #sourc ) ;  //à ýòî âûçîâ ïðîöåäóðû
  4320.   }
  4321.  
  4322.       Ìîæíî íå äåëàòü îáúÿâëåíèÿ ïðîöåäóðû, à óêàçàòü ðàñïîëîæåíèå ðåãèñòðîâ
  4323.   â çàãîëîâêå ïðîöåäóðû. Íî òîãäà òàêàÿ ïðîöåäóðà äîëæíà âûçûâàòüñÿ òîëüêî
  4324.   ïîñëå åå îïðåäåëåíèÿ. Âîò ïðèìåð ïðîöåäóðû âûâîäÿùåé íà ýêðàí íåñêîëüêî
  4325.   îäèíàêîâûõ ñèìâîëîâ:
  4326.  
  4327.   void PUTNCHAR(AL,CX,BL,BH)
  4328.   /* 1 ïàðàìåòð â AL - êîä ñèìâîëà, êîòîðûé áóäåò âûâåäåí
  4329.      2 ïàðàìåòð â CX - ÷èñëî âûâîäèìûõ ñèìâîëîâ
  4330.      3 ïàðàìåòð â BL - öâåòîâîé àòðèáóò
  4331.      4 ïàðàìåòð â BH - íîìåð âèäåîñòðàíèöû
  4332.   */
  4333.   {
  4334.     AH=9;
  4335.     $INT 0x10
  4336.   }
  4337.  
  4338.       Ïðè îáúÿâëåíèè ðåãèñòðîâîé ïðîöåäóðû ìîæíî òàêæå óêàçûâàòü êàêîé òèï
  4339.   ïåðåìåííîé îæèäàåò ïðîöåäóðà (çíàêîâûé/áåç çíàêîâûé èëè âåùåñòâåííûé). Ïî
  4340.   óìîë÷àíèþ ñ÷èòàåòñÿ áåç çíàêîâûé òèï. Îäíàêî çíàêîâûé òèï óêàçûâàòü åñòü
  4341.   ñìûñë òîëüêî åñëè ïàðàìåòð ïåðåäàåòñÿ ÷åðåç ðåãèñòð <b>AL/AX/EAX</b>. ×åðåç äðóãèå
  4342.   ðåãèñòðû ïåðåìåííàÿ âñåãäà ïåðåäàåòñÿ êàê áåç çíàêîâàÿ. Ïðèìåð îáúÿâëåíèÿ
  4343.   ðåãèñòðîâîé ïðîöåäóðû ñ óêàçàíèåì òèïîâ:
  4344.  
  4345.   int fastcall Exampl( word CX, int AX, DX, float ESI ) ;
  4346.    |    |        |        |         |   |   |
  4347.    |    |        |        |         |   |   |---- 4-é ïàðàì. èìååò òèï float è
  4348.    |    |        |        |         |   |         ïåðåä. ÷åðåç ðåãèñòð ESI.
  4349.    |    |        |        |         |   |-------- 3-é ïàðàì. èìååò ïî óìîë÷.
  4350.    |    |        |        |         |             òèï word è ïåðåä. ÷åðåç DX.
  4351.    |    |        |        |         |------------ 2-é ïàðàì. èìååò òèï int è
  4352.    |    |        |        |                       ïåðåäàåòñÿ ÷åðåç ðåãèñòð AX.
  4353.    |    |        |        |---------------------- 1-é ïàðàì. èìååò òèï word è
  4354.    |    |        |                                ïåðåäàåòñÿ ÷åðåç ðåãèñòð CX.
  4355.    |    |        |------------------------------- Èìÿ îáúÿâëÿåìîé ïðîöåäóðû.
  4356.    |    |---------------------------------------- Ìîäèôèêàòîð, óêàçûâàþùèé, ÷òî
  4357.    |                                              ýòà ïðîö. ÿâë. ðåãèñòðîâîé.
  4358.    |--------------------------------------------- Ïðîöåäóðà âîçâðàùàåò ïåðåìåí.
  4359.                                                                           òèïà int.
  4360.  
  4361.       Åñëè Âû ñäåëàëè îáúÿâëåíèå ðåãèñòðîâ ïðîöåäóðû, òî êîìïèëÿòîð áóäåò
  4362.   ñòðîãî ñëåäèòü çà êîëè÷åñòâîì óêàçàííûõ ïàðàìåòðîâ ïðè âûçîâå ýòîé
  4363.   ïðîöåäóðû è âûäàâàòü ñîîáùåíèÿ îá îøèáêå, åñëè èõ áóäåò ìåíüøå èëè áîëüøå.
  4364.   Ñ îäíîé ñòîðîíû ýòî õîðîøî - åñòü êîíòðîëü çà òåì, ÷òî Âû íè÷åãî íå çàáûëè
  4365.   èëè íå äîáàâèëè ëèøíåãî ïðè âûçîâå ïðîöåäóðû. Ñ äðóãîé ñòîðîíû èíîãäà
  4366.   áûâàþò íåîáÿçàòåëüíûå ïàðàìåòðû, à èõ òåïåðü ïðèäåòñÿ ïðîïèñûâàòü. Íî åñëè
  4367.   Âû ïðè âûçîâå ïðîöåäóðû íå óêàæåòå íè îäíîãî ïàðàìåòðà, òî êîìïèëÿòîð íå
  4368.   áóäåò Âàì âûäàâàòü ñîîáùåíèå îá îøèáêå.  Ýòî äàåò Âàì âîçìîæíîñòü
  4369.   ïðîèíèöèàëèçèðîâàòü ðåãèñòðû, ÷åðåç êîòîðûå Âû ïåðåäàåòå ïàðàìåòðû, âíå
  4370.   âûçîâà ïðîöåäóðû.  Íî åñëè Âû óêàæåòå, õîòü îäèí ïàðàìåòð, òî Âàì ïðèäåòñÿ
  4371.   óêàçûâàòü è îñòàëüíûå, èíà÷å êîìïèëÿòîð áóäåò ñ÷èòàòü, ÷òî Âû èõ ñëó÷àéíî
  4372.   ïðîïóñòèëè è âûäàñò ñîîáùåíèå îá îøèáêå.
  4373.  
  4374.       Åñëè Âû íå îáúÿâèëè ðåãèñòðû íè ïðè îáúÿâëåíèè ðåãèñòðîâîé ïðîöåäóðû,
  4375.   íè â çàãîëîâêå ñàìîé ïðîöåäóðû, òî êîìïèëÿòîð áóäåò ñ÷èòàòü, ÷òî ïàðàìåòðû
  4376.   â ýòó ïðîöåäóðó ïåðåäàþòñÿ ñòàðûì ñïîñîáîì. Òàêèì îáðàçîì, äîñòèãàåòñÿ
  4377.   ïîëíàÿ ñîâìåñòèìîñòü ñ ïðåäûäóùèìè âåðñèÿìè êîìïèëÿòîðà.
  4378. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4379.  
  4380.  
  4381. <h2 id=11.10>
  4382.   11.10 Îáúÿâëåíèå ïàðàìåòðîâ â ñòåêîâûõ ïðîöåäóðàõ.
  4383. </h2>
  4384.  
  4385.       Êàê èçâåñòíî, ðàíåå â C-- êîíòðîëü çà ÷èñëîì è òèïîì ïåðåäàâàåìûõ
  4386.   ïðîöåäóðå ïàðàìåòðîâ âîçëàãàëñÿ íà ïðîãðàììèñòà. Ïîýòîìó âîçíèêëà íåïðîñòàÿ
  4387.   çàäà÷à, ñîâìåñòèòü îäíîâðåìåííî îòñóòñòâèå êîíòðîëÿ çà ïàðàìåòðàìè (äëÿ
  4388.   ñîâìåñòèìîñòè ñ ïðåäûäóùèìè âåðñèÿìè) è åå íàëè÷èå.  ðåçóëüòàòå
  4389.   êîìïðîìèññîâ ïîÿâèëñÿ âàðèàíò íåìíîãî îòëè÷àþùèéñÿ îò òðàäèöèîííî ïðèíÿòîãî
  4390.   â ÿçûêàõ C.
  4391.  
  4392.       Ãëàâíîå îòëè÷èå - ýòî òî, ÷òî ïàðàìåòðû, îïðåäåëÿåìûå ïðè îïðåäåëåíèè
  4393.   ïðîöåäóðû, íå áóäóò âîñïðèíèìàòüñÿ êîìïèëÿòîðîì äëÿ êîíòðîëÿ çà íèìè. Âî
  4394.   âñåõ ÿçûêàõ C äîïóñêàåòñÿ ñîâìåùåíèå ïðîòîòèïà ïðîöåäóðû è åå îáúÿâëåíèÿ.
  4395.    C-- äëÿ òîãî, ÷òîáû âêëþ÷èëñÿ êîíòðîëü çà ïàðàìåòðàìè ñòåêîâîé ïðîöåäóðû,
  4396.   íàäî ýòó ïðîöåäóðó îáÿçàòåëüíî îáúÿâèòü. Íî íå âñÿêîå îáúÿâëåíèå ïðîöåäóðû
  4397.   áóäåò ñèãíàëîì êîìïèëÿòîðó î âêëþ÷åíèè êîíòðîëÿ çà ïàðàìåòðàìè ýòîé
  4398.   ïðîöåäóðû. Åñëè ïðè îáúÿâëåíèè â êðóãëûõ ñêîáêàõ íè÷åãî íå áóäåò, òî
  4399.   êîìïèëÿòîð íå áóäåò îòñëåæèâàòü ïàðàìåòðû, ïåðåäàâàåìûå ýòîé ïðîöåäóðå. Â
  4400.   C++ òàêîå îáúÿâëåíèå îçíà÷àåò, ÷òî ïðîöåäóðå íå ïåðåäàþòñÿ íèêàêèå
  4401.   ïàðàìåòðû. Â C-- äëÿ ýòîãî íàäî ïðè îáúÿâëåíèè ïðîöåäóðû â êðóãëûõ ñêîáêàõ
  4402.   îáÿçàòåëüíî íàïèñàòü void. Íàïðèìåð:
  4403.  
  4404.   int proc ( void ) ;
  4405.  
  4406.       Âñòðåòèâ òàêîå îáúÿâëåíèå ïðîöåäóðû, êîìïèëÿòîð áóäåò ñëåäèòü çà òåì,
  4407.   ÷òîáû ýòîé ïðîöåäóðå íå áûëè ïåðåäàíû ïàðàìåòðû.
  4408.  
  4409.       Ïðè îáúÿâëåíèè ïðîöåäóðû èìåíà ïàðàìåòðîâ ìîæíî îïóñêàòü. Êàê èçâåñòíî,
  4410.   â C-- ïàðàìåòðû ïðîöåäóðû îäíîãî òèïà çàïèñûâàþòñÿ ÷åðåç çàïÿòóþ. Äëÿ ñìåíû
  4411.   òèïà èñïîëüçóþò òî÷êó ñ çàïÿòîé. Ïðè îáúÿâëåíèè ñìåíó òèïà ìîæíî
  4412.   ïðîèçâîäèòü è ïîñëå çàïÿòîé:
  4413.  
  4414.   void ptoc ( int a, b, c; word d );
  4415.   void proc ( int, int, int, word );
  4416.   void proc ( int, int, int; word );
  4417.  
  4418.       Âñå ýòè ïðèìåðû îáúÿâëåíèé ÿâëÿþòñÿ èäåíòè÷íûìè è äîïóñòèìûìè.
  4419.  
  4420.       Äëÿ êîíòðîëÿ çà ïðîöåäóðàìè ñ ïåðåìåííûì ÷èñëîì ïàðàìåòðîâ áûë ââåäåí
  4421.   íîâûé äëÿ C-- ýëåìåíò ñèíòàêñèñà - ìíîãîòî÷èå èëè åãî åùå íàçûâàþò ýëëèïñ.
  4422.   Âîò êàê áóäåò âûãëÿäåòü îáúÿâëåíèå ïðîöåäóðû printf:
  4423.  
  4424.   void cdecl printf ( word, ... );
  4425. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4426.  
  4427.  
  4428. <h2 id=11.11>
  4429.   11.11 Èñïîëüçîâàíèå ìàêðîêîìàíä.
  4430. </h2>
  4431.  
  4432.       Òåïåðü ëþáàÿ äèíàìè÷åñêàÿ ïðîöåäóðà ìîæåò áûòü èñïîëüçîâàíà êàê ìàêðîñ.
  4433.   Åñëè ïåðåä âûçîâîì äèíàìè÷åñêîé ïðîöåäóðû ïîñòàâèòü ñèìâîë <b>@</b>, òî êîä ýòîé
  4434.   ïðîöåäóðû áóäåò âñòàâëåí, à íå âûçâàí èíñòðóêöèåé CALL.
  4435.  
  4436.       Ïðè èñïîëüçîâàíèè ñòåêîâûõ äèíàìè÷åñêèõ ïðîöåäóð â êà÷åñòâå ìàêðîñîâ
  4437.   î÷èñòêà ñòåêà îò ïåðåäàííûõ ïàðàìåòðîâ ïðîèçâîäèòñÿ àññåìáëåðíîé
  4438.   èíñòðóêöèåé <b>ADD SP,SIZE_PARAMETRS</b> ñðàçó ïîñëå îêîí÷àíèÿ êîäà âñòàâëåííîãî
  4439.   ìàêðîñà. Ïîýòîìó, åñëè ýòà ïðîöåäóðà èñïîëüçîâàëà ôëàãè â êà÷åñòâå
  4440.   âîçâðàòà, òî îíè áóäóò ðàçðóøåíû.
  4441. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4442.  
  4443.  
  4444. <h2 id=11.12>
  4445.   11.12 Ïåðåäà÷à ïàðàìåòðîâ â ñòåêîâûå ïðîöåäóðû ÷åðåç ðåãèñòðû.
  4446. </h2>
  4447.  
  4448.       Ïðè ïåðåäà÷å ïàðàìåòðîâ ÷åðåç ðåãèñòðû, ÷àùå âñåãî ïîëó÷àåòñÿ áîëåå
  4449.   êîìïàêòíûé è áûñòðûé êîä. Íî ñîäåðæèìîå ðåãèñòðîâ ìîæåò áûòü ëåãêî
  4450.   ðàçðóøåíî. Åñëè â Âàøåé ïðîöåäóðå, êàêîé-òî èç ïàðàìåòðîâ èñïîëüçóåòñÿ
  4451.   îäíîêðàòíî äëÿ òîãî, ÷òîáû â íà÷àëå ïðîöåäóðû èíèöèàëèçèðîâàòü êàêîé-òî
  4452.   ðåãèñòð, òî Âû ìîæåòå ïåðåäàòü ýòî çíà÷åíèå â ïðîöåäóðó ñðàçó ÷åðåç
  4453.   ðåãèñòð, ìèíóÿ ñòàäèþ çàñîâûâàíèÿ è èçâëå÷åíèÿ ñîäåðæèìîãî â ñòåê. Ïðèìåð:
  4454.  
  4455.   int proc (int param1, param2, param3)
  4456.   {
  4457.     (E)BX = param3;
  4458.     (E)BX.TEG_STRUCT.var = proc2 (param1,papra2);
  4459.     proc3 (param1,param2);
  4460.   }
  4461.  
  4462.       Â ýòîì ïðèìåðå ïàðàìåòð param3 èñïîëüçóåòñÿ ëèøü äëÿ òîãî, ÷òîáû
  4463.   èíèöèàëèçèðîâàòü ðåãèñòð (E)BX, ïîýòîìó åãî ìîæíî ñðàçó ïåðåäàòü ÷åðåç
  4464.   ðåãèñòð:
  4465.  
  4466.   int proc (int param1, param2, (E)BX)
  4467.   {
  4468.     (E)BX.TEG_STRUCT.var = proc2 (param1,papra2);
  4469.     proc3 (param1,param2);
  4470.   }
  4471.  
  4472.       Êàê Âû âèäèòå, ïðîöåäóðà íåìíîãî óïðîñòèëàñü.
  4473.  
  4474.       Â ïðèíöèïå, ïîðÿäîê ðàñïîëîæåíèÿ ñòåêîâûõ è ðåãèñòðîâûõ ïàðàìåòðîâ íå
  4475.   ïðèíöèïèàëåí. Íî íàäî ïîìíèòü, ÷òî ñîäåðæèìîå ðåãèñòðîâ ìîæåò áûòü ëåãêî
  4476.   ðàçðóøåíî, è ïîýòîìó ëó÷øå âñåãî ðåãèñòðîâûå ïàðàìåòðû èíèöèàëèçèðîâàòü
  4477.   ëèøü ïîñëå òîãî, êàê áûëè çàñóíóòû â ñòåê âñå ñòåêîâûå ïàðàìåòðû. Äëÿ
  4478.   ïðîöåäóð òèïà <b>pascal</b> ðåãèñòðîâûå ïàðàìåòðû ëó÷øå ðàñïîëàãàòü ïîñëå
  4479.   ñòåêîâûõ ïàðàìåòðîâ. Äëÿ ïðîöåäóð òèïà <b>cdecl è stdcall</b> ñíà÷àëà ëó÷øå
  4480.   ðàñïîëàãàòü ðåãèñòðîâûå ïàðàìåòðû.
  4481. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4482.  
  4483.  
  4484. <h2 id=11.13>
  4485.   11.13 Âûçîâ ïðîöåäóð ñ àäðåñîì â ðåãèñòðå.
  4486. </h2>
  4487.  
  4488.       Â C-- äîïóñòèìî äåëàòü âûçîâ ïðîöåäóðû, àäðåñ êîòîðîé íàõîäèòñÿ â
  4489.   ðåãèñòðå. Ïàðàìåòðû äëÿ òàêîãî âûçîâà ïåðåäàþòñÿ òîëüêî ÷åðåç ñòåê. Òèï
  4490.   âûçîâà ïðîöåäóðû äëÿ ïðîãðàìì ïîä Windows <b>stdcall</b>, äëÿ îñòàëüíûõ <b>pascal</b>.
  4491.   Àäðåñ ïðîöåäóðû äëÿ 32-áèòíûõ ïðîãðàìì äîëæåí íàõîäèòñÿ â 32-áèòíîì
  4492.   ðåãèñòðå, à äëÿ 16-áèòíûõ ïðîãðàìì â 16-áèòíîì ðåãèñòðå. Ñ÷èòàåòñÿ, ÷òî
  4493.   òàêîé âûçîâ èìååò âîçâðàò òèïà <b>unsigned int</b>. Ïðèìåð:
  4494.  
  4495.     BX = # proc;
  4496.     BX (a);
  4497.     IF ( BX(b) == 0 ) AX=2;
  4498.  
  4499.     Âû ïîëó÷èòå ñëåäóþùèé êîä:
  4500.  
  4501.   test.c-- 8: BX=#proc;
  4502.   0104 BB1A01                   mov     bx,11Ah
  4503.  
  4504.   test.c-- 9: BX(a);
  4505.   0107 FF76FC                   push    word ptr [bp-4]
  4506.   010A FFD3                     call    near bx
  4507.  
  4508.   test.c-- 10: IF (BX(b) == 0)AX=2;
  4509.   010C FF76FE                   push    word ptr [bp-2]
  4510.   010F FFD3                     call    near bx
  4511.   0111 85C0                     test    ax,ax
  4512.   0113 7503                     jne     118h
  4513.   0115 B80200                   mov     ax,2
  4514. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4515.  
  4516.  
  4517. <h2 id=11.14>
  4518.   11.14 Âñòðîåííûå â êîìïèëÿòîð ïðîöåäóðû.
  4519. </h2>
  4520.  
  4521.       Äëÿ íåêîòîðûõ ïðîöåäóð Âû íå íàéäåòå èõ èñõîäíûå òåêñòû â áèáëèîòåêàõ
  4522.   êîìïèëÿòîðà. Êîä ýòèõ ïðîöåäóð ãåíåðèðóåò êîìïèëÿòîð. Âîò ñïèñîê ýòèõ
  4523.   ïðîöåäóð:
  4524.  
  4525.   ABORT             Ïðåêðàùåíèå âûïîëíåíèÿ ïðîãðàììû
  4526.   atan              Âû÷èñëèòü àðêòàíãåíñ ÷èñëà
  4527.   atan2             Âû÷èñëèòü àðêòàíãåíñ ÷èñëà
  4528.   ATEXIT            Çàðåãèñòðèðîâàòü ôóíêöèþ âûïîëíÿþùóþñÿ ïðè âûõîäå.
  4529.   cos               Âîçâðàùàåò êîñèíóñ óãëà
  4530.   EXIT              Çàêîí÷èòü ïðîãðàììó ñ êîäîì îøèáêè
  4531.   exp               Âîçâðàùàåò ýêñïîíåíòó ÷èñëà
  4532.   inp/inportb       Ñ÷èòàòü îäèí áàéò èç ïîðòà
  4533.   inport            Ñ÷èòàòü ñëîâî èç ïîðòà
  4534.   inportd           Ñ÷èòàòü äâîéíîå ñëîâî èç ïîðòà
  4535.   fabs              Âîçâðàùàåò àáñîëþòíîå çíà÷åíèå ÷èñëà
  4536.   log               Âû÷èñëÿåò íàòóðàëüíûé ëîãàðèôì ÷èñëà
  4537.   log10             Âû÷èñëÿåò äåñÿòè÷íûé ëîãàðèôì ÷èñëà
  4538.   outp/outportb     Çàïèñàòü îäèí áàéò â ïîðò
  4539.   outport           Çàïèñàòü ñëîâî â ïîðò
  4540.   outportd          Çàïèñàòü äâîéíîå ñëîâî â ïîðò
  4541.   sin               Âîçâðàùàåò ñèíóñ óãëà
  4542.   sqrt              Èçâëå÷ü êâàäðàòíûé êîðåíü ÷åðåç FPU.
  4543.   tan               Âîçâðàùàåò òàíãåíñ óãëà
  4544.  
  4545.       Ðàçìåùåíèå ýòèõ ïðîöåäóð íåïîñðåäñòâåííî â êîìïèëÿòîðå, ñâÿçàíî ñ òåì,
  4546.   ÷òî â íàñòîÿùèé ìîìåíò êîìïèëÿòîð ìîæåò òàêèì îáðàçîì ãåíåðèðîâàòü áîëåå
  4547.   ýôôåêòèâíûé êîä, ÷åì åñëè áû ýòè ïðîöåäóðû ðàñïîëàãàëèñü â áèáëèîòåêàõ.
  4548.   Â áóäóùåì, ïî ìåðå ðàçâèòèÿ êîìïèëÿòîðà, ýòè ïðîöåäóðû ïîñòåïåííî áóäóò
  4549.   âûíîñèòñÿ èç êîìïèëÿòîðà â áèáëèîòåêè.
  4550.  
  4551.       Íî íè÷òî íå ìåøàåò Âàì óæå ñåé÷àñ íàïèñàòü ñâîè îäíîèìåííûå
  4552.   áèáëèîòå÷íûå ïðîöåäóðû. Âñòðåòèâ îïðåäåëåíèå òàêîé ïðîöåäóðû, êîìïèëÿòîð íå
  4553.   áóäåò âûäàâàòü íèêàêèõ ñîîáùåíèå, îí ïðîñòî áóäåò ïðèìåíÿòü Âàø âàðèàíò
  4554.   ïðîöåäóðû.
  4555. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4556.  
  4557.  
  4558. <h2 id=11.14.1>
  4559.     11.14.1 Ïðîöåäóðû ABORT, ATEXIT è EXIT.
  4560. </h2>
  4561.  
  4562.         Ïðîöåäóðû <b>ABORT è EXIT</b> ñâÿçàíû ñ ðàáîòîé äèðåêòèâû <b>#atexit</b> è
  4563.     ïðîöåäóðîé <b>ATEXIT</b>. Íàèáîëåå îïòèìàëüíóþ èõ ðåàëèçàöèþ è âçàèìíóþ
  4564.     èíòåãðàöèþ ìîæåò ñäåëàòü òîëüêî êîìïèëÿòîð. Èìåííî ïîýòîìó ýòè ïðîöåäóðû
  4565.     ïîääåðæèâàþòñÿ êîìïèëÿòîðîì.
  4566.  
  4567.         Ïðîöåäóðà <b>ATEXIT</b> - ðåãèñòðîâàÿ ïðîöåäóðà, êîòîðàÿ ðåãèñòðèðóåò
  4568.     ôóíêöèþ, àäðåñ êîòîðîé ïåðåäàåòñÿ åé â êà÷åñòâå ïàðàìåòðà, ò.å. ÷åðåç
  4569.     ðåãèñòð (E)AX, êàê ôóíêöèþ çàâåðøåíèÿ ïðîãðàììû. Ïðè óñïåøíîé ðåãèñòðàöèè
  4570.     <b>ATEXIT</b> âîçâðàùàåò 0. Âñåãî ìîæíî çàðåãèñòðèðîâàòü äî 16 ôóíêöèé.
  4571.  
  4572.         Çàâåðøàþùèå ôóíêöèè íå äîëæíû èìåòü ïàðàìåòðîâ è âîçâðàòà. Ýòè
  4573.     ôóíêöèè áóäóò âûïîëíÿòüñÿ â ïîðÿäêå îáðàòíîì î÷åðåäíîñòè ðåãèñòðàöèè â
  4574.     ñëó÷àå, åñëè Âû áóäåòå çàâåðøàòü ðàáîòó ïðîãðàììû ÷åðåç âûçîâû ïðîöåäóð
  4575.     <b>ABORT</b> èëè <b>EXIT</b> èëè çàêîí÷èòñÿ ðàáîòà ïðîöåäóðû <b>main</b>. Åñëè Âû
  4576.     çàâåðøèòå ðàáîòó ïðîãðàììû âûçîâîì ïðîöåäóðû <b>ExitProcess</b> ïîä Windows èëè
  4577.     âûçîâîì <b>AH=0x4C; $int 0x21</b> ïîä DOS, âûõîä èç ïðîãðàììû ïðîèçîéäåò áåç
  4578.     çàïóñêà çàðåãèñòðèðîâàííûõ ôóíêöèé.
  4579.  
  4580.         Ïðîöåäóðà <b>ABORT è EXIT</b>, åñëè íå âêëþ÷åíà äèðåêòèâà <b>#atexit</b> äåëàþò
  4581.     âûçîâ ïðîöåäóðû <b>ExitProcess</b> ïîä Windows è âûçîâ <b>AH=0x4C; $int 0x21</b> ïîä
  4582.     DOS.  Ïðîöåäóðå <b>ABORT</b> íå ïåðåäàþòñÿ íèêàêèå ïàðàìåòðû, è îíà çàâåðøàåò
  4583.     ðàáîòó ïðîãðàììû ñ êîäîì âîçâðàòà 0. Ïðîöåäóðå <b>EXIT</b> ïåðåäàåòñÿ â
  4584.     êà÷åñòâå ïàðàìåòðà êîä âîçâðàòà, ñ êîòîðûì îíà è çàâåðøàåò ðàáîòó
  4585.     ïðîãðàììû.
  4586. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4587.  
  4588.  
  4589. <h2 id=11.14.2>
  4590.     11.14.2 Ïðîöåäóðû inp/inportb, inport, inportd, outp/outportb, outport è
  4591.                                                                     outportd
  4592. </h2>
  4593.  
  4594.         Ýòè ïðîöåäóðû âñåãäà âñòàâëÿþòñÿ â êîä êàê ìàêðîñû, ò.å. äëÿ ýòèõ
  4595.     ïðîöåäóð íèêîãäà íå ãåíåðèðóåòñÿ âûçîâ ïðîöåäóðû. Â çàâèñèìîñòè îò
  4596.     çíà÷åíèÿ ïîðòà, ñ êîòîðûì ðàáîòàþò ýòè ïðîöåäóðû, ãåíåðèðóåòñÿ ðàçíûé
  4597.     êîä. Âñå ýòî ïîçâîëÿåò ïîëó÷àòü áîëåå êîìïàêòíûé êîä.
  4598.  
  4599.         Ïðîöåäóðû ÷òåíèÿ èç ïîðòà èìåþò òàêîé ïðîòîòèï:
  4600.  
  4601.     byte inp ( word port );
  4602.     word inport ( word port );
  4603.     dword inportd ( word port );
  4604.  
  4605.         Ïðîöåäóðû çàïèñè â ïîðò èìåþò òàêîé ïðîòîòèï:
  4606.  
  4607.     void outp ( byte val; word port );
  4608.     void outport ( word val; word port );
  4609.     void outportd ( dword val; word port );
  4610.  
  4611.         Èìåíà ïðîöåäóð inp è inportb, òàêæå êàê è èìåíà outp è outportb
  4612.     ÿâëÿþòñÿ ñèíîíèìàìè.
  4613. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4614.  
  4615.  
  4616. <h2 id=11.14.3>
  4617.     11.14.3 Ïðîöåäóðû äëÿ ðàáîòû ñ âåùåñòâåííûìè ÷èñëàìè.
  4618. </h2>
  4619.  
  4620.         Ýòè ïðîöåäóðû ðåàëèçóþòñÿ êîìïèëÿòîðîì è âñåãäà âñòàâëÿþòñÿ â êîä êàê
  4621.     ìàêðîñû, ò.å. äëÿ íèõ íèêîãäà íå ãåíåðèðóåòñÿ âûçîâ ïðîöåäóðû. Êðîìå
  4622.     ýòîãî, åñëè ïàðàìåòðîì îäíîé ïðîöåäóðû ÿâëÿåòñÿ âûçîâ äðóãîé, òî
  4623.     ðåçóëüòàò ðàáîòû âòîðîé ïðîöåäóðû îñòàåòñÿ â ñòåêå FPU, à ïåðâàÿ
  4624.     ïðîöåäóðà èñïîëüçóåò ýòîò ðåçóëüòàò íåïîñðåäñòâåííî èç ñòåêà. Òàêèì
  4625.     îáðàçîì ïîëó÷àþòñÿ áîëåå êîìïàêòíûé êîä. Âîò âûìûøëåííûé ïðèìåð:
  4626.  
  4627.     test.c-- 7: f = sin( sqrt(1) );
  4628.     0100 D9061C01                 fld     [11Ch]
  4629.     0104 D9FA                     fsqrt
  4630.     0106 D9FE                     fsin
  4631.     0108 D91E2001                 fstp    [120h]
  4632.     010C 9B                       fwait
  4633.  
  4634.         Ýòè ïðîöåäóðû èìåþò ñëåäóþùèé ïðîòîòèï:
  4635.  
  4636.     float atan ( float val );
  4637.     float atan ( float val, val2 );
  4638.     float cos ( float val );
  4639.     float exp ( float val );
  4640.     float fabs ( float val );
  4641.     float log ( float val );
  4642.     float log10 ( float val );
  4643.     float sin ( float val );
  4644.     float sqrt ( float val );
  4645.     float tan ( float val );
  4646. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4647.  
  4648.  
  4649. <h2 id=11.15.1>
  4650.   11.15 Êëàññû.
  4651.  
  4652.     11.15.1 Îáúÿâëåíèå ïðîöåäóð â ñòðóêòóðàõ.
  4653. </h2>
  4654.  
  4655.         Ñ ââåäåíèå ïîääåðæêè îáúÿâëåíèÿ ïðîöåäóð â ñòðóêòóðàõ, ñòðóêòóðà
  4656.     ñòàíîâèòñÿ ïîäîáíîé êëàññó â C++. Ò.å. òàêàÿ ïðîöåäóðà ñòàíîâèòñÿ ìåòîäîì
  4657.     êëàññà. Ïðèìåð:
  4658.  
  4659.     struct Point  // îáúÿâëåíèå êëàññà
  4660.     {
  4661.         int x; // ýëåìåíòû äàííûõ
  4662.         int y; // êëàññà òèïà Point
  4663.         void SetX(int);  // îáúÿâëåíèå ìåòîäîâ
  4664.         void SetY(int);  // êëàññà Point
  4665.     };
  4666.  
  4667.     void Point::SetX(int _x)  //îïðåäåëåíèå ïðîöåäóðû êëàññà Point
  4668.     {
  4669.         IF((_x>=0)&&(_x<=MAX_X)) x=_x;
  4670.     // ïåðåìåííûå x, y ÿâëÿþòñÿ ÷ëåíàìè ýòîãî êëàññà è ïîýòîìó äîñòóï ê íèì èç
  4671.     // ïðîöåäóð ýòîãî æå êëàññà îñóùåñòâëÿåòñÿ íàïðÿìóþ.
  4672.      }
  4673.  
  4674.     void main()
  4675.     Point p;  //îïðåäåëÿåì ñòðóêòóðó â ñòåêå
  4676.     {
  4677.       p.y = p.x = 0;
  4678.       p.SetX(1);
  4679.     }
  4680.  
  4681.         Ïðè âûçîâå ïðîöåäóðû ÿâëÿþùåéñÿ ìåòîäîì êëàññà åé íåÿâíûì îáðàçîì
  4682.     ïåðåäàåòñÿ àäðåñ ýòîãî êëàññà (ñòðóêòóðû). Â ñàìîé ïðîöåäóðå ýòîò àäðåñ
  4683.     äîñòóïåí ÷åðåç èìÿ ïàðàìåòðè÷åñêîé ïåðåìåííîé <b>this</b>. Ýòó ïåðåìåííóþ
  4684.     àâòîìàòè÷åñêè ãåíåðèðóåò êîìïèëÿòîð. Åñëè â îáúÿâëåíèå ïðîöåäóðû â
  4685.     ñòðóêòóðå óêàçàòü êëþ÷åâîå ñëîâî <b>static</b>, òî òàêîé ïðîöåäóðå àäðåñ
  4686.     êëàññà íå ïåðåäàåòñÿ è ïåðåìåííàÿ <b>this</b> íå ãåíåðèðóåòñÿ.
  4687.  
  4688.         Ïðîöåäóðà îáúÿâëåííàÿ â ñòðóêòóðå ìîæåò áûòü äèíàìè÷åñêîé. Äëÿ ýòîãî,
  4689.     ïðè åå îïðåäåëåíèè, â ñàìîì åå íà÷àëå, íàäî íàïèñàòü ñèìâîë äâîåòî÷èÿ <b>:</b>
  4690.     (òàêæå êàê è äëÿ îáû÷íûõ äèíàìè÷åñêèõ ïðîöåäóð). Íî òàêàÿ äèíàìè÷åñêàÿ
  4691.     ïðîöåäóðà íå ìîæåò áûòü èñïîëüçîâàíà êàê ìàêðîñ.
  4692. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4693.  
  4694.  
  4695. <h2 id=11.15.2>
  4696.     11.15.2 Íàñëåäîâàíèå.
  4697. </h2>
  4698.  
  4699.         Â C-- ïîääåðæèâàþòñÿ ïðîñòûå è ìíîæåñòâåííûå íàñëåäîâàíèÿ. Îáúÿâëåíèå
  4700.     ñòðóêòóðû ñ íàñëåäîâàíèåì èìååò ñëåäóþùèé ñèíòàêñèñ:
  4701.  
  4702.     struct Derived : Base1, Base2, ... Basen
  4703.     {
  4704.       int x0;
  4705.     };
  4706.  
  4707.         ×èñëî áàçîâûõ ñòðóêòóð â ïðîèçâîäíîì íå îãðàíè÷åíî. Ïðè ìíîæåñòâåííîì
  4708.     íàñëåäîâàíèè ñòðóêòóðà ìîæåò íàñëåäîâàòü äâà è áîëåå ýêçåìïëÿðà áàçîâîé
  4709.     ñòðóêòóðû. Ïðè ýòîì âîçíèêàåò íåîäíîçíà÷íîñòü. Ïðèìåð:
  4710.  
  4711.     struct A
  4712.     {
  4713.       int x,y;
  4714.       . . .
  4715.     };
  4716.  
  4717.     struct B : A  //ñòðóêòóðà <b>B</b> íàñëåäóåò <b>A</b>
  4718.     {
  4719.       . . .
  4720.  
  4721.     };
  4722.  
  4723.     struct C : A  //ñòðóêòóðà <b>C</b> íàñëåäóåò <b>A</b>
  4724.     {
  4725.       . . .
  4726.     };
  4727.  
  4728.     struct D : B, C //ñòðóêòóðà <b>D</b> íàñëåäóåò <b>B è C</b>
  4729.     {
  4730.       . . .
  4731.     };
  4732.  
  4733.     void main()
  4734.     D d;  //âûäåëÿåì äëÿ ñòðóêòóðû <b>D</b> ïàìÿòü â ñòåêå è ïðèñâàèâàåì åé èìÿ <b>d</b>
  4735.     {
  4736.       d.x0=0;
  4737.  
  4738.         Â ýòîì ïðèìåðå ñòðóêòóðà <b>D</b> íàñëåäóåò äâà ýêçåìïëÿðà ñòðóêòóðû <b>A</b> è
  4739.     â íåé íàõîäÿòñÿ äâà ýëåìåíòà ñ èìåíåì <b>x0</b>. Êîìïèëÿòîðû C++ ïðè çàïèñè
  4740.     òèïà <b>d.x0=0</b> âûäàþò ñîîáùåíèå îá îøèáêå. C-- ýòó çàïèñü îáðàáàòûâàåò,
  4741.     ïðèñâàèâàíèå ïðîèçâîäèòñÿ ïî óìîë÷àíèþ â ýëåìåíò èç ïîñëåäíåé áàçîâîé
  4742.     ñòðóêòóðû, èìåþùåé ýëåìåíò <b>x0</b>. Äëÿ òîãî ÷òîáû ïîëó÷èòü äîñòóï êî
  4743.     âòîðîìó ýëåìåíòó <b>x0</b> (ôèçè÷åñêè ýòîò ýëåìåíò íàõîäèòñÿ â ñòðóêòóðå
  4744.     ïåðâûì), íåîáõîäèìî ïðèìåíèòü îïåðàöèþ ðàçðåøåíèÿ âèäèìîñòè:
  4745.  
  4746.       d.B::x0=0;
  4747.  
  4748.         Èç âñåãî ýòîãî ñëåäóåò, ÷òî çàïèñè:
  4749.  
  4750.       d.x0=0;
  4751.     è
  4752.       d.C::x0=0;
  4753.  
  4754.          ÿâëÿþòñÿ ðàâíîçíà÷íûìè.
  4755. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4756.  
  4757.  
  4758. <h2 id=11.15.3>
  4759.     11.15.3 Íàñëåäîâàíèå ïðîöåäóð.
  4760. </h2>
  4761.  
  4762.         Åñëè â áàçîâîì êëàññå åñòü ïðîöåäóðà, à â ïðîèçâîäíîì êëàññå Âû ýòó
  4763.     ïðîöåäóðó ïåðåîïðåäåëèëè, òî ýòà ïðîöåäóðà áóäåò ïåðåîïðåäåëåíà è â
  4764.     áàçîâîì êëàññå. Òàêèì îáðàçîì ïðîöåäóðà îïðåäåëåííàÿ â áàçîâîì êëàññå
  4765.     áóäåò ïîòåðÿíà. Ïðèìåð:
  4766.  
  4767.     struct Point  // áàçîâûé êëàññ
  4768.     {
  4769.         int x; // ýëåìåíòû äàííûõ
  4770.         int y; // êëàññà òèïà Point
  4771.         void SetX(int);  // îáúÿâëåíèå ìåòîäîâ
  4772.         void SetY(int);  // êëàññà Point
  4773.     };
  4774.  
  4775.     void Point::SetX(int _x)  // îïðåäåëåíèå ïðîöåäóðû êëàññà Point
  4776.     {
  4777.         IF((_x>=0)&&(_x<=MAX_X)) x=_x;
  4778.     }
  4779.  
  4780.     struct Point2 : Point  // ïðîèçâîäíûé êëàññ
  4781.     {
  4782.       int x2;
  4783.     }
  4784.  
  4785.     struct Point3 : Point  // åùå îäèí ïðîèçâîäíûé êëàññ
  4786.     {
  4787.       int z;
  4788.     }
  4789.  
  4790.     void Point3::SetX(int _x)  // â ýòîì ïðîèçâîäíîì êëàññå ïåðåîïðåäåëÿåì
  4791.     {                          // ïðîöåäóðó SetX
  4792.         IF((_x>=80)&&(_x<=MAX_X)) x=_x;
  4793.     }
  4794.  
  4795.         Ïðîöåäóðà SetX, îïðåäåëåííàÿ â áàçîâîì êëàññå Point, òåïåðü áóäåò
  4796.     íåäîñòóïíà. Âìåñòî êîäà îïðåäåëåííîãî â ýòîì êëàññå, áóäåò âûçûâàòüñÿ êîä
  4797.     ïðîöåäóðû, îïðåäåëåííûé â íàñëåäóåìîì êëàññå Point3. Ïðè âûçîâå ïðîöåäóðû
  4798.     SetX èç äðóãîãî ïðîèçâîäíîãî êëàññà Point2 áóäåò òàêæå âûçûâàòüñÿ êîä
  4799.     ïðîöåäóðû, îïðåäåëåííûé â ïðîèçâîäíîì êëàññå Point3. Ïåðåîïðåäåëÿÿ
  4800.     ïðîöåäóðó òàêèì îáðàçîì, Âû çàìåíèòå êîä ýòîé ïðîöåäóðû â áàçîâîì êëàññå è
  4801.     âî âñåõ åãî íàñëåäóåìûõ êëàññàõ.
  4802.  
  4803.         Åñëè Âàì íåîáõîäèìî, ÷òîáû êîä íîâîé ïðîöåäóðû áûë äîñòóïåí
  4804.     îäíîâðåìåííî ñ êîäîì ñòàðîé ïðîöåäóðû, òî â ïðîèçâîäíîì êëàññå Âàì
  4805.     íåîáõîäèìî ñäåëàòü åùå îäíî îáúÿâëåíèå ýòîé ïðîöåäóðû. Ïðèìåð:
  4806.  
  4807.     struct Point  // áàçîâûé êëàññ
  4808.     {
  4809.         int x; // ýëåìåíòû äàííûõ
  4810.         int y; // êëàññà òèïà Point
  4811.         void SetX(int);  // îáúÿâëåíèå ìåòîäîâ
  4812.         void SetY(int);  // êëàññà Point
  4813.     };
  4814.  
  4815.     void Point::SetX(int _x)  // îïðåäåëåíèå ïðîöåäóðû êëàññà Point
  4816.     {
  4817.         IF((_x>=0)&&(_x<=MAX_X)) x=_x;
  4818.     }
  4819.  
  4820.     struct Point2 : Point  // ïðîèçâîäíûé êëàññ
  4821.     {
  4822.       int x2;
  4823.     }
  4824.  
  4825.     struct Point3 : Point  // åùå îäèí ïðîèçâîäíûé êëàññ
  4826.     {
  4827.       int z;
  4828.       void SetX(int);  // â íàñëåäóåìîì êëàññå äåëàåì åùå îäíî îáúÿâëåíèå
  4829.                        // ïðîöåäóðû SetX
  4830.     }
  4831.  
  4832.     void Point3::SetX(int _x)  // â ýòîì ïðîèçâîäíîì êëàññå ïåðåîïðåäåëÿåì
  4833.     {                          // ïðîöåäóðó SetX
  4834.         IF((_x>=80)&&(_x<=MAX_X)) x=_x;
  4835.         EDI=this;
  4836.         EDI.Point.SetX(_x);  // äåëàåì âûçîâ îäíîèìåííîé ïðîöåäóðû èç
  4837.                              // áàçîâîãî êëàññà
  4838.     }
  4839.  
  4840.         Òåïåðü èç ïðîèçâîäíîãî êëàññà Point3 Âàì äîñòóïíû äâå ðàçëè÷íûå
  4841.     ïðîöåäóðû ñ îäíèì èìåíåì SetX. À èç áàçîâîãî êëàññà Point è èç äðóãîãî
  4842.     ïðîèçâîäíîãî êëàññà Point2 áóäåò ïî ïðåæíåìó äîñòóïåí òîëüêî áàçîâûé
  4843.     âàðèàíò ïðîöåäóðû SetX.
  4844. <a href="#contents11"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4845.  
  4846.  
  4847. <h2 id=12.1>
  4848. 12. Òèïû âûõîäíûõ ôàéëîâ.
  4849.  
  4850.   12.1 Âûõîäíûå ôàéëû òèïà COM.
  4851. </h2>
  4852.  
  4853.       Ýòîò òèï âûõîäíîãî ôàéëà ïîëó÷àåòñÿ àâòîìàòè÷åñêè ïî óìîë÷àíèþ.
  4854.  
  4855.       Èçíà÷àëüíî C-- ìîã äåëàòü òîëüêî ôàéëû ôîðìàòà òèïà COM.  íàñòîÿùåå
  4856.   âðåìÿ ïîÿâèëàñü âîçìîæíîñòü ïîëó÷àòü ôàéëà òèïà EXE ñ ìîäåëÿìè ïàìÿòè tiny
  4857.   è small äëÿ 16-áèòíîãî êîäà, à òàêæå 32-áèòíûå äëÿ DOS è Windows. Òàêæå
  4858.   åñòü âîçìîæíîñòü ïîëó÷åíèÿ âûõîäíîãî ôàéëà â ôîðìàòå OBJ, ÷òî ïîçâîëÿåò
  4859.   ñâÿçûâàòü ïðîãðàììû íà C-- ñ ïðîãðàììàìè íà äðóãèõ ÿçûêàõ.
  4860. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4861.  
  4862.  
  4863. <h2 id=12.2>
  4864.   12.2 Âûõîäíûå ôàéëû òèïà EXE.
  4865. </h2>
  4866.  
  4867.       Ýòîò ôîðìàò ôàéëà ìîæíî ïîëó÷èòü, åñëè êîìïèëèðîâàòü ñ êëþ÷îì êîìàíäíîé
  4868.   ñòðîêè <b>/exe</b> èëè <b>/e</b>.
  4869.  
  4870.       Âîçìîæíî òàêæå ïîääåðæêà EXE-ôîðìàòà ÷åðåç âûõîäíîé ôàéë ôîðìàòà OBJ,
  4871.   êîòîðûé ìîæíî çàòåì îáðàáîòàòü ëèíêîâùèêîì, íå âõîäÿùèì â ïàêåò C--.
  4872. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4873.  
  4874.  
  4875. <h2 id=12.3>
  4876.   12.3 Âûõîäíîé ôàéë *.EXE ñ ìîäåëüþ ïàìÿòè tiny.
  4877. </h2>
  4878.  
  4879.       Ôàêòè÷åñêè êîä ôàéëà *.exe ìîäåëè <b>tiny</b> íè÷åì íå îòëè÷àåòñÿ îò êîäà
  4880.   *.com. Â ñóùíîñòè, ýòî òîò æå com-ôàéë, ê êîòîðîìó äîáàâëåí 32-áàéòíûé
  4881.   çàãîëîâîê exe-ôàéëà. Åäèíñòâåííîå îòëè÷èå âîçíèêàåò, êîãäà Âû êîìïèëèðóåòå
  4882.   ôàéë ñ äèðåêòèâîé <b>?resize TRUE</b>. Â com-ôàéëå, ïî ýòîé äèðåêòèâå, â êîä
  4883.   ïðîãðàììû äîáàâëÿåòñÿ ñîîòâåòñòâóþùèé êîä, èçìåíÿþùèé ðàçìåð äîñòóïíîé
  4884.   ïàìÿòè. Â exe-ôàéëå äëÿ ýòèõ öåëåé áóäåò ñêîððåêòèðîâàí çàãîëîâîê
  4885.   exe-ôàéëà.
  4886.  
  4887.       ×òîáû ïîëó÷èòü exe-ôàéë ñ ìîäåëüþ ïàìÿòè <b>tiny</b>, íàäî çàïóñòèòü
  4888.   êîìïèëÿòîð ñ êëþ÷îì â êîìàíäíîé ñòðîêå <b>/TEXE</b>.
  4889. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4890.  
  4891.  
  4892. <h2 id=12.4>
  4893.   12.4 Îáúåêòíûé âûõîäíîé ôàéë OBJ.
  4894. </h2>
  4895.  
  4896.       Â íàñòîÿùåå âðåìÿ C-- ìîæåò òîëüêî ñîçäàâàòü OBJ-ôàéëû, íî íå ìîæåò èõ
  4897.   êîìïîíîâàòü.
  4898.  
  4899.       Ðàíåå C-- ñîçäàâàë obj-ôàéëû, êîòîðûå ìîãëè áûòü ïîäêëþ÷åíû ê ïðîåêòàì
  4900.   ñîçäàííûì íà äðóãèõ ÿçûêàõ, ò.å. âåäîìûå (slave) ìîäóëè. Ïðè÷åì èç C--
  4901.   ìîäóëåé äëÿ îñíîâíîãî ïðîåêòà áûëè äîñòóïíû òîëüêî ïðîöåäóðû è ýòè
  4902.   ïðîöåäóðû íå äîëæíû áûëè èñïîëüçîâàòü ãëîáàëüíûå ïåðåìåííûå.
  4903.  
  4904.       Òåïåðü æå C-- ìîæåò ñîçäàâàòü îñíîâíîé ìîäóëü (master), êîòîðûé ìîæåò
  4905.   áûòü ñëèíêîâàí â ñàìîñòîÿòåëüíûé ôàéë.
  4906.  
  4907.       Äëÿ obj-ôàéëîâ ïîÿâèëàñü âîçìîæíîñòü èñïîëüçîâàòü âíåøíèå (extern)
  4908.   ïðîöåäóðû, ïåðåìåííûå èëè ñòðóêòóðû. Äëÿ ýòîãî äîñòàòî÷íî èõ îáúÿâèòü êàê
  4909.   extern. Ïðè÷åì êëþ÷åâîå ñëîâî extern äîëæíî áûòü âñåãäà ïåðâûì. Ïðèìåð
  4910.   îáúÿâëåíèÿ âíåøíèõ îáúåêòîâ:
  4911.  
  4912.   extern void cdecl _printf(); // îáúÿâëåíèå âíåøíåé ïðîöåäóðû _printf èìåþùåé
  4913.                                // òèï cdecl  è òèï âîçâðàòà void
  4914.   extern int buts,cubs;        // îáúÿâëåíèå äâóõ âíåøíèõ ïåðåìåííûõ òèïà int
  4915.   extern struct IPXL ipxl;     // îáúÿâëåíèå âíåøíåé ñòðóêòóðû ipxl èìåþùåé òåã
  4916.                              // IPXL,  ïðè÷åì òåã ýòîé ñòðóêòóðû äîëæåí áûòü
  4917.                              // îïèñàí ðàíåå.
  4918.  
  4919.       Ïîÿâëåíèå âîçìîæíîñòè îáúÿâëÿòü âíåøíèå îáúåêòû ïîçâîëÿåò ïîäêëþ÷àòü ê
  4920.   obj-ìîäóëþ íà C-- ìîäóëè íàïèñàííûå íà äðóãèõ ÿçûêàõ èëè ïîäêëþ÷àòü ê
  4921.   ïðîãðàììå íà C-- ïðîöåäóðû èç áèáëèîòåê íà äðóãèõ ÿçûêàõ. Ïðè îáúÿâëåíèè
  4922.   âíåøíèõ îáúåêòîâ î÷åíü âàæíî ïðàâèëüíî óêàçàòü òèï ïðîöåäóðû è åå èìÿ. Åñëè
  4923.   Âû áóäåòå èñïîëüçîâàòü âíåøíèå ïðîöåäóðû, íàïèñàííûå íà C òî ÷àùå âñåãî,
  4924.   Âàì íóæíî áóäåò óêàçûâàòü ìîäèôèêàòîð <b>cdecl</b>, à ê èìåíè ïðîöåäóðû èëè
  4925.   ïåðåìåííîé äîáàâëÿòü ïðåôèêñ <b>_</b>.
  4926.  
  4927.       Èç îñíîâíîãî (master) obj-ôàéëà íàïèñàííîãî íà C-- äëÿ äðóãèõ
  4928.   obj-ìîäóëåé äîñòóïíû âñå ïðîöåäóðû, ãëîáàëüíûå ïåðåìåííûå è ãëîáàëüíûå
  4929.   ñòðóêòóðû.
  4930.  
  4931.       ×òîáû ïîëó÷èòü âåäîìûé obj-ìîäóëü ïðè êîìïèëÿöèè íàäî èñïîëüçîâàòü êëþ÷
  4932.   <b>/sobj</b>.
  4933.  
  4934.       C-- ìîæåò ñîçäàâàòü obj-ôàéëû ñ ìîäåëüþ ïàìÿòè tiny è small. Ïî
  4935.   óìîë÷àíèþ ñîçäàþòñÿ ìîäóëè ñ ìîäåëüþ tiny. ×òîáû ïîëó÷èòü obj-ôàéë ñ
  4936.   ìîäåëüþ ïàìÿòè small íàäî çàïóñòèòü êîìïèëÿòîð ñ êëþ÷àìè <b>/obj è /exe</b>.
  4937.  
  4938.       Äëÿ ñîçäàíèÿ obj-ôàéëîâ äëÿ 32-áèòíîãî DOS â êîìàíäíîé ñòðîêå Âàì
  4939.   íåîáõîäèìî óêàçàòü êëþ÷è <b>/d32 è /obj</b>. Èñïîëüçîâàòü ïîëó÷åííûé obj-ôàéë ìíå
  4940.   óäàëîñü ëèøü ñ ïîìîùüþ wlink è ðàñøèðèòåëÿ zrdx.exe.
  4941.  
  4942.       Ñîçäàíèå obj-ôàéëîâ ïîä windows íå ïðåäóñìîòðåíî.
  4943. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4944.  
  4945.  
  4946. <h2 id=12.5.1>
  4947.   12.5 COM ôàéë symbiosis.
  4948.  
  4949.     12.5.1 ÑÈÌÁÈÎÇ - ÷òî ýòî òàêîå?
  4950. </h2>
  4951.  
  4952.         Òðàíñëÿòîð C-- èìååò êëþ÷, ïîçâîëÿþùèé äîáàâëÿòü êîìïèëèðóåìóþ
  4953.     ïðîãðàììó ê êîíöó óæå èìåþùåãîñÿ COM ôàéëà. Ýòî íàçûâàþò COM-ôàéë
  4954.     Symbiosis. Êîãäà òàêàÿ ïðîãðàììà çàïóñêàåòñÿ, óïðàâëåíèå ñíà÷àëà ïîëó÷àåò
  4955.     äîáàâëåííûé êîä C--, è òîëüêî ïîñëå âûïîëíåíèÿ åãî ïðîöåäóðû main()
  4956.     óïðàâëåíèå ïîëó÷èò ïåðâîíà÷àëüíûé êîä COM-ôàéëà.
  4957.  
  4958.         Åñëè äîáàâëåííûé âàìè êîä çàâåðøàåòñÿ EXIT() èëè ABORT(), ïðîãðàììà
  4959.     ïðåêðàòèòñÿ, è ïåðâîíà÷àëüíûé êîä COM-ôàéëà íå áóäåò âûïîëíåí. Ýòî
  4960.     ïîçâîëÿåò ïðîãðàììå, äîáàâëåííîé ê COM ôàéëó, îïðåäåëÿòü, áóäåò ëè
  4961.     óïðàâëåíèå ïåðåäàíî íà ïåðâîíà÷àëüíûé êîä.
  4962. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4963.  
  4964.  
  4965. <h2 id=12.5.2>
  4966.     12.5.2 Êàê ýòî äåëàòü.
  4967. </h2>
  4968.  
  4969.         ×òîáû ñäåëàòü ýòî, Âû äîëæíû èñïîëüçîâàòü êëþ÷ <b>/SYM</b> â êîìàíäíîé
  4970.     ñòðîêå êîìïèëÿòîðà, â êîòîðîé óêàçûâàåòñÿ ïîëíîå èìÿ COM-ôàéëà, ê
  4971.     êîòîðîìó ÷òî-òî äîáàâëÿåòñÿ. Ïðè ýòîì îðèãèíàë COM-ôàéëà íå ìåíÿåòñÿ, à
  4972.     íîâûé ôàéë ñîäåðæèò åãî â ñåáå. Íàïðèìåð, ÷òîáû îòêîìïèëèðîâàòü ïðîãðàììó
  4973.     HELLO.C-- ê êîíöó êîïèè C:\command.ñîì èñïîëüçóþò ñëåäóþùóþ êîìàíäó:
  4974.  
  4975.              C-- /SYM C:\COMMAND.COM HELLO.C--
  4976.  
  4977.     Áóäåò ñîçäàí âûõîäíîé ôàéë HELLO.COM .
  4978. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4979.  
  4980.  
  4981. <h2 id=12.5.3>
  4982.     12.5.3 Èñïîëüçîâàíèå.
  4983. </h2>
  4984.  
  4985.         Âû ìîæåòå, âåðîÿòíî, ïðèäóìàòü áîëüøîå êîëè÷åñòâî ïóòåé èñïîëüçîâàíèÿ
  4986.     ýòîé ôóíêöèè, òèïà:
  4987.  
  4988.              - Äîáàâëåíèå çàùèòû ñ èñïîëüçîâàíèåì ïàðîëÿ ê íåêîòîðûì
  4989.                ñïåöèàëüíûì COM ôàéëàì.
  4990.              - Óìåíüøåíèå ïàìÿòè, äîñòóïíîé COM ôàéëó ïðè çàïóñêå.
  4991.              - Èíèöèàëèçàöèÿ ðåæèìà âèäåî äëÿ COM ôàéëà.
  4992. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  4993.  
  4994.  
  4995. <h2 id=12.5.4>
  4996.     12.5.4 Çëîóïîòðåáëåíèÿ.
  4997. </h2>
  4998.  
  4999.         Ëþáîé çëîóìûøëåííèê ìîæåò ïðèäóìàòü è âðåäíûå ïðèìåíåíèÿ äëÿ ýòîé
  5000.     ôóíêöèè. Íàèáîëåå î÷åâèäíîå èç íèõ - ñîçäàíèå òðîÿíñêèõ êîíåé. ß õîòåë áû
  5001.     óêàçàòü, ÷òî ýòî íåêîíñòðóêòèâíîå èñïîëüçîâàíèå C--, è ëþáîå
  5002.     ðàçðóøèòåëüíîå èñïîëüçîâàíèå ñèìáèîçîâ COM-ôàéëîâ çàïðåùåíî.
  5003. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5004.  
  5005.  
  5006. <h2 id=12.6>
  5007.   12.6 SYS - äðàéâåðû óñòðîéñòâ.
  5008. </h2>
  5009.  
  5010.       Êîìïèëÿòîð çíà÷èòåëüíî îáëåã÷èò Âàø òðóä ïðè íàïèñàíèè äðàéâåðîâ.
  5011.   Êîìïèëÿòîð ñàì ñîçäàñò çàãîëîâîê äðàéâåðà è ïðîöåäóðû <b>ÑÒÐÀÒÅÃÈß</b> è
  5012.   <b>ÏÐÅÐÛÂÀÍÈÅ</b>. Âàì îñòàåòñÿ ëèøü íàïèñàòü êîä îáðàáîòêè êîìàíä.
  5013.  
  5014.       ×òî áû îòêîìïèëèðîâàòü ôàéë äðàéâåðà óñòðîéñòâà, íàäî äîáàâèòü â
  5015.   êîìàíäíóþ ñòðîêó êëþ÷ <b>/SYS</b>. Êðîìå òîãî, ïîÿâèëèñü íîâûå äèðåêòèâû
  5016.   êîìïèëÿòîðó, êîòîðûå äåéñòâóþò òîëüêî ñ ýòèì êëþ÷îì. Âîò îíè:
  5017.  
  5018.       <b>?sysattribute çíà÷åíèå</b>  - ýòà  äèðåêòèâà ïåðåäàåò  êîìïèëÿòîðó
  5019.   àòðèáóò ñîçäàâàåìîãî äðàéâåðà. Ïî óìîë÷àíèþ óñòàíàâëèâàåòñÿ çíà÷åíèå
  5020.   0x2000.
  5021.  
  5022.       <b>?sysname <òåêñòîâàÿ  ñòðîêà></b> -  ýòà äèðåêòèâà  ïåðåäàåò êîìïèëÿòîðó
  5023.   èìÿ áóäóùåãî äðàéâåðà. Ïî óìîë÷àíèþ ïðèñâàèâàåòñÿ èìÿ "NO_NAME". Äëèíà
  5024.   èìåíè  íå áîëåå 8 ñèìâîëîâ.
  5025.  
  5026.       <b>?syscommand command_0,command_1, ... command_n;</b> - ýòà äèðåêòèâà
  5027.   ÿâëÿåòñÿ îáÿçàòåëüíîé. Ïî ýòîé äèðåêòèâå êîìïèëÿòîðó ïåðåäàåòñÿ ñïèñîê èìåí
  5028.   ïðîöåäóð îáðàáîòêè êîìàíä äðàéâåðà. Èìåíà ðàçäåëåíû çàïÿòûìè. Ñïèñîê äîëæåí
  5029.   çàêàí÷èâàòüñÿ ñèìâîëîì òî÷êà-ñ-çàïÿòîé. Ìîæíî ïåðåäàòü íå áîëåå 25 êîìàíä.
  5030.   Åñëè êàêàÿ-òî êîìàíäà íå èìååò êîäà ïîääåðæêè, òî â ñïèñîê íàäî çàïèñàòü
  5031.   ñëîâî NONE.
  5032.  
  5033.       Ïî óìîë÷àíèþ êîìïèëÿòîð äëÿ äðàéâåðà íå ñîçäàåò ñòåê. Äðàéâåð ìîæåò
  5034.   ïîëüçîâàòüñÿ ñèñòåìíûì ñòåêîì. Íî, ãîâîðÿò, ÷òî îí èìååò ìàëåíüêóþ ãëóáèíó.
  5035.   Åñëè Âàøè ïðîöåäóðû àêòèâíî èñïîëüçóþò ñòåê, è Âû íå íàäååòåñü íà ñèñòåìíûé,
  5036.   òî äèðåêòèâîé ?stack <âåëè÷èíà> ìîæíî çàñòàâèòü äðàéâåð ïîëüçîâàòüñÿ ñâîèì
  5037.   ñòåêîì.
  5038.  
  5039.       Âàøèì ïðîöåäóðàì îáðàáîòêè êîìàíä ïðè ïåðåäà÷å óïðàâëåíèÿ â ðåãèñòðàõ
  5040.   ES:BX áóäåò ïåðåäàí àäðåñ çàãîëîâêà çàïðîñà. Ðåãèñòð DS ðàâåí CS. Ïðè
  5041.   âîçâðàòå óïðàâëåíèÿ âàøè ïðîöåäóðû äîëæíû ñîõðàíèòü ðåãèñòð DS. Â ðåãèñòðå
  5042.   AX äîëæåí íàõîäèòüñÿ êîä âîçâðàòà. Îñòàëüíûå ðåãèñòðû ìîãóò áûòü
  5043.   èñïîëüçîâàíû ïðîèçâîëüíûì îáðàçîì.
  5044.  
  5045.       Ïðîöåäóðó îáðàáîòêè êîìàíäû èíèöèàëèçàöèè æåëàòåëüíî ðàñïîëàãàòü
  5046.   ïîñëåäíåé (÷òîáû èìåòü âîçìîæíîñòü îòäàòü àäðåñíîå ïðîñòðàíñòâî çàíèìàåìîå
  5047.   ýòîé ïðîöåäóðîé îïåðàöèîííîé ñèñòåìå). Ïåðåä ýòîé ïðîöåäóðîé, åñëè Âû â
  5048.   äðóãèõ ïðîöåäóðàõ îáðàáîòêè êîìàíä èñïîëüçóåòå äèíàìè÷åñêèå ïðîöåäóðû,
  5049.   îáÿçàòåëüíî äîëæíà áûòü äèðåêòèâà <b>?setdinproc</b>. Ãëîáàëüíûå ïåðåìåííûå äîëæíû
  5050.   áûòü îáÿçàòåëüíî ïðîèíèöèàëèçèðîâàíû.
  5051. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5052.  
  5053.  
  5054. <h2 id=12.7>
  5055.   12.7 Êîìïèëÿöèÿ êîäà ðàñøèðèòåëåé ROM-BIOS.
  5056. </h2>
  5057.  
  5058.       Ðàñøèðèòåëè ROM-BIOS (BIOS âèäåîêîíòðîëëåðîâ, ñåòåâûõ êàðò...) èìåþò
  5059.   îïðåäåëåííóþ ñòðóêòóðó è òðåáîâàíèÿ. C-- òåïåðü ìîæåò îáëåã÷èòü Âàì ïðîöåññ
  5060.   ñîçäàíèÿ êîäà ROM-BIOS. Åñëè çàïóñòèòü êîìïèëÿòîð íà êîìïèëÿöèþ ñ êëþ÷îì
  5061.   êîìàíäíîé ñòðîêè <b>/ROM</b>, òî êîìïèëÿòîð ñîçäàñò ñèãíàòóðó (çàãîëîâîê)
  5062.   ROM-BIOS, çàïîëíèò îñòàâøååñÿ ñâîáîäíîå ìåñòî äî óêàçàííîãî ðàçìåðà ÏÇÓ
  5063.   êîäîì çàïîëíåíèÿ, ïîäñ÷èòàåò è ñêîððåêòèðóåò êîíòðîëüíóþ ñóììó ÏÇÓ.
  5064.  
  5065.       Äëÿ ýòîãî ðåæèìà êîìïèëÿöèè åñòü íåñêîëüêî ñïåöèôè÷åñêèõ äèðåêòèâ:
  5066.  
  5067.     1.  <b>?sizerom value</b> - ýòà äèðåêòèâà ñîîáùàåò êîìïèëÿòîðó ðàçìåð ÏÇÓ â
  5068.   áàéòàõ. Åñëè ýòà äèðåêòèâà íå óêàçàíà, òî êîìïèëÿòîð ñàì âûáåðåò
  5069.   ìèíèìàëüíûé ïîäõîäÿùèé ðàçìåð ÏÇÓ èç ðÿäà: 1024, 2048, 4096, 8192, 16384,
  5070.   32762 èëè 65536. Ñâîáîäíîå îò êîäà è äàííûõ ìåñòî áóäóò çàïîëíåíû äî êîíöà
  5071.   ðàçìåðà ÏÇÓ áàéòîì çàïîëíåíèÿ îïðåäåëÿåìîãî äèðåêòèâîé <b>?aligner</b>. Ïî
  5072.   óìîë÷àíèþ îí ðàâåí íóëþ, äëÿ ÐÏÇÓ òèïà 27õõõ ýòîò áàéò èìååò ñìûñë ñäåëàòü
  5073.   ðàâíûì 0xFF. Ïîñëåäíèé áàéò ÏÇÓ áóäåò ñêîððåêòèðîâàí êîìïèëÿòîðîì òàêèì
  5074.   îáðàçîì, ÷òîáû êîíòðîëüíàÿ ñóììà ðàâíÿëàñü íóëþ.
  5075.  
  5076.     2.  <b>?movedatarom TRUE/FALSE</b> - ýòà äèðåêòèâà ñîîáùàåò êîìïèëÿòîðó åñòü ëè
  5077.   íåîáõîäèìîñòü êîïèðîâàòü äàííûå èç ÏÇÓ â ÎÇÓ. Ïî óìîë÷àíèþ îíà óñòàíîâëåíà
  5078.   â <b>FALSE</b>. Åñëè ýòó äèðåêòèâó îïðåäåëèòü <b>TRUE</b>, òî êîìïèëÿòîð âñòàâèò â
  5079.   îáëàñòü èíèöèàëèçàöèè êîä ïåðåìåùàþùèé äàííûå èç ÏÇÓ â ÎÇÓ. Ïðè ýòîì
  5080.   ðåãèñòð DS áóäåò óñòàíîâëåí íà ñåãìåíò ÎÇÓ. Ñòåê òàêæå áóäåò ïåðåóñòàíîâëåí
  5081.   íà ýòîò ñåãìåíò. Òàêèì îáðàçîì, ïðîöåäóðà main ïîëó÷èò óïðàâëåíèå ñ
  5082.   ðåãèñòðàìè <b>AX = ES = DS = SS = ñåãìåíòó ÎÇÓ ñ ïåðåíåñåííûìè â íåãî äàííûìè</b>.
  5083.   Åñëè ýòó äèðåêòèâó óñòàíîâèòü â <b>FALSE</b>, ðåãèñòð DS âñå ðàâíî áóäåò
  5084.   ïåðåóñòàíîâëåí íà àäðåñ ñåãìåíòà ÎÇÓ, òàê êàê Âàø êîä áóäåò èñïîëüçîâàòü
  5085.   ýòîò ñåãìåíò äëÿ íåèíèöèàëèçèðîâàííûõ ãëîáàëüíûõ ïåðåìåííûõ.
  5086.   Èíèöèàëèçèðîâàííûå ïåðåìåííûå îñòàíóòñÿ â ÏÇÓ è âñå îáðàùåíèÿ ê íèì áóäóò
  5087.   ïðîèçâîäèòüñÿ ÷åðåç ðåãèñòð CS. Òàê æå îñòàíåòñÿ íå òðîíóòûì (òàêèì, êàêèì
  5088.   åãî óñòàíîâèë ãëàâíûé BIOS) è ñòåê.
  5089.  
  5090.     3.  <b>?dataseg value</b> - ýòîé äèðåêòèâîé êîìïèëÿòîðó ñîîáùàåòñÿ ñåãìåíòíûé
  5091.   àäðåñ ÎÇÓ, êîòîðûé ìîæåò áûòü èñïîëüçîâàí âàøèì êîäîì. Ïî óìîë÷àíèþ îí
  5092.   ðàâåí 0x70. Ýòîò àäðåñ âû ìîæåòå óçíàòü â ëþáîé ìîìåíò, ñ÷èòàâ åãî èç âàøåãî
  5093.   êîäà ïî ñìåùåíèþ 4. Íàïðèìåð: DS = CSWORD[4];
  5094.  
  5095.       Íåêîòîðûå çàìå÷àíèÿ:
  5096.  
  5097.     1.  Íå çàáûâàéòå, ÷òî â ìîìåíò èíèöèàëèçàöèè ROM-BIOS, DOS åùå íå
  5098.   çàãðóæåí, è ñîîòâåòñòâåííî âñå ïðîöåäóðû èñïîëüçóþùèå âûçîâû DOS ðàáîòàòü
  5099.   íå áóäóò.
  5100.  
  5101.     2. Íåëüçÿ çàâåðøàòü ðàáîòó ïðîãðàììû ïðîöåäóðàìè <b>ABORT()</b> èëè <b>EXIT()</b> è èì
  5102.   ïîäîáíûì. Ðàáîòà ðàñøèðèòåëÿ ROM-BIOS äîëæíà çàâåðøàòüñÿ òîëüêî âûõîäîì èç
  5103.   ïðîöåäóðû main().
  5104.  
  5105.     3. Åñëè äèðåêòèâà <b>?movedatarom</b> óñòàíîâëåíà â <b>FALSE</b>, òî áóäüòå âíèìàòåëüíû
  5106.   ïðè ðàáîòå ñ èíèöèàëèçèðîâàííûìè ïåðåìåííûìè. Îíè â ýòîì ðåæèìå äîñòóïíû
  5107.   òîëüêî äëÿ ÷òåíèÿ, è àäðåñóþòñÿ ÷åðåç ðåãèñòð CS.
  5108. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5109.  
  5110.  
  5111. <h2 id=12.8.1>
  5112.   12.8 32-áèòíûå ôàéëû.
  5113.  
  5114.     12.8.1 32-áèòíûé êîä ïîä DOS.
  5115. </h2>
  5116.  
  5117.         Äëÿ òîãî ÷òîáû îòêîìïèëèðîâàòü 32-áèòíóþ ïðîãðàììó ïîä DOS íàäî
  5118.     çàïóñòèòü êîìïèëÿòîð ñ êëþ÷îì êîìàíäíîé ñòðîêè <b>/d32</b>. Íî ðàáîòà 32-áèòíîé
  5119.     ïðîãðàììû ïîä DOS-îì íåâîçìîæíà áåç ðàñøèðèòåëÿ DOS. Äëÿ C-- ìîæíî
  5120.     èñïîëüçîâàòü DOS4GW èëè zrdx.exe èëè ëþáîé äðóãîé ðàñøèðèòåëü DOS. ×òîáû
  5121.     êîìïèëÿòîð çíàë, ãäå èñêàòü <b>stub</b> ôàéë è åãî èìÿ, íàäî â ôàéë c--.ini
  5122.     ïðîïèñàòü ñòðîêó stub=path_name_to_stub_file.  Ïðèìåð:
  5123.  
  5124.         stub=c:\c--\zrdx.exe
  5125.  
  5126.         Åñëè íå äîáàâëÿòü â c--.ini ýòó ñòðîêó, òî êîìïèëÿòîð ñãåíåðèðóåò
  5127.     32-áèòíûé exe-ôàéë, íî áåç ðàñøèðèòåëÿ DOS. Åñëè â êîìàíäíîé ñòðîêå
  5128.     âìåñòå ñ êëþ÷îì <b>/d32</b> óêàçàòü è êëþ÷ <b>/ns</b>, òî ñòðîêà ñ ïåðåìåííîé stub èç
  5129.     ôàéëà c--.ini áóäåò àííóëèðîâàíà, è âû ïîëó÷èòå ôàéë áåç ðàñøèðèòåëÿ DOS.
  5130.  
  5131.         Äëÿ 32-áèòíîãî DOS-ôàéëà ìîæíî èñïîëüçîâàòü äèðåêòèâû êîìïèëÿòîðà
  5132.     ?parsecommandline TRUE/FALSE èëè åãî ðàñøèðåííûé âàðèàíò <b>?argc
  5133.     TRUE/FALSE</b>.  Ðåàëèçîâàíà è ïîääåðæêà äèðåêòèâû <b>?atexit TRUE/FALSE</b>.
  5134.  
  5135.         Ñåé÷àñ äëÿ 32-áèòíûõ DOS-ôàéëîâ èñïîëüçóåòñÿ LE-ôîðìàò. Òàê êàê LE
  5136.     ôîðìàò ÿâëÿåòñÿ ñòàíäàðòíûì, òî òåïåðü ìîæíî èñïîëüçîâàòü ïî÷òè ëþáîé
  5137.     stub, ïîíèìàþùèé ýòîò ôîðìàò. Ôàéëû LE ôîðìàòà ìîæíî ñæèìàòü ïðîãðàììàìè
  5138.     òèïà UPX.EXE è åé ïîäîáíûìè.
  5139.  
  5140.         Åñëè Âû èñïîëüçóåòå stub, êîòîðûé çàòåì çàãðóæàåò DOS4GW.EXE, òî
  5141.     íà÷àëî Âàøåé ïðîãðàììû äîëæíî èìåòü ñïåöèàëüíóþ ñèãíàòóðó. Êîìïèëÿòîð
  5142.     àâòîìàòè÷åñêè ñôîðìèðóåò åå, åñëè Âû â êîìàíäíîé ñòðîêå èëè â c--.ini
  5143.     ôàéëå óêàæåòå êëþ÷ <b>/DOS4GW</b>. Òàêîé êëþ÷ Âàì íåîáõîäèìî áóäåò ïðèìåíÿòü,
  5144.     åñëè Âû áóäåòå èñïîëüçîâàòü â êà÷åñòâå stub 4gs.exe.
  5145.  
  5146.         Ñóùåñòâóåò òàêæå ïîääåðæêà áëîêà êîäà èñïîëüçóþùåãî äëÿ ïåðåõîäà è
  5147.     ðàáîòû â 32-áèòíîì ðåæèìå âîçìîæíîñòè DPMI ñåðâèñà. Èñõîäíûé òåêñò ýòîãî
  5148.     áëîêà íàõîäèòñÿ â ôàéëå startup.h-- è êîìïèëèðóåòñÿ, åñëè â êîìàíäíîé
  5149.     ñòðîêå óêàçàíà îïöèÿ <b>/stub=dpmi</b> èëè â ôàéëå c--.ini íàïèñàòü ñòðîêó
  5150.     <b>stub=dpmi</b>.  Íåäîñòàòêîì ýòîãî ñïîñîáà ïåðåõîäà è ðàáîòû â 32-áèòíîì
  5151.     ðåæèìå ÿâëÿþòñÿ íåîáõîäèìîñòü îáÿçàòåëüíîãî ôóíêöèîíèðîâàíèÿ íà
  5152.     çàïóñêàåìîì êîìïüþòåðå DPMI ñåðâèñà. Òàê êàê, ïðîãðàììà çàãðóæàåòñÿ êàê
  5153.     îáû÷íàÿ DOS ïðîãðàììà, è ëèøü â ïðîöåññå ðàáîòû ïåðåõîäèò â 32-áèòíûé
  5154.     ðåæèì ðàáîòû, ðàçìåð ïðîãðàììû îãðàíè÷åí ðàçìåðîì ñâîáîäíîé DOS ïàìÿòè.
  5155.     Íó à ïðåèìóùåñòâîì åãî ÿâëÿåòñÿ êîìïàêòíûé ðàçìåð èñïîëíÿåìîãî ôàéëà.
  5156. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5157.  
  5158.  
  5159. <h2 id=12.8.2>
  5160.     12.8.2 32-áèòíûé êîä ïîä Windows.
  5161. </h2>
  5162.  
  5163.         Äëÿ òîãî ÷òîáû îòêîìïèëèðîâàòü ïðîãðàììó, íàïèñàííóþ ïîä Windows íàäî
  5164.     çàïóñòèòü êîìïèëÿòîð ñ êëþ÷îì êîìàíäíîé ñòðîêè <b>/w32</b>.
  5165.  
  5166.         Åñëè Âû â ñâîåé ïðîãðàììå èñïîëüçóåòå âûçîâû API-ïðîöåäóð, òî ýòè
  5167.     ïðîöåäóðû íàäî ïðåäâàðèòåëüíî îáÿçàòåëüíî îáúÿâèòü. Îáúÿâëåíèå ïðîöåäóð
  5168.     èìååò ñëåäóþùóþ ôîðìó:
  5169.  
  5170.     extern WINAPI "DLL_name"
  5171.     {
  5172.         returncode procname1();
  5173.         returncode procname2();
  5174.         procname3();
  5175.     }
  5176.  
  5177.       ãäå:
  5178.            DLL_name - èìÿ è ðàñøèðåíèå dll-áèáëèîòåêè, â êîòîðîé íàõîäÿòñÿ ýòè
  5179.                       ïðîöåäóðû.
  5180.          returncode - òèï âîçâðàòà èç api-ïðîöåäóð. Ïî óìîë÷àíèþ îí ðàâåí dword.
  5181.  
  5182.         Ïðîãðàììû, íàïèñàííûå ïîä Windows, èìåþò îäíó íåìàëîâàæíóþ
  5183.     îñîáåííîñòü - âñå ïàðàìåòðû â ñòåêîâûå ïðîöåäóðû ïåðåäàþòñÿ â îáðàòíîì
  5184.     ïîðÿäêå (òàê íàçûâàåìûé C-ñòèëü), íî î÷èñòêà ñòåêà îò ïàðàìåòðîâ
  5185.     ïðîèñõîäèò â ñàìèõ ïðîöåäóðàõ. Ïîëó÷àåòñÿ ñâîåîáðàçíûé ãèáðèä <b>C è pascal</b>
  5186.     ñòèëåé - <b>stdcall</b>.
  5187.  
  5188.         Ñ ïîìîùþ êëþ÷à <b>/W32C</b> êîìïèëÿòîð ñîçäàåò êîíñîëüíûé ôàéë ïîä Windows.
  5189.  
  5190.         Åñëè ïðè êîìïèëÿöèè óêàçûâàëè îïöèþ êîìàíäíîé ñòðîêè <b>/j0</b> èëè
  5191.     äèðåêòèâó <b>#jumptomain NONE</b>, òî Âàøà ïðîãðàììà áóäåò êîìïèëèðîâàòüñÿ áåç
  5192.     èñïîëüçîâàíèÿ êîäà íà÷àëüíîé èíèöèàëèçàöèè, îïèñàíèå êîòîðîãî íàõîäèòñÿ â
  5193.     ôàéëå startup.h--.
  5194.  
  5195.         Êîä íà÷àëüíîé èíèöèàëèçàöèè äëÿ ïðîãðàìì ïîä Windows èìååò ñëåäóþùèé
  5196.     âèä:
  5197.  
  5198.         hThisInst=GetModuleHandleA(0);
  5199.       #ifdef __CONSOLE__
  5200.         hStdOut=GetStdHandle(-11);
  5201.       #endif
  5202.         lpszArgs=GetCommandLineA();
  5203.       #ifdef __environ;
  5204.         environ=GetEnvironmentStringsA();
  5205.       #endif
  5206.         main();
  5207.         ExitProcess(EAX);
  5208.  
  5209.         Òàêèì îáðàçîì, â ãëîáàëüíûõ ïåðåìåííûõ <b>hThisInst</b> áóäåò íàõîäèòñÿ
  5210.     handl çàïóùåííîãî ôàéëà, à â <b>lpszArgs</b> àäðåñ êîìàíäíîé ñòðîêè Âàøåãî
  5211.     ôàéëà. Åñëè Âû â êîìàíäíîé ñòðîêå óêàçàëè îïöèè <b>/p</b> èëè <b>/argc</b> èëè â
  5212.     íà÷àëå âàøåãî ôàéëà åñòü äèðåêòèâû <b>#parsecommandline TRUE</b> èëè <b>argc TRUE</b>,
  5213.         òî êîìïèëÿòîð ñîçäàñò äîïîëíèòåëüíûé êîä ñäåëàþùèé ðàçáîðêó ýòîé
  5214.     êîìàíäíîé ñòðîêè íà ÷àñòè. Åñëè Âû êîìïèëèðóåòå êîíñîëüíóþ ïðîãðàììó, òî
  5215.     â âàøåé ïðîãðàììå áóäåò åùå îäíà ãëîáàëüíàÿ ïåðåìåííàÿ - <b>hStdOut</b>. Â ýòîé
  5216.     ïåðåìåííîé õðàíèòñÿ handl ñòàíäàðòíîãî âûâîäà (ýêðàíà). Åñëè Âû ïðè
  5217.     êîìïèëÿöèè ïðîãðàììû óêàçàëè îïöèþ <b>/env</b>, òî â ãëîáàëüíîé ïåðåìåííîé
  5218.     <b>environ</b> õðàíèòñÿ àäðåñ ïåðåìåííîé îêðóæåíèÿ ïðîãðàììû.
  5219.  
  5220.         Ïîñëå çàâåðøåíèÿ ðàáîòû ïðîöåäóðû <b>main</b> âûïîëíÿòñÿ ïðîöåäóðà
  5221.     <b>ExitProcess</b>, êîòîðîé â êà÷åñòâå ïàðàìåòðà ïåðåäàåòñÿ ðåãèñòð EAX. Ò.î.
  5222.     Âàì äëÿ çàâåðøåíèÿ ðàáîòû ïðîãðàììû áóäåò äîñòàòî÷íî ñäåëàòü âûõîä èç
  5223.     ïðîöåäóðû <b>main</b>, ïðåäâàðèòåëüíî çàãðóçèâ â ðåãèñòð EAX íóæíûé Âàì êîä
  5224.     âîçâðàòà.
  5225.  
  5226.         Íåêîòîðûå êîìïèëÿòîðû ñîçäàþò DLL, â êîòîðûõ èìåíà ýêñïîðòèðóåìûõ
  5227.     ïðîöåäóð èìåþò òàêîé ôîðìàò:
  5228.  
  5229.        ProcName@8
  5230.  
  5231.         Â ýòîì èìåíè ïîñëå ñèìâîëà <b>@</b> óêàçûâàåòñÿ ðàçìåð ñòåêà ñ
  5232.     ïàðàìåòðàìè, ïåðåäàâàåìûõ ïðîöåäóðå.
  5233.  
  5234.         Îáúÿâëÿòü òàêèå ïðîöåäóðû íóæíî òàê:
  5235.  
  5236.     extern WINAPI "name.dll"
  5237.     {
  5238.        ProcName@8 ;
  5239.     }
  5240.  
  5241.     ò.å. áåç êðóãëûõ ñêîáîê. Â ïðîãðàììå, ïðè îáðàùåíèè ê òàêîé ïðîöåäóðå, åå
  5242.     èìÿ íàäî ïèñàòü áåç ñóôôèêñà @8, ò.å. âîò òàê - ProcName(param1,param2);
  5243. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5244.  
  5245.  
  5246. <h2 id=12.8.3>
  5247.     12.8.3 Âûçîâ API ïðîöåäóð ïî îðäèíàëàì.
  5248. </h2>
  5249.  
  5250.          äèíàìè÷åñêè ïîäêëþ÷àåìûõ áèáëèîòåêàõ (DLL) êàæäîé ïðîöåäóðå, êðîìå
  5251.     åå èìåíè, ñîîòâåòñòâóåò óíèêàëüíîå ÷èñëî, êîòîðîå íàçûâàåòñÿ îðäèíàëîì. È
  5252.     ïîýòîìó, êðîìå îáùåïðèíÿòîãî âûçîâà API-ïðîöåäóðû ïî èìåíè, ìîæíî äåëàòü
  5253.     âûçîâ è ïî îðäèíàëó. Òåîðåòè÷åñêè, ïðè èñïîëüçîâàíèè âûçîâà ïî îðäèíàëó,
  5254.     çàãðóçêà ôàéëà äîëæíà ïðîèñõîäèòü áûñòðåå. Òàê êàê â âûõîäíîé ôàéë íå
  5255.     áóäóò âêëþ÷åíû ñïèñêè èìåí ïðîöåäóð, âûçîâ êîòîðûõ ïðîèçâîäèòñÿ ïî
  5256.     îðäèíàëàì, òî âûõîäíîé ôàéë ìîæåò ïîëó÷èòüñÿ íåìíîãî ìåíüøèì ïî ðàçìåðó.
  5257.  
  5258.         ×òîáû êîìïèëÿòîð ñîçäàë ôàéë, èñïîëüçóþùèé âûçîâ API-ïðîöåäóð ïî
  5259.     îðäèíàëàì, íàäî ñäåëàòü äâå âåùè:
  5260.  
  5261.      1. Ðàçðåøèòü êîìïèëÿòîðó ýòî äåëàòü. Äëÿ ýòîãî íàäî â îïöèÿõ êîìàíäíîé
  5262.     ñòðîêè (èëè â ôàéëå C--.INI) óêàçàòü êëþ÷ <b>WO</b>.
  5263.  
  5264.      2. Ñîîáùèòü êîìïèëÿòîðó - êàêîé íîìåð îðäèíàëà ñîîòâåòñòâóåò êàêîìó
  5265.     èìåíè ïðîöåäóðû. Ïðîöåäóðû, äëÿ êîòîðûõ íå áûë óêàçàí îðäèíàë, áóäåò
  5266.     ñîçäàí âûçîâ ïî èìåíè. Óñòàíîâèòü ñîîòâåòñòâèå èìåí ïðîöåäóð îðäèíàëó
  5267.     ìîæíî äâóìÿ ñïîñîáàìè:
  5268.  
  5269.         a). Àâòîìàòè÷åñêè, ñ ïîìîùüþ îïöèè êîìàíäíîé ñòðîêè <b>IND=name.dll</b>,
  5270.         ïî êîòîðîé êîìïèëÿòîð ïðîñêàíèðóåò ýòó áèáëèîòåêó è èìïîðòèðóåò èç
  5271.         íåå âñå èìåíà è îðäèíàëû ïðîöåäóð. (Èìïîðò âîçìîæåò òîëüêî èç
  5272.         áèáëèîòåê èìåþùèõ ôîðìàò PE).
  5273.  
  5274.         b).  ðó÷íóþ óêàçàòü â îáúÿâëåíèè API-ïðîöåäóð è åå îðäèíàë. Äåëàåòñÿ
  5275.         ýòî òàê: ïîñëå èìåíè ïðîöåäóðû ñòàâèòñÿ òî÷êà, à çà íåé óêàçûâàåòñÿ
  5276.         íîìåð îðäèíàëà. Âîò ïðèìåð îáúÿâëåíèÿ API-ïðîöåäóðû ñ óêàçàíèåì åå
  5277.         îðäèíàëà:
  5278.  
  5279.     extern WINAPI "user32.dll"
  5280.     {
  5281.       ............
  5282.       long  MessageBoxA.429();
  5283.       ............
  5284.     }
  5285.  
  5286.         Â áèáëèîòåêàõ (DLL), èíîãäà ñóùåñòâóþò ïðîöåäóðû, äëÿ êîòîðûõ íå
  5287.     óêàçàíî èõ èìÿ, íî óêàçàí íîìåð îðäèíàëà. Âûçîâ òàêèõ ïðîöåäóð ïî èìåíè
  5288.     íå âîçìîæåí, íî ìîæíî ýòî ñäåëàòü ïî îðäèíàëó (åñëè, êîíå÷íî Âû çíàåòå,
  5289.     äëÿ ÷åãî ýòà ïðîöåäóðà è ÷òî îíà äåëàåò). Äëÿ ýòîãî â îáúÿâëåíèè
  5290.     API-ïðîöåäóðû Âàì íàäî ïðèäóìàòü äëÿ ýòîé ïðîöåäóðû óíèêàëüíîå èìÿ è
  5291.     óêàçàòü ðåàëüíûé îðäèíàë. Çàòåì â ïðîãðàììå Âû áóäåòå îáðàùàòüñÿ ê ýòîé
  5292.     ïðîöåäóðå ïî âûìûøëåííîìó èìåíè. Íî åñëè Âû ñëó÷àéíî îòêîìïèëèðóåòå òàêîé
  5293.     ôàéë áåç êëþ÷à <b>WO</b>, òî ïðè çàïóñêå ýòîé ïðîãðàììû Âû ïîëó÷èòå ñîîáùåíèå,
  5294.     î òîì, ÷òî äàííîãî èìåíè â áèáëèîòåêå íåò.
  5295.  
  5296.         Ê ñîæàëåíèþ, íåò íèêàêèõ ãàðàíòèé òîãî, ÷òî íîìåð îðäèíàëà äëÿ äàííîé
  5297.     ïðîöåäóðû íå èçìåíèòñÿ ïðè ñìåíå âåðñèè äèíàìè÷åñêîé áèáëèîòåêè. Ïîýòîìó
  5298.     èñïîëüçîâàòü îðäèíàëû íàäî îñòîðîæíî.
  5299. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5300.  
  5301.  
  5302. <h2 id=12.8.4>
  5303.     12.8.4 Ñîçäàíèå DLL ïîä Windows.
  5304. </h2>
  5305.  
  5306.         Äèíàìè÷åñêè ïîäêëþ÷àåìûå áèáëèîòåêè ïîçâîëÿò ïîëó÷àòü áîëåå
  5307.     êîìïàêòíûå ïðîãðàììû è óñêîðèòü ïðîöåññ êîìïèëÿöèè. Ê ìèíóñàì
  5308.     èñïîëüçîâàíèÿ DLL ìîæíî îòíåñòè íåîáõîäèìîñòü íàëè÷èÿ ñàìèõ ôàéëîâ DLL íà
  5309.     çàïóñêàåìîì êîìïüþòåðå è íåìíîãî óâåëè÷èâàåòñÿ âðåìÿ çàïóñêà ïðîãðàììû.
  5310.  
  5311.         Äëÿ òîãî ÷òîáû ïðîöåäóðà ñòàëà äîñòóïíîé äëÿ äðóãèõ ïðîãðàìì íàäî â
  5312.     èñõîäíîì òåêñòå ïåðåä èìåíåì ïðîöåäóðû ïðîïèñàòü êëþ÷åâîå ñëîâî - <b>_export</b>.
  5313.     Ïðèìåð:
  5314.  
  5315.       void _export testproc()
  5316.       {
  5317.         ....
  5318.       }
  5319.  
  5320.         Äëÿ òîãî ÷òîáû ñîçäàòü DLL, íóæíî íàïèñàòü ôàéë, â êîòîðîì áóäóò
  5321.     ïðîöåäóðû ñ êëþ÷åâûìè ñëîâàìè <b>_export</b>. Âñïîìîãàòåëüíûå ïðîöåäóðû, êîòîðûå
  5322.     ìîãóò ïîíàäîáèòüñÿ äëÿ ðàáîòû îñíîâíûõ ýêñïîðòèðóåìûõ ïðîöåäóð, îáúÿâëÿòü
  5323.     êàê <b>_export</b> íåîáÿçàòåëüíî. Çàòåì ýòîò ôàéë íóæíî îòêîìïèëèðîâàòü ñ êëþ÷îì
  5324.     /dll.  Â ðåçóëüòàòå Âû ïîëó÷èòå ãîòîâóþ äèíàìè÷åñêè ïîäêëþ÷àåìóþ
  5325.     áèáëèîòåêó.
  5326. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5327.  
  5328.  
  5329. <h2 id=12.8.5>
  5330.     12.8.5 Èíèöèàëèçàöèÿ DLL ïðè çàãðóçêå.
  5331. </h2>
  5332.  
  5333.         Èíîãäà, äëÿ ðàáîòû ïðîöåäóð èç äèíàìè÷åñêèõ áèáëèîòåê (DLL), áûâàåò
  5334.     íåîáõîäèìûì èíèöèàëèçèðîâàòü íåêîòîðûå ïåðåìåííûå çíà÷åíèÿìè, çàâèñÿùèìè
  5335.     îò òåêóùåãî ñîñòîÿíèÿ îïåðàöèîííîé ñèñòåìû, íàïðèìåð, ïîëó÷èòü äåñêðèïòîð
  5336.     ýòîé áèáëèîòåêè.
  5337.  
  5338.       Äèðåêòèâîé <b>#jumptomain NONE (-j0)</b> óïðàâëåíèå ïðè çàïóñêå ïåðåäàåòñÿ
  5339.     ñðàçó íà ïðîöåäóðó main.
  5340.  
  5341.       Âî âñåõ îñòàëüíûõ ñëó÷àÿõ ãåíåðèðóåòñÿ êîä çàãëóøêè è óïðàâëåíèå íà
  5342.     ïðîöåäóðó main íå ïåðåäàåòñÿ. Ôàêòè÷åñêè ïðîöåäóðà main â ýòîì ñëó÷àå íå
  5343.     íóæíà.
  5344.  
  5345.       Ïðîöåäóðà main ïðè ñîçäàíèè ôàéëîâ DLL äîëæíà âûãëÿäåòü íåìíîãî èíà÷å,
  5346.     ÷åì â äðóãèõ ñëó÷àÿõ:
  5347.  
  5348.     dword main ( dword hInstDLL, reason, reserv )
  5349.     {
  5350.       ...
  5351.     }
  5352. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5353.  
  5354.  
  5355. <h2 id=12.8.6>
  5356.     12.8.6 Êîìïèëÿöèÿ ðåñóðñîâ.
  5357. </h2>
  5358.  
  5359.         Âñòðîåííûé â C-- êîìïèëÿòîð ðåñóðñîâ ïî ñâîèì âîçìîæíîñòÿì óñòóïàåò
  5360.     ñïåöèàëèçèðîâàííûì êîìïèëÿòîðàì ðåñóðñîâ, íî ýòèõ âîçìîæíîñòåé, êàê ìíå
  5361.     êàæåòñÿ, áóäåò äîñòàòî÷íî äëÿ áîëüøèíñòâà Âàøèõ çàäà÷.
  5362.  
  5363.         Áóäåò ïðîùå ïåðå÷èñëèòü òî, ÷òî âñòðîåííûé â C-- êîìïèëÿòîð ðåñóðñîâ
  5364.     íå óìååò äåëàòü. Íå îáðàáàòûâàþòñÿ îïåðàòîðû ðåñóðñîâ: <b>VERSION</b>,
  5365.     <b>VERSIONINFO</b> è îïðåäåëÿåìûå ïîëüçîâàòåëåì ðåñóðñû. Ïðè íåîáõîäèìîñòè,
  5366.     äàííûå, ââîäèìûå ñ ïîìîùüþ ýòèõ îïåðàòîðîâ, ìîæíî ââåñòè ñ ïîìîùüþ
  5367.     îïåðàòîðà <b>RCDATA</b>. Ó ìíîãèõ îïåðàòîðîâ ðåñóðñîâ åñòü íåîáÿçàòåëüíûå
  5368.     ïàðàìåòðû <b>loading</b> è 'memory'.  Ïîääåðæêà ýòèõ ïàðàìåòðîâ íå
  5369.     ðåàëèçîâàíà. Âñòðåòèâ ýòè ïàðàìåòðû, êîìïèëÿòîð èõ ïðîñòî ïðîïóñòèò.
  5370.  
  5371.         Çàñòàâèòü êîìïèëÿòîð C-- îáðàáàòûâàòü ðåñóðñû ìîæíî äâóìÿ ñïîñîáàìè:
  5372.  
  5373.         1. Âêëþ÷èòü â ñâîé ïðîåêò äèðåêòèâîé <b>#include</b> ôàéë ñ ðàñøèðåíèåì
  5374.     <b>.rc</b>.  Ôàéëû ñ òàêèì ðàñøèðåíèåì êîìïèëÿòîð ñ÷èòàåò ôàéëîì ñ ðåñóðñàìè.
  5375.     Ôàéë ðåñóðñîâ íåîáõîäèìî âêëþ÷àòü â Âàø ïðîåêò ëèøü ïîñëå âêëþ÷åíèÿ
  5376.     çàãîëîâî÷íûõ ôàéëîâ Windows.
  5377.  
  5378.         2. Ðåñóðñû ìîæíî ðàñïîëàãàòü â òåëå èñõîäíîãî òåêñòà ïðîãðàììû â
  5379.     ïðîèçâîëüíîì ìåñòå. Òåêñò ðåñóðñîâ äîëæåí íà÷èíàòüñÿ ñ äèðåêòèâû <b>#pragma
  5380.     resource start</b>, à çàêàí÷èâàòüñÿ äèðåêòèâîé <b>#pragma resoutce end</b>.
  5381.     Ðåñóðñû ìîãóò áûòü ðàçäåëåííûìè íà ÷àñòè è ýòè ÷àñòè ìîæíî ðàñïîëàãàòü â
  5382.     ëþáîì óäîáíîì äëÿ Âàñ ìåñòå (ãëóïî ðàñïîëàãàòü ðåñóðñû â áëîêå
  5383.     êîììåíòàðèåâ è ïîòîì óäèâëÿòüñÿ, ïî÷åìó îíè íå áûëè îòêîìïèëèðîâàíû).
  5384.     Êîìïèëÿòîð ñîáåðåò ýòè ÷àñòè è îòêîìïèëèðóåò.
  5385.  
  5386.         Èìåíà îïåðàòîðîâ ìîæíî ïèñàòü êàê áîëüøèìè, òàê è ìàëåíüêèìè áóêâàìè,
  5387.     íî èìåíà èäåíòèôèêàòîðîâ ÷óâñòâèòåëüíû ê ðåãèñòðó.  Â òåêñòå ðåñóðñîâ
  5388.     ìîæíî èñïîëüçîâàòü äèðåêòèâû è êîììåíòàðèè.
  5389.  
  5390.         Íè÷òî íå ìåøàåò Âàì èñïîëüçîâàòü êîìïèëÿòîðû ðåñóðñîâ îò äðóãèõ
  5391.     ÿçûêîâ.  Ãëàâíîå, ÷òîáû ñèíòàêñèñ ôàéëà ðåñóðñîâ ñîîòâåòñòâîâàë âûáðàííîìó
  5392.     êîìïèëÿòîðó.
  5393. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5394.  
  5395.  
  5396. <h2 id=12.9>
  5397.   12.9 Âûõîäíûå ôàéëû äëÿ MeOS.
  5398. </h2>
  5399.  
  5400.       Èñïîëíÿåìûå ôàéëû äëÿ îïåðàöèîííîé ñèñòåìû MenuetOS ïîääåðæèâàþòñÿ
  5401.   êîìïèëÿòîðîì ñîâñåì íåäàâíî. Äëÿ òîãî, ÷òîáû îòêîìïèëèðîâàòü ôàéë äëÿ
  5402.   <b>MenuetOS</b>, íóæíî â îïöèÿõ êîìïèëÿòîðó óêàçàòü <b>/meos</b>. Âû ïîëó÷èòå ôàéë áåç
  5403.   ðàñøèðåíèÿ, êîòîðûé ïîòîì ìîæíî áóäåò âûïîëíèòü â ñðåäå îïåðàöèîííîé
  5404.   ñèñòåìû MenuetOS.
  5405.  
  5406.       Åñëè ïðè êîìïèëÿöèè ôàéëà Âû íå óêàçûâàëè îïöèþ <b>/j0</b> èëè íå
  5407.   èñïîëüçîâàëè äèðåêòèâó <b>#jumptomain NONE</b>, òî êîìïèëÿòîð áóäåò èñïîëüçîâàòü
  5408.   ôàéë íà÷àëüíîé èíèöèàëèçàöèè <b>startup.h--</b>, â êîòîðîì äëÿ îïåðàöèîííîé
  5409.   ñèñòåìû MenuetOS ñîçäàí áëîê èíèöèàëèçàöèè è çàâåðøåíèÿ ïðîãðàììû.
  5410.   Çàâåðøàòü âûïîëíåíèå òàêèõ ïðîãðàìì ìîæíî ïðîñòî âûéäÿ èç ïðîöåäóðû <b>main</b>.
  5411. <a href="#contents12"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5412.  
  5413.  
  5414. <h2 id=13.1>
  5415. 13. Ïðèëîæåíèÿ.
  5416.  
  5417.   13.1 Ïîèñê âêëþ÷àåìûõ ôàéëîâ.
  5418. </h2>
  5419.  
  5420.       Ïîèñê âêëþ÷àåìîãî â âàøó ïðîãðàììó ôàéëà, èìÿ êîòîðîãî îáúÿâëÿåòñÿ
  5421.   äèðåêòèâîé <b>include</b> è çàêëþ÷åíî â äâîéíûå êàâû÷êè "", ïðîèçâîäèòñÿ
  5422.   êîìïèëÿòîðîì ïî òàêîé ñõåìå:
  5423.  
  5424.   ñíà÷àëà äåëàåòñÿ ïîïûòêà îòêðûòü ôàéë â òåêóùåé äèðåêòîðèè. Åñëè ôàéëà òàì
  5425.   íåò, òî äàëåå äåëàåòñÿ ïîïûòêà îòêðûòü ôàéë â äèðåêòîðèè óêàçàííîé
  5426.   äèðåêòèâîé <b>#includepath</b>. Åñëè äèðåêòèâà íå áûëà çàäàíà èëè ôàéëà â ýòîé
  5427.   äèðåêòîðèè íå îêàçàëîñü, òî äåëàåòñÿ ïîïûòêà îòêðûòü ôàéë â äèðåêòîðèè
  5428.   óêàçàííîé â êîìàíäíîé ñòðîêå êîìàíäîé <b>/ip=path</b>. Åñëè ýòà êîìàíäà íå áûëà
  5429.   çàäàíà èëè ôàéëà â óêàçàííîé äèðåêòîðèè íå îêàçàëîñü, òî äåëàåòñÿ ïîïûòêà
  5430.   îòêðûòü ôàéë â äèðåêòîðèè óêàçàííîé â ôàéëå C--.INI êîìàíäîé <b>ip=</b>. Åñëè ýòà
  5431.   êîìàíäà íå áûëà çàäàíà èëè ôàéëà â óêàçàííîé äèðåêòîðèè íå îêàçàëîñü, òî
  5432.   äåëàåòñÿ ïîïûòêà îòêðûòü ôàéë â äèðåêòîðèè, íà êîòîðóþ óêàçûâàåò ïåðåìåííàÿ
  5433.   îêðóæåíèÿ C--. Åñëè ïåðåìåííàÿ îêðóæåíèÿ íå áûëà çàäàíà èëè ôàéëà â ýòîé
  5434.   äèðåêòîðèè íå îêàçàëîñü, òî äåëàåòñÿ ïîñëåäíÿÿ ïîïûòêà îòêðûòü ôàéë â
  5435.   äèðåêòîðèè, îòêóäà áûë çàïóùåí êîìïèëÿòîð.
  5436.  
  5437.       Åñëè èìÿ âêëþ÷àåìîãî ôàéëà çàêëþ÷åíî â óãëîâûå ñêîáêè < >, òî ïîèñê
  5438.   ýòîãî ôàéëà ïðîèçâîäèòñÿ â ïðîòèâîïîëîæíîì íàïðàâëåíèè, çà èñêëþ÷åíèåì
  5439.   òîãî, ÷òî ïîèñê â òåêóùåé äèðåêòîðèè íå ïðîèçâîäèòñÿ.
  5440.  
  5441.       Äëÿ êîíñîëüíîé âåðñèè êîìïèëÿòîðà èìåíà ãëàâíîãî ìîäóëÿ è âêëþ÷àåìûõ
  5442.   ôàéëîâ ìîãóò èìåòü äëèíó áîëåå 8 ñèìâîëîâ.
  5443. <a href="#contents13"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5444.  
  5445.  
  5446. <h2 id=13.2>
  5447.   13.2 Ðåãèñòðû, êîòîðûå äîëæíû áûòü ñîõðàíåíû.
  5448. </h2>
  5449.  
  5450.       Ðåãèñòðû, êîòîðûå äîëæíû ñîõðàíÿòüñÿ - BP, DI, SI, DS, SS, SP, CS è IP.
  5451.  
  5452.       BP èñïîëüçóåòñÿ êàê óêàçàòåëü íà ëîêàëüíûå è ïàðàìåòðè÷åñêèå
  5453.   ïåðåìåííûå â ñòåêå, ÷òî è òðåáóåò åãî ñîõðàíåíèÿ.
  5454.  
  5455.       DI è SI ñîõðàíÿòü íå îáÿçàòåëüíî, åñëè ïðîãðàììèñò îñîçíàåò
  5456.   ïîñëåäñòâèÿ. DI è SI ÷àñòî èñïîëüçóþòñÿ äëÿ èíäåêñàöèè ìàññèâîâ, êàê
  5457.   íàïðèìåð â ôîðìóëå:
  5458.  
  5459.         dog = firehydrant(1,red) + legs[DI];
  5460.  
  5461.       Åñëè DI íå ñîõðàíÿëñÿ â ïðîöåäóðå firehydrant, çíà÷åíèå, ïðèñâîåííîå
  5462.   ïåðåìåííîé dog, ñêîðåå âñåãî, áóäåò íåïðàâèëüíûì, ïîñêîëüêó èíäåêñ äëÿ
  5463.   ìàññèâà legs áûë èçìåíåí.  ñóùíîñòè, äëÿ òî÷íîãî ñîãëàñîâàíèÿ âñå
  5464.   ïðîöåäóðû äîëæíû èìåòü ñïåöèàëüíîå óêàçàíèå â êîììåíòàðèè íà òî, ÷òî â íèõ
  5465.   íå ñîõðàíÿåòñÿ ñîäåðæèìîå ðåãèñòðîâ DI è/èëè SI.
  5466.  
  5467.       DS óêàçûâàåò íà ñåãìåíò äàííûõ, è âñå îïåðàöèè ñ ãëîáàëüíûìè
  5468.   ïåðåìåííûìè ïîëüçóþòñÿ ýòèì çíà÷åíèåì.
  5469.  
  5470.       SS õðàíèò ñåãìåíò ñòåêà è äîëæåí ñîõðàíÿòüñÿ. SP óêàçûâàåò íà òåêóùóþ
  5471.   ïîçèöèþ â ñòåêå è òîæå äîëæåí ñîõðàíÿòüñÿ.
  5472.  
  5473.       CS õðàíèò ñåãìåíò êîäà ïðîãðàììû.  Âñå êîìàíäû âûáèðàþòñÿ ñ
  5474.   èñïîëüçîâàíèåì CS è IP, ñëåäîâàòåëüíî èõ çíà÷åíèÿ äîëæíû ñîõðàíÿòüñÿ. IP,
  5475.   êàê èçâåñòíî, óêàçàòåëü àäðåñà êîìàíäû, è CS è IP íåïîñðåäñòâåííî íå ìîãóò
  5476.   èçìåíÿòüñÿ â ïðîöåññîðàõ 8086, 8088, 80286, 80386, 80486,...
  5477. <a href="#contents13"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5478.  
  5479.  
  5480. <h2 id=13.3>
  5481.   13.3 C--.ini ôàéë.
  5482. </h2>
  5483.  
  5484.       C--.ini ôàéë ïðåäíàçíà÷åí äëÿ ïðåäóñòàíîâêè ïî óìîë÷àíèþ ïàðàìåòðîâ
  5485.   êîìïèëÿòîðà.
  5486.  
  5487.       Ñåé÷àñ êîìïèëÿòîð ïîääåðæèâàåò îãðîìíîå ÷èñëî ïàðàìåòðîâ êîìàíäíîé
  5488.   ñòðîêè. Ïðàâèëüíîå èõ èñïîëüçîâàíèå ïîçâîëèò Âàì ïîëó÷àòü áîëåå êîìïàêòíûé
  5489.   êîä è ìîæåò çíà÷èòåëüíî îáëåã÷èòü Âàì îòëàäêó ïðîãðàììû. Íî òàê êàê ýòèõ
  5490.   ïàðàìåòðîâ î÷åíü ìíîãî íàáèðàòü èõ êàæäûé ðàç â êîìàíäíîé ñòðîêå áûâàåò
  5491.   óòîìèòåëüíî è íå èñêëþ÷åíà âîçìîæíîñòü ïðîïóñòèòü êàêîé-íèáóäü ïàðàìåòð.
  5492.   ×òîáû èçáàâèòü Âàñ îò âñåõ ýòèõ íàïàñòåé è áûë ââåäåí c--.ini ôàéë.
  5493.  
  5494.        Ïàðàìåòðû êîìàíäíîé ñòðîêè ïðîïèñûâàþòñÿ â ýòîì ôàéëå ïîñòðî÷íî.
  5495.   Ñèíòàêñèñ òîò æå, ÷òî è â êîìàíäíîé ñòðîêå, íî áåç âåäóùåãî îáðàòíîãî ñëýøà
  5496.   èëè ìèíóñà. Åñëè ôàéë ðàñïîëîæåí â äèðåêòîðèè, íà êîòîðóþ óêàçûâàåò
  5497.   ïåðåìåííàÿ îêðóæåíèÿ <b>set c--=<path></b> èëè åñëè ýòà ïåðåìåííàÿ íå îïðåäåëåíà,
  5498.   òî â òîé æå äèðåêòîðèè ãäå è ôàéë c--.exe, òî ýòè ïàðàìåòðû
  5499.   ðàñïðîñòðàíÿþòñÿ íà âñå êîìïèëèðóåìûå ïðîãðàììû. Åñëè æå ôàéë c--.ini
  5500.   ðàñïîëîæåí â òåêóùåé äèðåêòîðèè, òî ïàðàìåòðû ñ÷èòûâàþòñÿ òîëüêî èç ýòîãî
  5501.   ôàéëà è äåéñòâóþò òîëüêî äëÿ òåêóùåãî ïðîåêòà.
  5502.  
  5503.       Äîïóñòèìî èñïîëüçîâàíèå êîììåíòàðèåâ. Ïðèçíàêîì íà÷àëà êîììåíòàðèÿ
  5504.   ÿâëÿåòñÿ ñèìâîë <b>;</b>. Âñå ïîñëåäóþùèå ñèìâîëû ïîñëå <b>;</b> è äî êîíöà ñòðîêè
  5505.   ñ÷èòàþòñÿ êîììåíòàðèåì.
  5506.  
  5507.       Ïðèìåð C--.ini ôàéëà:
  5508.  
  5509.   r-
  5510.   X
  5511.   3     ;ýòî êîììåíòàðèé
  5512.   os
  5513.  
  5514.       ini-ôàéë ìîæåò èìåòü ëþáîå èìÿ (íî ðàñøèðåíèå äîëæíî áûòü îáÿçàòåëüíî
  5515.   ini). Èìÿ ýòîãî ôàéëà ñ ðàñøèðåíèåì äîëæíî áûòü ïåðåäàíî êîìïèëÿòîðó â
  5516.   êîìàíäíîé ñòðîêå. Ôàéë c--.ini çàãðóæàåòñÿ è îáðàáàòûâàåòñÿ àâòîìàòè÷åñêè
  5517.   äî çàãðóçêè ôàéëà óêàçàííîãî â êîìàíäíîé ñòðîêå.
  5518.  
  5519.       Òàêèì îáðàçîì, ôàéë *.ini ìîæíî èñïîëüçîâàòü ïîäîáíî make-ôàéëó - â íåì
  5520.   Âû ìîæåòå óêàçàòü è èìÿ ãëàâíîãî êîìïèëèðóåìîãî ìîäóëÿ, è âñå íåîáõîäèìûå
  5521.   äëÿ åãî êîìïèëÿöèè íàñòðîéêè.
  5522.  
  5523.       Êàê àëüòåðíàòèâó c--.ini ôàéëó, ïàðàìåòðû êîìàíäíîé ñòðîêè ìîæíî
  5524.   ïðîïèñûâàòü íåïîñðåäñòâåííî â íà÷àëå ãëàâíîãî ôàéëà êîìïèëèðóåìîãî ïðîåêòà,
  5525.   èñïîëüçóÿ äèðåêòèâó <b>pragma option</b>. Ñ îäíîé ñòîðîíû ýòî îáåñïå÷èò Âàøåìó
  5526.   ïðîåêòó íåçàâèñèìîñòü îò íàñòðîåê êîìïèëÿòîðà, åñëè Âàø ïðîåêò áóäåò
  5527.   êîìïèëèðîâàòüñÿ íà äðóãîì êîìïüþòåðå. Íî ñ äðóãîé ñòîðîíû íåêîòîðûå
  5528.   íàñòðîéêè ÿâëÿþòñÿ èíäèâèäóàëüíûìè äëÿ äàííîãî êîìïüþòåðà (ýòî ðàñïîëîæåíèå
  5529.   áèáëèîòåê, èìåíà è ðàñïîëîæåíèå stub-ôàéëîâ). Êàêîé âàðèàíò èñïîëüçîâàòü
  5530.   ðåøàòü Âàì, íî êàê ãîâîðÿò, è ÿ ñ ýòèì ñîãëàñåí, ëó÷øå ïîëüçîâàòüñÿ çîëîòîé
  5531.   ñåðåäèíîé - ×àñòü ïàðàìåòðîâ ïðîïèñàòü â c--.ini ôàéëå, à äðóãóþ
  5532.   íåïîñðåäñòâåííî â êîìïèëèðóåìîì ôàéëå.
  5533. <a href="#contents13"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5534.  
  5535.  
  5536. <h2 id=13.4>
  5537.   13.4 startup.h-- ôàéë.
  5538. </h2>
  5539.  
  5540.       Â ýòîì ôàéëå íàõîäÿòñÿ èñõîäíûå òåêñòû, êîòîðûå êîìïèëèðóþòñÿ
  5541.   êîìïèëÿòîðîì â êîä íà÷àëüíîé èíèöèàëèçàöèè ôàéëà, äëÿ âñåõ ïîääåðæèâàåìûõ
  5542.   êîìïèëÿòîðîì òèïîâ âûõîäíûõ ôàéëîâ. Ýòîò ôàéë äîëæåí íàõîäèòñÿ ëèáî â
  5543.   äèðåêòîðèè âìåñòå ñ êîìïèëÿòîðîì, ëèáî â äèðåêòîðèè ñ áèáëèîòå÷íûìè ôàéëàìè.
  5544.   Ýòîò ôàéë âêëþ÷àåòñÿ êîìïèëÿòîðîì â ïðîåêò àâòîìàòè÷åñêè, à âêëþ÷åíèå åãî
  5545.   äèðåêòèâîé <b>include</b> ìîæåò ïðèâåñòè ê íåæåëàòåëüíûì ðåçóëüòàòàì.
  5546.  
  5547.        áëîêå íà÷àëüíîé èíèöèàëèçàöèè ïðîãðàììû ìîæåò ïðîèçâîäèòñÿ (åñëè Âû
  5548.   ýòî óêàæåòå ñ ïîìîùüþ îïöèé êîìàíäíîé ñòðîêè èëè èñïîëüçóÿ äèðåêòèâû),
  5549.   ðàçáîð êîìàíäíîé ñòðîêè íà ïàðàìåòðû, ñîõðàíåíèå ïåðåìåíîé îêðóæåíèÿ,
  5550.   ïîääåðæêà ðàáîòû ïðîöåäóðû <b>ATEXIT</b>, èçìåíåíèå ðàçìåðà äîñòóïíîé ïàìÿòè äëÿ
  5551.   *.com ôàéëîâ è ìíîãèå äðóãèå ïîäãîòîâèòåëüíûå îïåðàöèè. Åñëè Âû
  5552.   îòêîìïèëèðóåòå ñâîé ôàéë íå èñïîëüçóÿ íèêàêèõ îïöèé êîìàíäíîé ñòðîêè è ó
  5553.   Âàñ áóäåò îòñóòñòâîâàòü c--.ini ôàéë, à â ñàìîì êîìïèëèðóåìîì ôàéëå ó Âàñ
  5554.   áóäóò îòñóòñòâîâàòü äèðåêòèâû, òî ïðè êîìïèëÿöèè *.com ôàéëà â íåãî áóäåò
  5555.   âêëþ÷åí áëîê èçìåíÿþùèé ðàçìåð äîñòóïíîé ïàìÿòè è ñèãíàòóðà <b>SPHINXC--</b>.
  5556.  
  5557.       Åñëè Âû êîìïèëèðóåòå ôàéë òèïà *.exe (êðîìå ôàéëà ìîäåëè tiny äëÿ DOS)
  5558.   è èñïîëüçóåòå äèðåêòèâó <b>jumptomain NONE</b> èëè êëþ÷ êîìàíäíîé ñòðîêè <b>/j0</b>,
  5559.   òî äëÿ ýòîãî ïðîåêòà ôàéë startup.h-- êîìïèëÿòîðîì íå èñïîëüçóåòñÿ. Íå
  5560.   èñïîëüçóåòñÿ ýòîò ôàéë òàêæå ïðè êîìïèëÿöèè *.com ôàéëîâ åñëè, êðîìå <b>/j0</b>,
  5561.   â ýòîì ïðîåêòå íå èñïîëüçóåòñÿ ðàçáîð êîìàíäíîé ñòðîêè (<b>/p /argc</b>), íå
  5562.   ïðèìåíÿåòñÿ ïðîöåäóðà <b>ATEXIT (/at)</b>, íå èñïîëüçóåòñÿ àäðåñ ïåðåìåííîé
  5563.   îêðóæåíèÿ <b>(/env)</b>, íå èñïîëüçóåòñÿ î÷èñòêà îáëàñòè post-àäðåñîâ <b>(/cpa)</b>, íå
  5564.   èñïîëüçóåòñÿ óìåíüøåíèå äîñòóïíîé ïðîãðàììå ïàìÿòè <b>(/r)</b> è íå èñïîëüçóåòñÿ
  5565.   çàãëóøêà íàæàòèé <b>CTRL-C (/c)</b>.
  5566.  
  5567.       Êðîìå áëîêà íà÷àëüíîé èíèöèàëèçàöèè ïðîãðàììû â ôàéëå startup.h--
  5568.   íàõîäÿòñÿ äèíàìè÷åñêèå ïðîöåäóðû:
  5569.  
  5570.   void CLEARPOSTAREA( (E)AX );  - î÷èñòêà post-îáëàñòè äàííûõ.
  5571.   unsigned int PARAMSTR( ECX ); - ïîëó÷èòü àäðåñ ýëåìåíòà êîìàíäíîé ñòðîêè
  5572.   unsigned int PARAMCOUNT();    - ïîëó÷èòü ÷èñëî ýëåìåíòîâ â êîìàíäíîé ñòðîêå
  5573.  
  5574.       Ïðè ðàçáîðå êîìàíäíîé ñòðîêè íà ñîñòàâëÿþùèå åå ýëåìåíòû äëÿ 32-áèòíûõ
  5575.   ïðîãðàìì ðåàëèçîâàíà ïîääåðæêà äëèííûõ èìåí. Äëÿ 16-áèòíûõ ïðîãðàìì
  5576.   ïîääåðæêà ðàçáîðà êîìàíäíîé ñòðîêè ñ ó÷åòîì äëèííûõ èìåí ïîäêëþ÷àåòñÿ, åñëè
  5577.   Âû â íà÷àëå ñâîé ïðîãðàììû óêàæåòå äèðåêòèâó:
  5578.  
  5579.   #define _USELONGNAME TRUE
  5580.  
  5581.       ëèáî â c--.ini ôàéëå èëè â êîìàíäíîé ñòðîêå êîìïèëÿòîðà óêàæåòå îïöèþ
  5582.   <b>d=_USELONGNAME</b>.
  5583. <a href="#contents13"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5584.  
  5585.  
  5586. <h2 id=13.5>
  5587.   13.5 mainlib.ldp ôàéë.
  5588. </h2>
  5589.  
  5590.        ýòîì ôàéëå íàõîäèòñÿ áîëüøîå ÷èñëî ïðîöåäóð èç îñíîâíîé áèáëèîòåêè
  5591.   êîìïèëÿòîðà â óæå îòêîìïèëèðîâàííîì âèäå. Âñå ïðîöåäóðû îòêîìïèëèðîâàíû â
  5592.   4-õ ðàçëè÷íûõ ðåæèìàõ îïòèìèçàöèè.  ýòîò ôàéë òàêæå âûíåñåíû ìíîãèå
  5593.   ïðîöåäóðû, êîòîðûå ðàíåå áûëè âíóòðè êîìïèëÿòîðà. Èñïîëüçîâàíèå ðàíåå
  5594.   îòêîìïèëèðîâàííûõ ïðîöåäóð ïîâûøàåò ñêîðîñòü êîìïèëÿöèè.
  5595.  
  5596.       Ýòè ïðîöåäóðû îòêîìïèëèðîâàíû òîëüêî äëÿ 16-áèòíîãî ðåæèìà ðàáîòû
  5597.   ïðîãðàììû. Åñëè Âû áóäåòå èñïîëüçîâàòü ýòè ïðîöåäóðû â 32-áèòíîé ïðîãðàììå,
  5598.   òî êîìïèëÿòîð íà ýòî íå âûäàñò íèêàêèõ ñîîáùåíèé è âêëþ÷èò ýòó ïðîöåäóðó â
  5599.   Âàø êîä. Íî ïðè çàïóñêå òàêîé ïðîãðàììû îíà íåèçáåæíî ïîòåðïèò êðàõ.
  5600.  
  5601.       Èñïîëüçîâàòü ýòó áèáëèîòåêó î÷åíü ïðîñòî. Âñå ÷òî íóæíî, ýòî
  5602.   ðàñïîëîæèòü ýòó áèáëèîòåêó â îäíîé ñ êîìïèëÿòîðîì äèðåêòîðèè. Òîãäà
  5603.   êîìïèëÿòîð, åñëè âñòðåòèò â âàøåé ïðîãðàììå âûçîâ ïðîöåäóðû, êîòîðàÿ íå
  5604.   áûëà îïðåäåëåíà íè âî âêëþ÷àåìûõ â ïðîãðàììó áèáëèîòå÷íûõ ôàéëàõ, íè â
  5605.   âàøåé ïðîãðàììå, áóäåò èñêàòü ýòó ïðîöåäóðó â ôàéëå mainlib.ldp. Åñëè ýòà
  5606.   ïðîöåäóðà áóäåò íàéäåíà â ýòîì ôàéëå, òî åå êîä áóäåò ïåðåíåñåí â Âàø ôàéë,
  5607.   èíà÷å áóäåò âûäàíî ñîîáùåíèå î íåèçâåñòíîé ïðîöåäóðå. Òàêèì îáðàçîì, ÷òîáû
  5608.   ïðîöåäóðà áûëà âñòàâëåíà â âàøó ïðîãðàììó èç áèáëèîòåêè mainlib.ldp Âàì
  5609.   íóæíî â ñâîþ ïðîãðàììó íå âêëþ÷àòü áèáëèîòå÷íûé ôàéë, ñîäåðæàùèé ïðîöåäóðó ñ
  5610.   òàêèì æå èìåíåì.
  5611.  
  5612.       Ñïèñîê ïðîöåäóð íàõîäÿùèõñÿ â ýòîé áèáëèîòåêå ìîæíî ïîëó÷èòü ñ ïîìîùüþ
  5613.   ñïåöèàëüíîé ïðîãðàììû cmmlib.exe. Ýòó ïðîãðàììó ìîæíî íàéòè â àðõèâå
  5614.   cmmlib.rar. Èçâëåêèòå ïðîãðàììó cmmlib.exe èç ýòîãî àðõèâà è ðàñïîëîæèòå åå
  5615.   â îäíîé ñ êîìïèëÿòîðîì äèðåêòîðèè. Çàòåì çàïóñòèòå ýòó ïðîãðàììó ñ êëþ÷îì
  5616.   /L è Âû ïîëó÷èòå ñïèñîê ïðîöåäóð íàõîäÿùèõñÿ â ýòîé áèáëèîòåêå.
  5617. <a href="#contents13"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5618.  
  5619.  
  5620. <h2 id=13.6>
  5621.   13.6 C-- ñèìâîëû.
  5622. </h2>
  5623.  
  5624.   SYMBOL|FUNCTION                  |EXAMPLE
  5625.   --------------------------------------------------------------------
  5626.     /*  |íà÷èíàþò áëîê êîììåíòàðèÿ |/* êîììåíòàðèé */
  5627.     */  |çàâåðøàþò áëîê êîììåíòàðèÿ|/* êîììåíòàðèé */
  5628.         |                          |
  5629.     //  |êîììåíòàðèé äî êîíöà ëèíèè|// êîììåíòàðèé
  5630.         |                          |
  5631.      =  |ïðèñâîåíèå                |AX = 12;
  5632.      +  |ñëîæåíèå                  |AX = BX + 12;
  5633.      -  |âû÷èòàíèå                 |house = dog - church;
  5634.      *  |óìíîæåíèå èëè óêàçàòåëü   |x = y * z; AL = * var;
  5635.      /  |äåëåíèå                   |x1 = dog / legs;
  5636.      &  |ïîðàçðÿäíîå ëîãè÷åñêîå È  |polution = stupid & pointless;
  5637.      |  |ïîðàçðÿäíîå ëîãè÷åñêîå ÈËÈ|yes = i | mabe;
  5638.      ^  |ïîðàçðÿäí. èñêëþ÷àþùåå ÈËÈ|snap = got ^ power;
  5639.     <<  |áèòîâûé ñäâèã âëåâî       |x = y << z;
  5640.     >>  |áèòîâûé ñäâèã âïðàâî      |x = y >> z;
  5641.         |                          |
  5642.     +=  |ñëîæåíèå                  |fox += 12;   // fox = fox +12;
  5643.     -=  |âû÷èòàíèå                 |cow -= BX;   // cow = cow - BX;
  5644.     *=  |óìíîæåíèå                 |a *= b;      // a = a * b;
  5645.     /=  |äåëåíèå                   |a /= b;      // a = a / b;
  5646.     &=  |ïîðàçðÿäíîå ëîãè÷åñêîå È  |p &= q;      // p = p & q;
  5647.     |=  |ïîðàçðÿäíîå ëîãè÷åñêîå ÈËÈ|p |= z;      // p = p | z;
  5648.     ^=  |ïîðàçðÿäí. èñêëþ÷àþùåå ÈËÈ|u ^= s;      // u = u ^ s;
  5649.     <<= |áèòîâûé ñäâèã âëåâî       |x <<= z;     // x = x << z
  5650.     >>= |áèòîâûé ñäâèã âïðàâî      |x >>= z;     // x = x >> z
  5651.         |                          |
  5652.     ><  |îáìåí çíà÷åíèÿìè          |x >< y; /* ìåíÿåò ìåñòàìè çíà÷åíèÿ x è y */
  5653.         |                          |
  5654.     ==  |ïðîâåðêà íà ðàâåíñòâî     |IF(AX == 12)
  5655.      >  |ïðîâåðêà íà áîëüøå ÷åì    |IF(junk > BOGUS)
  5656.      <  |ïðîâåðêà íà ìåíüøå ÷åì    |if( x < y )
  5657.     >=  |ïðîâåðêà áîëüøå èëè ðàâíî |if(AX >= 12)
  5658.     <=  |ïðîâåðêà ìåíüøå èëè ðàâíî |IF(BL >= CH)
  5659.    !=   |ïðîâåðêà íà íåðàâåíñòâî   |IF(girl != boy)
  5660.     <>  |ïðîâåðêà íà îòëè÷èå       |if (cat<>dog) /* òà æå ôóíêöèÿ ÷òî != */
  5661.         |                          |
  5662.     @   |âñòàâêà êîäà              |@ COLDBOOT(); /* âñòàâëÿåò COLDBOOT êîä */
  5663.     :   |äèíàìè÷åñêàÿ ïðîöåäóðà    |: functionname () //îáúÿâëÿåò functionname
  5664.     $   |àññåìáëåðíàÿ êîìàíäà      |$ PUSH AX   /* çàíîñèò AX â ñòåê */
  5665.     #   |ïîëó÷åíèå àäðåñà(ñìåùåíèÿ)|loc = #cow;    /* loc = address of cow */
  5666.         |èëè äèðåêòèâà             | #resize FALSE
  5667.     !   |îïåðàòîð NOT èëè ñìåíà    |!x_var;  if(!proc())
  5668.         |ôëàãà îïåðàöèè ñðàâíåíèÿ. |
  5669.    ...  |ëþáîå ÷èñëî ïàðàìåòðîâ â  | void proc(...);
  5670.    ::   |ðàçðåøåíèå âèäèìîñòè      | ::var=0;
  5671. <a href="#contents13"><FONT size=-1 COLOR="#ff0000">Return to contents.</FONT></A>
  5672.  
  5673. </PRE>
  5674. </body>
  5675. <br><br>
  5676. </HTML>
  5677.