Subversion Repositories Kolibri OS

Rev

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

  1. <HTML>
  2. <HEAD><TITLE>Äîêóìåíòàöèÿ íà C--</TITLE></HEAD>
  3. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  4. <table border="0" cellpadding="0" cellspacing="0" width="100%">
  5.   <tr>
  6.     <td width="1"></td>
  7.     <td width="1"></td>
  8.     <td width="100%">
  9.       <div align="center">
  10.         <center>
  11.           <table border="0" cellpadding="0" cellspacing="0" width="100%">
  12.             <tr><td bgcolor="#000000"><img src="images/-.gif" width="1" height="1"></td></tr>
  13.             <tr><td><img src="images/-.gif" width="1" height="1"></td></tr>
  14.             <tr><td bgcolor="#000000"><img src="images/-.gif" width="1" height="1"></td></tr>
  15.             <tr><td align="middle" bgcolor="#008080">
  16.               <font color="#FFFFFF" face="Times New Roman" size=3>
  17.               <strong><em>Äîêóìåíòàöèÿ íà C--.</em></strong></font>
  18.             </td></tr>
  19.             <tr><td bgcolor="#000000"><img src="images/-.gif" width="1" height="1"></td></tr>
  20.             <tr><td><img src="images/-.gif" width="1" height="1"></td></tr>
  21.             <tr><td bgcolor="#000000"><img src="images/-.gif" width="1" height="1"></td></tr>
  22.             <td width="100%">
  23. <BODY LINK="#0000ff" VLINK="#800080" background="images/sphinx6.jpg" bgproperties="fixed">
  24.  
  25. <A name=contents>
  26. <p align="center"><font color="#F000F0" face="Times New Roman" size=5><strong>
  27. Ñîäåðæàíèå.
  28. </strong></font></p></a>
  29.                 <pre>
  30.  
  31. <B><FONT FACE="Courier" COLOR="#ff0000">
  32. <A href="#intro" style="TEXT-DECORATION: none">1      Ââåäåíèå.
  33. 1.1    Èñòîðèÿ ñîçäàíèÿ è ðàçâèòèÿ.</A>
  34. <A href="#1.2" style="TEXT-DECORATION: none">1.2    ×òî òàêîå C--?</a>
  35. <A href="#1.3" style="TEXT-DECORATION: none">1.3    Êàê óñòàíîâèòü C--.</a>
  36. <A name=contents2>
  37. <A href="#2.1" style="TEXT-DECORATION: none">2.     Óïðàâëåíèå êîìïèëÿöèåé.
  38. 2.1    Ïàðàìåòðû êîìàíäíîé ñòðîêè êîìïèëÿòîðà C--.</a>
  39. <A href="#2.1.1" style="TEXT-DECORATION: none">2.1.1  /ON - Îïòèìèçàöèÿ ÷èñëîâûõ âûðàæåíèé.</a>
  40. <A href="#2.1.2" style="TEXT-DECORATION: none">2.1.2  /DE - Âðåìåííîå ðàñøèðåíèå ðàçðÿäíîñòè ïåðåìåííîé.</a>
  41. <A href="#2.1.3" style="TEXT-DECORATION: none">2.1.3  /ARGC - Àëüòåðíàòèâíûé îáðàáîò÷èê êîìàíäíîé ñòðîêè.</a>
  42. <A href="#2.1.4" style="TEXT-DECORATION: none">2.1.4  /OST - ñëèÿíèå îäèíàêîâûõ ñòðîêîâûõ êîíñòàíò.</a>
  43. <A href="#2.1.5" style="TEXT-DECORATION: none">2.1.5  /D - óñòàíîâêà èäåíòèôèêàòîðà â TRUE èç êîìàíäíîé ñòðîêè.</a>
  44. <A href="#2.1.6" style="TEXT-DECORATION: none">2.1.6  /IA - óïðîùåííûé ââîä àññåìáëåðíûõ èíñòðóêöèé.</a>
  45. <A href="#2.1.7" style="TEXT-DECORATION: none">2.1.7  /CRI - ïðîïóñê ïîâòîðíî âêëþ÷àåìîãî ôàéëà.</a>
  46. <A href="#2.1.8" style="TEXT-DECORATION: none">2.1.8  /IND - èìïîðò èìåí ïðîöåäóð èç DLL.</a>
  47. <A href="#2.1.9" style="TEXT-DECORATION: none">2.1.9  /WS - çàäàòü èìÿ stub ôàéëà äëÿ ïðîãðàìì ïîä windows.</a>
  48. <A href="#2.1.10" style="TEXT-DECORATION: none">2.1.10 /WBSS - ðàçìåñòèòü íå èíèöèàëèçèðîâàííûå äàííûå â îòäåëüíîé ñåêöèè.</a>
  49. <A href="#2.1.11" style="TEXT-DECORATION: none">2.1.11 /DBG - ñîçäàíèå îòëàäî÷íîé èíôîðìàöèè.</a>
  50. <A href="#2.1.12" style="TEXT-DECORATION: none">2.1.12 /J0 /J1 /J2.</a>
  51. <A href="#2.1.13" style="TEXT-DECORATION: none">2.1.13 /LST - Ñîçäàíèå àññåìáëåðíîãî ëèñòèíãà.</a>
  52. <A href="#2.1.14" style="TEXT-DECORATION: none">2.1.14 /ENV - Ñîõðàíåíèå àäðåñà ïåðåìåííûõ îêðóæåíèÿ.</a>
  53. <A href="#2.1.15" style="TEXT-DECORATION: none">2.1.15 /CPA - Î÷èñòêà post-îáëàñòè äàííûõ.</a>
  54. <A href="#2.1.16" style="TEXT-DECORATION: none">2.1.16 /W - âûâîä ïðåäóïðåæäåíèé.</a>
  55. <A href="#2.1.17" style="TEXT-DECORATION: none">2.1.17 /NW - Âûáîðî÷íîå îòêëþ÷åíèå òèïîâ ïðåäóïðåæäåíèé.</a>
  56. <A href="#2.1.18" style="TEXT-DECORATION: none">2.1.18 /WSI - êîðîòêàÿ òàáëèöà èìïîðòà.</a>
  57. <A href="#2.2" style="TEXT-DECORATION: none">2.2    Äèðåêòèâû òðàíñëÿòîðà.</a>
  58. <A href="#2.2.1" style="TEXT-DECORATION: none">2.2.1  ?ifdef/?ifndef</a>
  59. <A href="#2.2.2" style="TEXT-DECORATION: none">2.2.2  ?initallvar</a>
  60. <A href="#2.2.3" style="TEXT-DECORATION: none">2.2.3  ?usestartup</a>
  61. <A href="#2.2.4" style="TEXT-DECORATION: none">2.2.4  ?startusevar</a>
  62. <A href="#2.2.5" style="TEXT-DECORATION: none">2.2.5  ?atexit</a>
  63. <A href="#2.2.6" style="TEXT-DECORATION: none">2.2.6  ?startuptomain</a>
  64. <A href="#2.2.7" style="TEXT-DECORATION: none">2.2.7  ?undef</a>
  65. <A href="#2.2.8" style="TEXT-DECORATION: none">2.2.8  ?align è ?aligncode</a>
  66. <A href="#2.2.9" style="TEXT-DECORATION: none">2.2.9  ?pragma</a>
  67. <A name=contents3>
  68. <A href="#3.1" style="TEXT-DECORATION: none">3.     Êîíñòàíòû.
  69. 3.1    ×èñëîâûå êîíñòàíòû.</a>
  70. <A href="#3.2" style="TEXT-DECORATION: none">3.2    Ñèìâîëüíûå êîíñòàíòû.</a>
  71. <A href="#3.3" style="TEXT-DECORATION: none">3.3    Ñòðîêîâûå êîíñòàíòû.</a>
  72. <A href="#3.4" style="TEXT-DECORATION: none">3.4    Ïîñòîÿííûå âûðàæåíèÿ.</a>
  73. <A name=contents4>
  74. <A href="#4.1" style="TEXT-DECORATION: none">4.     Âûðàæåíèÿ.
  75. 4.1    Òèïû âûðàæåíèé.</a>
  76. <A href="#4.2" style="TEXT-DECORATION: none">4.2    Âûðàæåíèÿ òèïà EAX/AX/AL.</a>
  77. <A href="#4.3" style="TEXT-DECORATION: none">4.3    Âûðàæåíèÿ èñïîëüçóþùèå ïîëó÷àòåëü ïðè âû÷èñëåíèè âûðàæåíèÿ.</a>
  78. <A href="#4.4" style="TEXT-DECORATION: none">4.4    Íå - EAX/AX/AL âûðàæåíèÿ.</a>
  79. <A href="#4.5" style="TEXT-DECORATION: none">4.5    Óñëîâíûå âûðàæåíèÿ.</a>
  80. <A href="#4.5.1" style="TEXT-DECORATION: none">4.5.1  Ïðîñòûå óñëîâíûå âûðàæåíèÿ.</a>
  81. <A href="#4.5.2" style="TEXT-DECORATION: none">4.5.2  Ñëîæíûå óñëîâíûå âûðàæåíèÿ.</a>
  82. <A href="#4.6" style="TEXT-DECORATION: none">4.6    Èçìåíåíèå òèïà âûðàæåíèÿ ïðè ïðèñâàèâàíèè.</a>
  83. <A href="#4.7" style="TEXT-DECORATION: none">4.7    Âû÷èñëåíèå â ðåãèñòðû EAX/AX/AL ñî çíàêîì.</a>
  84. <A name=contents5>
  85. <A href="#5.1" style="TEXT-DECORATION: none">5.     Èäåíòèôèêàòîðû.
  86. 5.1    Ôîðìàò èäåíòèôèêàòîðà.</a>
  87. <A href="#5.2" style="TEXT-DECORATION: none">5.2    Çàðåçåðâèðîâàííûå èäåíòèôèêàòîðû.</a>
  88. <A href="#5.3" style="TEXT-DECORATION: none">5.3    Óíèâåðñàëüíûå ðåãèñòðû äëÿ 16 è 32-áèòíîãî ðåæèìà.</a>
  89. <A href="#5.4" style="TEXT-DECORATION: none">5.4    Ïðåäîïðåäåëåííûå èäåíòèôèêàòîðû.</a>
  90. <A name=contents6>
  91. <A href="#6.1" style="TEXT-DECORATION: none">6.     Ïåðåìåííûå.
  92. 6.1    Òèïû ïåðåìåííûõ.</a>
  93. <A href="#6.2" style="TEXT-DECORATION: none">6.2    Îáúÿâëåíèå ïåðåìåííûõ.</a>
  94. <A href="#6.3" style="TEXT-DECORATION: none">6.3    Ãëîáàëüíûå ïåðåìåííûå.</a>
  95. <A href="#6.4" style="TEXT-DECORATION: none">6.4    Ëîêàëüíûå ïåðåìåííûå.</a>
  96. <A href="#6.5" style="TEXT-DECORATION: none">6.5    Äèíàìè÷åñêèå ïåðåìåííûå è ñòðóêòóðû.</a>
  97. <A href="#6.6" style="TEXT-DECORATION: none">6.6    Ïðèñâàèâàíèå îäíîãî çíà÷åíèÿ íåñêîëüêèì ïåðåìåííûì.</a>
  98. <A href="#6.7.1" style="TEXT-DECORATION: none">6.7    Ïåðåìåííûå òèïà float.
  99. 6.7.1  Ôîðìàò ïåðåìåííûõ òèïà float.</a>
  100. <A href="#6.7.2" style="TEXT-DECORATION: none">6.7.2  Êîíñòàíòû ñ ïëàâàþùåé òî÷êîé.</a>
  101. <A href="#6.7.3" style="TEXT-DECORATION: none">6.7.3  Äèàïàçîí äîïóñòèìûõ çíà÷åíèé.</a>
  102. <A href="#6.7.4" style="TEXT-DECORATION: none">6.7.4  Ìàòåìàòè÷åñêèå îïåðàöèè.</a>
  103. <A href="#6.7.5" style="TEXT-DECORATION: none">6.7.5  Ïðåîáðàçîâàíèÿ òèïîâ.</a>
  104. <A href="#6.7.6" style="TEXT-DECORATION: none">6.7.6  Îïåðàöèè ñðàâíåíèÿ.</a>
  105. <A href="#6.7.7" style="TEXT-DECORATION: none">6.7.7  Ñðàâíåíèå ïåðåìåííûõ òèïà float ñ 32-áèòíûì ðåãèñòðîì.</a>
  106. <A href="#6.8" style="TEXT-DECORATION: none">6.8    Óêàçàòåëè.</a>
  107. <A name=contents7>
  108. <A href="#7.1" style="TEXT-DECORATION: none">7.     Àäðåñàöèÿ.
  109. 7.1    Îòíîñèòåëüíàÿ àäðåñàöèÿ.</a>
  110. <A href="#7.2" style="TEXT-DECORATION: none">7.2    Àáñîëþòíàÿ àäðåñàöèÿ.</a>
  111. <A name=contents8>
  112. <A href="#8.1.1" style="TEXT-DECORATION: none">8.     Ðàáîòà ñ áëîêàìè äàííûõ.
  113. 8.1    Ñòðóêòóðû.
  114. 8.1.1  ×òî òàêîå ñòðóêòóðû.</a>
  115. <A href="#8.1.2" style="TEXT-DECORATION: none">8.1.2  Ñèíòàêñèñ.</a>
  116. <A href="#8.1.3" style="TEXT-DECORATION: none">8.1.3  Èíèöèàëèçàöèÿ ñòðóêòóð ïðè îáúÿâëåíèè.</a>
  117. <A href="#8.1.4" style="TEXT-DECORATION: none">8.1.4  Èíèöèàëèçàöèÿ ñòðóêòóðû ïðè âûïîëíåíèè ïðîãðàììû.</a>
  118. <A href="#8.1.5" style="TEXT-DECORATION: none">8.1.5  Îïåðàöèè ñ ýëåìåíòàìè ñòðóêòóð.</a>
  119. <A href="#8.1.6" style="TEXT-DECORATION: none">8.1.6  Âëîæåííûå ñòðóêòóðû.</a>
  120. <A href="#8.1.7" style="TEXT-DECORATION: none">8.1.7  Îòîáðàæåíèå òåãà ñòðóêòóðû íà áëîê ïàìÿòè.</a>
  121. <A href="#8.1.8" style="TEXT-DECORATION: none">8.1.8  Áèòîâûå ïîëÿ ñòðóêòóð.</a>
  122. <A href="#8.2" style="TEXT-DECORATION: none">8.2    Îáúåäèíåíèÿ.</a>
  123. <A href="#8.3" style="TEXT-DECORATION: none">8.3    Êîìàíäû FROM è EXTRACT.</a>
  124. <A name=contents9>
  125. <A href="#9.1" style="TEXT-DECORATION: none">9.     Îïåðàòîðû.
  126. 9.1    Óñëîâíûå èíñòðóêöèè.</a>
  127. <A href="#9.2" style="TEXT-DECORATION: none">9.2    Öèêëû do{} while.</a>
  128. <A href="#9.3" style="TEXT-DECORATION: none">9.3    Öèêëû loop, LOOPNZ, loopnz.</a>
  129. <A href="#9.4" style="TEXT-DECORATION: none">9.4    Öèêë while, WHILE.</a>
  130. <A href="#9.5" style="TEXT-DECORATION: none">9.5    Öèêë for, FOR.</a>
  131. <A href="#9.6" style="TEXT-DECORATION: none">9.6    Îïåðàòîð ïåðåêëþ÷àòåëü switch.</a>
  132. <A href="#9.7" style="TEXT-DECORATION: none">9.7    Îïåðàòîð ïåðåõîäà goto, GOTO.</a>
  133. <A href="#9.8" style="TEXT-DECORATION: none">9.8    Îïåðàòîð ðàçðûâà break, BREAK.</a>
  134. <A href="#9.9" style="TEXT-DECORATION: none">9.9    Îïåðàòîð ïðîäîëæåíèÿ continue, CONTINUE.</a>
  135. <A href="#9.10" style="TEXT-DECORATION: none">9.10   Ëîãè÷åñêîå îáúåäèíåíèå óñëîâèé.</a>
  136. <A href="#9.11" style="TEXT-DECORATION: none">9.11   Ïåðåõîä ÷åðåç öèêëû.</a>
  137. <A href="#9.12" style="TEXT-DECORATION: none">9.12   Èíâåðòèðîâàíèå ôëàãà ïðîâåðêè óñëîâèé.</a>
  138. <A href="#9.13" style="TEXT-DECORATION: none">9.13   Âû÷èñëåíèå âûðàæåíèÿ, à çàòåì ïðîâåðêà óñëîâèÿ.</a>
  139. <A href="#9.14" style="TEXT-DECORATION: none">9.14   Ïðîâåðêà áèòîâ ïðè îïåðàöèè ñðàâíåíèÿ.</a>
  140. <A href="#9.15" style="TEXT-DECORATION: none">9.15   Îïåðàòîð ïåðåñòàíîâêè.</a>
  141. <A href="#9.16" style="TEXT-DECORATION: none">9.16   Îïåðàòîð îòðèöàíèÿ.</a>
  142. <A href="#9.17" style="TEXT-DECORATION: none">9.17   Îïåðàòîð èíâåðñèè.</a>
  143. <A href="#9.18" style="TEXT-DECORATION: none">9.18   Ñïåöèàëüíûå óñëîâíûå âûðàæåíèÿ.</a>
  144. <A href="#9.19" style="TEXT-DECORATION: none">9.19   Ñèìâîë $ - âñòàâëÿåò òåêóùèé àäðåñ ïðîãðàììû.</a>
  145. <A href="#9.20" style="TEXT-DECORATION: none">9.20   Êëþ÷åâîå ñëîâî static è îïåðàòîð ::.</a>
  146. <A href="#9.21" style="TEXT-DECORATION: none">9.21   Îïåðàòîð sizeof.</a>
  147. <A href="#9.22" style="TEXT-DECORATION: none">9.22   Ìåòêè ïåðåõîäà.</a>
  148. <A name=contents10>
  149. <A href="#10.1" style="TEXT-DECORATION: none">10.    Àññåìáëåð.
  150. 10.1   Ïîääåðæêà êîìàíä àññåìáëåðà.</a>
  151. <A href="#10.2" style="TEXT-DECORATION: none">10.2   Êëþ÷åâîå ñëîâî asm.</a>
  152. <A href="#10.3" style="TEXT-DECORATION: none">10.3   Ïðåôèêñ dup - ïîâòîðåíèå èíñòðóêöèé DB/DW/DD.</a>
  153. <A href="#10.4" style="TEXT-DECORATION: none">10.4   Èíñòðóêöèè ïðîöåññîðà Pentium III.</a>
  154. <A name=contents11>
  155. <A href="#11.1" style="TEXT-DECORATION: none">11.    Ïðîöåäóðû.
  156. 11.1   Òèïû ïðîöåäóð, ôóíêöèé è ìàêðîêîìàíä.</a>
  157. <A href="#11.2" style="TEXT-DECORATION: none">11.2   Ñòåêîâûå ïðîöåäóðû.</a>
  158. <A href="#11.3" style="TEXT-DECORATION: none">11.3   Ðåãèñòðîâûå ïðîöåäóðû.</a>
  159. <A href="#11.4" style="TEXT-DECORATION: none">11.4   Äèíàìè÷åñêèå ïðîöåäóðû.</a>
  160. <A href="#11.4.1" style="TEXT-DECORATION: none">11.4.1 Óñòàíîâêà äèíàìè÷åñêîé ïðîöåäóðû â îïðåäåëåííîå ìåñòî ïðîãðàììû.</a>
  161. <A href="#11.5" style="TEXT-DECORATION: none">11.5   inline-ïðîöåäóðû.</a>
  162. <A href="#11.5.1" style="TEXT-DECORATION: none">11.5.1 Äðóãîå ïðèìåíåíèå inline.</a>
  163. <A href="#11.6" style="TEXT-DECORATION: none">11.6   Ïðîöåäóðû îáðàáîòêè ïðåðûâàíèé.</a>
  164. <A href="#11.7" style="TEXT-DECORATION: none">11.7   Çàìåíà return íà goto.</a>
  165. <A href="#11.8" style="TEXT-DECORATION: none">11.8   Âîçâðàùàåìûå çíà÷åíèÿ.</a>
  166. <A href="#11.9" style="TEXT-DECORATION: none">11.9   Îáúÿâëåíèå ïàðàìåòðîâ â ðåãèñòðîâûõ ïðîöåäóðàõ.</a>
  167. <A href="#11.10" style="TEXT-DECORATION: none">11.10  Îáúÿâëåíèå ïàðàìåòðîâ â ñòåêîâûõ ïðîöåäóðàõ.</a>
  168. <A href="#11.11" style="TEXT-DECORATION: none">11.11  Èñïîëüçîâàíèå ìàêðîêîìàíä.</a>
  169. <A href="#11.12" style="TEXT-DECORATION: none">11.12  Ïåðåäà÷à ïàðàìåòðîâ â ñòåêîâûå ïðîöåäóðû ÷åðåç ðåãèñòðû.</a>
  170. <A href="#11.13" style="TEXT-DECORATION: none">11.13  Âûçîâ ïðîöåäóð ñ àäðåñîì â ðåãèñòðå.</a>
  171. <A href="#11.14" style="TEXT-DECORATION: none">11.14  Âñòîåííûå â êîìïèëÿòîð ïðîöåäóðû.</a>
  172. <A href="#11.14.1" style="TEXT-DECORATION: none">11.14.1 Ïðîöåäóðû ABORT, ATEXIT è EXIT.</a>
  173. <A href="#11.14.2" style="TEXT-DECORATION: none">11.14.2 Ïðîöåäóðû inp/inportb, inport, inportd, outp/outportb, outport è
  174.         outportd.</a>
  175. <A href="#11.14.3" style="TEXT-DECORATION: none">11.14.3 Ïðîöåäóðû äëÿ ðàáîòû ñ âåùåñòâåííûìè ÷èñëàìè.</a>
  176. <A href="#11.15.1" style="TEXT-DECORATION: none">11.15  Êëàññû.
  177. 11.15.1 Îáúÿâëåíèå ïðîöåäóð â ñòðóêòóðàõ.</a>
  178. <A href="#11.15.2" style="TEXT-DECORATION: none">11.15.2 Íàñëåäîâàíèå.</a>
  179. <A href="#11.15.3" style="TEXT-DECORATION: none">11.15.3 Íàñëåäîâàíèå ïðîöåäóð.</a>
  180. <A name=contents12>
  181. <A href="#12.1" style="TEXT-DECORATION: none">12.    Òèïû âûõîäíûõ ôàéëîâ.
  182. 12.1   Âûõîäíûå ôàéëû òèïà COM.</a>
  183. <A href="#12.2" style="TEXT-DECORATION: none">12.2   Âûõîäíûå ôàéëû òèïà EXE.</a>
  184. <A href="#12.3" style="TEXT-DECORATION: none">12.3   Âûõîäíîé ôàéë *.EXE ñ ìîäåëüþ ïàìÿòè tiny.</a>
  185. <A href="#12.4" style="TEXT-DECORATION: none">12.4   Îáúåêòíûé âûõîäíîé ôàéë OBJ.</a>
  186. <A href="#12.5.1" style="TEXT-DECORATION: none">12.5   COM ôàéë symbiosis.
  187. 12.5.1 ÑÈÌÁÈÎÇ - ÷òî ýòî òàêîå?</a>
  188. <A href="#12.5.2" style="TEXT-DECORATION: none">12.5.2 Êàê ýòî äåëàòü.</a>
  189. <A href="#12.5.3" style="TEXT-DECORATION: none">12.5.3 Èñïîëüçîâàíèå.</a>
  190. <A href="#12.5.4" style="TEXT-DECORATION: none">12.5.4 Çëîóïîòðåáëåíèÿ.</a>
  191. <A href="#12.6" style="TEXT-DECORATION: none">12.6   SYS - äðàéâåðû óñòðîéñòâ.</a>
  192. <A href="#12.7" style="TEXT-DECORATION: none">12.7   Êîìïèëÿöèÿ êîäà ðàñøèðèòåëåé ROM-BIOS.</a>
  193. <A href="#12.8.1" style="TEXT-DECORATION: none">12.8   32-áèòíûå ôàéëû.
  194. 12.8.1 32-áèòíûé êîä ïîä DOS.</a>
  195. <A href="#12.8.2" style="TEXT-DECORATION: none">12.8.2 32-áèòíûé êîä ïîä Windows.</a>
  196. <A href="#12.8.3" style="TEXT-DECORATION: none">12.8.3 Âûçîâ API ïðîöåäóð ïî îðäèíàëàì.</a>
  197. <A href="#12.8.4" style="TEXT-DECORATION: none">12.8.4 Ñîçäàíèå DLL ïîä Windows.</a>
  198. <A href="#12.8.5" style="TEXT-DECORATION: none">12.8.5 Èíèöèàëèçàöèÿ DLL ïðè çàãðóçêå.</a>
  199. <A href="#12.8.6" style="TEXT-DECORATION: none">12.8.6 Êîìïèëÿöèÿ ðåñóðñîâ.</a>
  200. <A href="#12.9" style="TEXT-DECORATION: none">12.9   Âûõîäíûå ôàéëû äëÿ MeOS.</a>
  201. <A name=contents13>
  202. <A href="#13.1" style="TEXT-DECORATION: none">13.    Ïðèëîæåíèÿ.
  203. 13.1   Ïîèñê âêëþ÷àåìûõ ôàéëîâ.</a>
  204. <A href="#13.2" style="TEXT-DECORATION: none">13.2   Ðåãèñòðû, êîòîðûå äîëæíû áûòü ñîõðàíåíû.</a>
  205. <A href="#13.3" style="TEXT-DECORATION: none">13.3   C--.ini ôàéë.</a>
  206. <A href="#13.4" style="TEXT-DECORATION: none">13.4   startup.h-- ôàéë.</a>
  207. <A href="#13.5" style="TEXT-DECORATION: none">13.5   mainlib.ldp ôàéë.</a>
  208. <A href="#13.6" style="TEXT-DECORATION: none">13.6   C-- ñèìâîëû.</a>
  209. </FONT></B>
  210.  
  211.  
  212. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=intro>1. Âñòóïëåíèå.
  213.  
  214.   1.1 Èñòîðèÿ ñîçäàíèÿ è ðàçâèòèÿ.
  215. </A></B></FONT><FONT FACE="Courier">
  216.  
  217.       Àâòîðîì ÿçûêà SPHINX C-- ÿâëÿåòñÿ Peter Cellik (CANADA). Ïîñëåäíÿÿ
  218.   àâòîðñêàÿ âåðñèÿ SPHINX C-- v0.203 îò 28.Oct.96. Ê ñîæàëåíèþ àâòîð
  219.   îòêàçàëñÿ îò äàëüíåéøåãî ðàçâèòèÿ ÿçûêà. Ñ 1998 ãîäà, óæå ïî÷òè óìåðøèé
  220.   ïðîåêò, ïîäõâàòèë Ìèõàèë Øåêåð (Ðîññèÿ). Èçíà÷àëüíî êîìïèëÿòîð áûë freeware
  221.   (è äàæå greenware, êàê åãî íàçûâàë Peter Cellik). Òàêèì ñòàòóñ êîìïèëÿòîðà
  222.   îñòàëñÿ è ïîíûíå.
  223.  
  224.       Ïåðâîíà÷àëüíî êîìïèëÿòîð ìîã ñîçäàâàòü òîëüêî *.com ôàéëû è áûë
  225.   ðàññ÷èòàí íà ñîçäàíèå íåáîëüøèõ demo-ïðîãðàìì è ðåçèäåíòîâ (TSR). Â
  226.   äàëüíåéøåì âîçìîæíîñòè êîìïèëÿòîðà ðàñøèðÿëèñü, òàê êàê ýòîãî òðåáîâàëî
  227.   íàøå áóðíîå âðåìÿ.
  228.  
  229.       Ïðè ðàçâèòèè êîìïèëÿòîðà, áûëî ñòðåìëåíèå ïðèäåðæèâàòüñÿ ñëåäóþùèõ
  230.   ïðèíöèïîâ:
  231.  
  232.       1. Ìàêñèìàëüíî âîçìîæíàÿ ñîâìåñòèìîñòü ñèíòàêñèñà ñ ïîñëåäíåé âåðñèåé
  233.   êîìïèëÿòîðà íàïèñàííîãî Peter Cellik. Ýòî äàâàëî âîçìîæíîñòü ñ ìèíèìàëüíûìè
  234.   çàòðàòàìè (à ÷àùå âñåãî áåç âñÿêèõ çàòðàò) àäàïòèðîâàòü ïðîãðàììû,
  235.   íàïèñàííûå äëÿ 0.203 âåðñèè êîìïèëÿòîðà, ê ïîñëåäíåé íà ýòîò ìîìåíò âåðñèè
  236.   êîìïèëÿòîðà.
  237.  
  238.       2. Ñáëèçèòü ñèíòàêñèñ êîìïèëÿòîðà ñî ñòàíäàðòíûì ÿçûêîì C. Ýòî ìîãëî
  239.   çíà÷èòåëüíî îáëåã÷èòü ïåðåíîñ ïðîãðàìì íàïèñàííûõ íà C.
  240.  
  241.       3. Òàêæå ïðèëàãàëèñü óñèëèÿ, äëÿ òîãî, ÷òîáû ÷åëîâåê çíàþùèé òîëüêî
  242.   àññåìáëåð ìîã áû ñ ìèíèìàëüíûìè çàòðàòàìè îñâîèòü C--.
  243.  
  244.       Âîò ýòè, çà÷àñòóþ ïðîòèâîðå÷àùèå äðóã äðóãó ïðèíöèïû, âëèÿëè íà âûáîð
  245.   ðåàëèçàöèè âîçìîæíîñòåé êîìïèëÿòîðà. Íàñêîëüêî ýòî óäàëîñü - ñóäèòü Âàì.
  246.  
  247.       Åñëè ó Âàñ åñòü ïðåäëîæåíèÿ è èäåè ïî óëó÷øåíèþ êîìïèëÿòîðà - ïèøèòå.
  248.   Ìîé e-mail <a href="mailto:sheker@mail.ru">sheker@mail.ru</a> . ß ñ óäîâîëüñòâèåì âûñëóøàþ Âàøè ïðåäëîæåíèÿ, íî
  249.   íå ãàðàíòèðóþ, ÷òî âñå îíè áóäóò ðåàëèçîâàíû. Åñëè ðåàëèçîâûâàòü âñå
  250.   ïîñòóïàþùèå ïðåäëîæåíèÿ, òî êîìïèëÿòîð ïðåâðàòèòñÿ â ñâàëêó. Íî åñëè Âàøå
  251.   ïðåäëîæåíèå áóäåò öåííûì (íà ìîé âçãëÿä, òàê ÷òî Âàì ïðèäåòñÿ ñâîå
  252.   ïðåäëîæåíèå õîðîøî àðãóìåíòèðîâàòü) è åãî áóäåò âîçìîæíûì ðåàëèçîâàòü, îíî
  253.   áåç ñîìíåíèÿ íàéäåò ìåñòî â êîìïèëÿòîðå.
  254. <A href="#contents" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  255.  
  256.  
  257. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=1.2>
  258.   1.2 ×òî òàêîå C--?
  259. </A></B></FONT><FONT FACE="Courier">
  260.  
  261.       C-- áûë ðàçðàáîòàí, äëÿ òîãî ÷òîáû ñòðîèòü ìàëåíüêèå è áûñòðûå
  262.   ïðîãðàììû. Ýòî íàèáîëåå ïîäõîäèò äëÿ ñîçäàíèÿ ðåçèäåíòíûõ ïðîãðàìì (TSR),
  263.   ïðîãðàìì, òðåáóþùèõ îáðàáîòêó ïðåðûâàíèé èëè ïðîãðàìì ó êîòîðûõ îãðàíè÷åíû
  264.   ðåñóðñû.
  265.  
  266.       C-- çàíèìàåò ïðîìåæóòî÷íîå ïîëîæåíèå ìåæäó ñè è àññåìáëåðîì.  ñâÿçè ñ
  267.   ýòèì ïðîìåæóòî÷íûì ïîëîæåíèåì, Âàì, äëÿ òîãî ÷òîáû ïèñàòü ïðîãðàììû íà C--,
  268.   íåîáõîäèìî çíàòü è àññåìáëåð è ñè. Åñëè Âàì íàäîåëî âîçèòüñÿ ñ îãðîìíûìè
  269.   àññåìáëåðíûìè ëèñòèíãàìè, à èçëèøíÿÿ ñòðîãîñòü ÿçûêà C Âàñ óãíåòàåò, òî ýòîò
  270.   ÿçûê äëÿ ÂÀÑ.
  271.  
  272.       Ñåé÷àñ êîìïèëÿòîð C-- ìîæåò ñîçäàâàòü 32-áèòíûå ïðîãðàììû ïîä Windows
  273.   (EXE-ôàéëû ôîðìàòà PE) è 32-áèòíûå ïðîãðàììû ïîä DOS (LE-ôîðìàò). Èìååò
  274.   âñòðîåííûé êîìïèëÿòîð ðåñóðñîâ è äèçàññåìáëåð äëÿ ãåíåðàöèè ëèñòèíãà
  275.   îòêîìïèëèðîâàííîãî ôàéëà. Ïîääåðæèâàåò àññåìáëåðíûå èíñòðóêöèè ïðîöåññîðà
  276.   Pentium III è àññåìáëåðíûå èíñòðóêöèè FPU. Êîìïèëÿòîð ìîæåò ãåíåðèðîâàòü
  277.   îòëàäî÷íóþ èíôîðìàöèþ ñîâìåñòèìóþ ñ îòëàä÷èêàìè ôèðìû Borland. Êîìïèëÿòîð
  278.   ìîæåò ñîçäàâàòü îáúåêòíûå ôàéëû (obj), íî òîëüêî äëÿ DOS ïðîãðàìì.
  279.  
  280.       C-- ðàçðàáîòàí òîëüêî äëÿ èñïîëüçîâàíèÿ íà êîìïüþòåðàõ ñ ïðîöåññîðàìè
  281.   ñîâìåñòèìûìè ñ ñåìåéñòâîì 80x86. Êîìïèëÿòîð ìîæåò ðàáîòàòü òîëüêî ñ
  282.   îïåðàöèîííûìè ñèñòåìàìè DOS è ñåìåéñòâîì Windows.
  283. <A href="#contents" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  284.  
  285.  
  286. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=1.3>
  287.   1.3 Êàê óñòàíîâèòü C--.
  288. </A></B></FONT><FONT FACE="Courier">
  289.  
  290.       Êîìïèëÿòîðó C-- äëÿ ðàáîòû íóæíû ñîâñåì íåçíà÷èòåëüíûå ðåñóðñû:
  291.   ïðîöåññîð 386 èëè ëó÷øå, ÷óòü áîëåå 1 Ìá äèñêîâîãî ïðîñòðàíñòâà è 4Ìá
  292.   îïåðàòèâíîé ïàìÿòè. Êîìïèëÿòîð ìîæåò áûòü óñòàíîâëåí íà êîìïüþòåðû ñ
  293.   îïåðàöèîííîé ñèñòåìîé Windows 95 èëè ëó÷øå. Êîìïèëÿòîð òàêæå ìîæåò ðàáîòàòü
  294.   â ñðåäå ÷èñòîãî DOS.  îñíîâíîì ïàêåòå êîìïèëÿòîðà íàõîäèòñÿ 32-áèòíàÿ DOS
  295.   âåðñèÿ êîìïèëÿòîðà. Íà ñàéòå <a href="http://sheker.chat.ru">http://sheker.chat.ru</a> èëè
  296.   <a href="http://c--sphinx.narod.ru">http://c--sphinx.narod.ru</a> ìîæíî íàéòè è êîíñîëüíóþ âåðñèþ êîìïèëÿòîðà.
  297.   Êîíñîëüíàÿ âåðñèÿ êîìïèëÿòîðà ìîæåò ðàáîòàòü òîëüêî â ñðåäå Windows, íî
  298.   îíà, â îòëè÷èå îò DOS âåðñèè, ìîæåò ðàáîòàòü ñ äëèííûìè èìåíàìè èñõîäíûõ
  299.   ôàéëîâ.
  300.  
  301.       Óñòàíîâèòü êîìïèëÿòîð C-- íà Âàø êîìïüþòåð î÷åíü ïðîñòî. Ïðåäïîëîæèì,
  302.   ÷òî Âû ðåøèëè óñòàíîâèòü C-- íà äèñê C. Ñîçäàéòå íà äèñêå C äèðåêòîðèþ
  303.   (ïàïêó) ñ èìåíåì <b>C--</b> èëè ñ äðóãèì, óäîáíûì è ïîíÿòíûì äëÿ Âàñ èìåíåì
  304.   (íàïðèìåð, ÄÎÑîâñêîé êîìàíäîé: <b>MD C--</b> èëè äðóãèì äîñòóïíûì Âàì ñïîñîáîì).
  305.   Çàòåì ñ ñàéòà <a href="http://sheker.chat.ru">http://sheker.chat.ru</a> èëè <a href="http://c--sphinx.narod.ru">http://c--sphinx.narod.ru</a> ñêà÷àéòå
  306.   ôàéëû full_c--.zip è ful_c--2.zip è ðàçàðõèâèðóéòå èõ â ýòîé äèðåêòîðèè.
  307.   Çàòåì â ôàéëå autoexec.bat ìîæíî ïðîïèñàòü ïóòü ê äèðåêòîðèè ñ
  308.   êîìïèëÿòîðîì. È âñå. Êîìïèëÿòîð ãîòîâ ê ðàáîòå. Åñëè Âû äîáàâëÿëè ïóòü ê
  309.   êîìïèëÿòîðó â ôàéë autoexec.bat, òî Âàì ïðèäåòñÿ ïåðåãðóçèòü îïåðàöèîííóþ
  310.   ñèñòåìó.
  311.  
  312.       Ïåðåìåííàÿ îêðóæåíèÿ äëÿ êîìïèëÿòîðà C-- çàäàåòñÿ ëèáî èç êîìàíäíîé
  313.   ñòðîêè ëèáî èç êîìàíäíîãî ôàéëà (ëó÷øå âñåãî åå ïðîïèñàòü â autoexec.bat).
  314.   Ýòà ïåðåìåííàÿ äîëæíà óêàçûâàòü êîìïèëÿòîðó, ãäå íàõîäÿòñÿ åãî áèáëèîòå÷íûå
  315.   ôàéëû. Ïðèìåð:
  316.  
  317.     <b>set C--=c:\c--\lib</b>
  318.  
  319.   Áîëüøîé íåîáõîäèìîñòè â ïåðåìåííîé îêðóæåíèÿ äëÿ ñåãîäíÿøíåé âåðñèè
  320.   êîìïèëÿòîðà íåò. Ñóùåñòâóåò íåñêîëüêî äðóãèõ ñïîñîáîâ, óêàçàòü êîìïèëÿòîðó
  321.   ìåñòî ðàñïîëîæåíèÿ áèáëèîòåê. Ïîýòîìó îïðåäåëÿòü èëè íå îïðåäåëÿòü
  322.   ïåðåìåííóþ îêðóæåíèÿ äåëî âàøåãî âêóñà è ïðèâû÷åê.
  323. <A href="#contents" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  324.  
  325.  
  326. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1>
  327. 2. Óïðàâëåíèå êîìïèëÿöèåé.
  328.  
  329.   2.1 Ïàðàìåòðû êîìàíäíîé ñòðîêè êîìïèëÿòîðà C--.
  330. </A></B></FONT><FONT FACE="Courier">
  331.  
  332.       Ôîðìàò êîìàíäíîé ñòðîêè âûçîâà êîìïèëÿòîðà C--:
  333.  
  334.   C-- [Ïàðàìåòðû] [ÈÌß INI ÔÀÉËÀ] [ÈÌß ÈÑÕÎÄÍÎÃÎ ÔÀÉËÀ]
  335.  
  336.       Èìÿ èñõîäíîãî ôàéëà ìîæíî çàäàâàòü áåç ðàñøèðåíèÿ. Êîìïèëÿòîð èùåò
  337.   ôàéë ñ ðàñøèðåíèåì <b>c--, cmm, c</b>.
  338.  
  339.       Ïàðàìåòðû âûäåëÿþòñÿ ïðåäøåñòâóþùèì ñèìâîëîì <b>/</b> èëè <b>-</b>.
  340.   Èíâåðòèðîâàòü ôóíêöèþ îïöèè ìîæíî çàâåðøàþùèì ñèìâîëîì <b>-</b>.
  341.  
  342.   Ñïèñîê ïîääåðæèâàåìûõ ïàðàìåòðîâ:
  343.  
  344.   <b>/0</b>          èñïîëüçîâàòü òîëüêî êîìàíäû 8086/8088 ïðîöåññîðà (óñòàíîâëåíî
  345.               ïî óìîë÷àíèþ ïðè êîìïèëÿöèè 16-áèòíûõ ïðîãðàìì).
  346.   <b>/1</b>          èñïîëüçîâàòü êîìàíäû 80186 ïðîöåññîðà.
  347.   <b>/2</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ 80286 ïðîöåññîðà.
  348.   <b>/3</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ 80386 ïðîöåññîðà.
  349.               (óñòàíîâëåíî ïî óìîë÷àíèþ äëÿ 32-áèòíûõ ïðîãðàìì).
  350.   <b>/4</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ 80486 ïðîöåññîðà.
  351.   <b>/5</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium ïðîöåññîðà.
  352.   <b>/6</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium MMX ïðîöåññîðà.
  353.   <b>/7</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium Pro ïðîöåññîðà.
  354.   <b>/8</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium II ïðîöåññîðà.
  355.   <b>/9</b>          èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium III ïðîöåññîðà
  356.               (ïîêà íå ðåàëèçîâàíî èç-çà îòñóòñòâèè èíôîðìàöèè).
  357.   <b>/A</b>          âûðàâíèâàíèå äàííûõ íà ÷åòíûé àäðåñ
  358.               ïî óìîë÷àíèþ ðàçðåøåíî, ïîääåðæèâàåò èíâåðñèþ
  359.   <b>/AC</b>         âûðàâíèâàíèå àäðåñà íà÷àëà öèêëîâ
  360.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  361.               èìååò ñìûñë òîëüêî íà ïðîöåññîðàõ Pentium+
  362.   <b>/AL</b>=##      óñòàíîâèòü çíà÷åíèå áàéòà çàïîëíåíèÿ ïðè âûðàâíèâàíèè äàííûõ
  363.               ïî óìîë÷àíèþ 0.
  364.   <b>/AP</b>         âûðàâíèâàíèå àäðåñà íà÷àëà ïðîöåäóð.
  365.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  366.               èìååò ñìûñë òîëüêî íà ïðîöåññîðàõ Pentium è ëó÷øå
  367.   <b>/ARGC</b>       âñòàâèòü áëîê ðàçáîðà êîìàíäíîé ñòðîêè
  368.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  369.   <b>/AS</b>         âûðàâíèâàíèå â ñòðóêòóðàõ.
  370.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  371.   <b>/AT</b>         âñòàâèòü áëîê ïîääåðæêè <b>ATEXIT</b> ïðîöåäóðû
  372.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  373.   <b>/C</b>          âñòàâèòü áëîê èãíîðèðîâàíèÿ <b>CTRL-C</b>
  374.               ïî óìîë÷àíèþ îòêëþ÷åí, ïîääåðæèâàåò èíâåðñèþ
  375.               èìååò ñìûñë òîëüêî ïîä DOS ïðîãðàììû
  376.   <b>/CRI</b>        ïðîâåðÿòü âêëþ÷àåìûå ôàéëû íà ïîâòîðíóþ çàãðóçêó
  377.               ïî óìîë÷àíèþ âêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  378.   <b>/CPA</b>        î÷èñòêà post-îáëàñòè äàííûõ
  379.   <b>/D32</b>        ñîçäàòü EXE ôàéë (32 áèòíûé êîä ïîä DOS)
  380.               ïî óìîë÷àíèþ COM
  381.   <b>/D</b>=idname   îïðåäåëèòü èäåíòèôèêàòîð äëÿ óñëîâíîé êîìïèëÿöèè
  382.               ïî óìîë÷àíèþ íåò
  383.   <b>/DBG</b>        ãåíåðèðîâàòü îòëàäî÷íóþ èíôîðìàöèþ
  384.               ïî óìîë÷àíèþ íåò
  385.   <b>/DE</b>         âðåìåííîå ðàñøèðåíèå ðàçðÿäíîñòè ïîñëå óìíîæåíèÿ
  386.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  387.   <b>/DLL</b>        ñîçäàòü DLL äëÿ Windows32
  388.               ïî óìîë÷àíèþ COM
  389.   <b>/ENV</b>        ñîõðàíåíèå àäðåñà ïåðåìåííûõ îêðóæåíèÿ
  390.   <b>/EXE</b>        ñîçäàòü EXE ôàéë äëÿ DOS (ìîäåëü SMALL)
  391.               ïî óìîë÷àíèþ COM
  392.   <b>/HELP /H /?</b> ñïðàâêà, ýòà èíôîðìàöèÿ
  393.   <b>/IA</b>         èìåíà àññåìáëåðíûõ èíñòðóêöèé ÿâëÿþòñÿ èäåíòèôèêàòîðàìè
  394.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  395.   <b>/IND</b>=name   èìïîðò èìåí èç ôàéëà <b>name</b>.
  396.   <b>/IP</b>=path    çàäàòü ïóòü ïîèñêà âêëþ÷àåìûõ ôàéëîâ
  397.               ïî óìîë÷àíèþ íåò
  398.   <b>/IV</b>         èíèöèàëèçèðîâàòü âñå ïåðåìåííûå
  399.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  400.   <b>/J0</b>         íå äåëàòü íà÷àëüíûé jump íà main()
  401.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  402.               Â COM-ôàéëàõ íå ñîçäàåò jmp íà main. Â îñòàëüíûõ íå ñîçäàåòñÿ
  403.               áëîê íà÷àëüíîé èíèöèàëèçàöèè ïðîãðàììû, à óïðàâëåíèå
  404.               ïåðåäàåòñÿ ñðàçó íà main.
  405.   <b>/J1</b>         äåëàòü êîðîòêèé jump íà main()
  406.               ïî óìîë÷àíèþ íåò
  407.               èìååò ñìûñë òîëüêî â COM-ôàéëàõ
  408.   <b>/J2</b>         äåëàòü jump íà main()
  409.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  410.               èìååò ñìûñë òîëüêî â COM-ôàéëàõ
  411.   <b>/LAI</b>        ñïèñîê ïîääåðæèâàåìûõ àññåìáëåðíûõ èíñòðóêöèé
  412.   <b>/LRS</b>        çàãðóæàòü ÷èñëîâûå êîíñòàíòû ÷åðåç ñòåê.
  413.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  414.   <b>/LST</b>        ñîçäàòü àññåìáëåðíûé ëèñòèíã
  415.   <b>/ME</b>         ïîêàçàòü ìîé àäðåñ è èìÿ
  416.   <b>/MEOS</b>       ñîçäàòü èñïîëíÿåìûé ôàéë äëÿ MeOS
  417.               ïî óìîë÷àíèþ COM
  418.   <b>/MER</b>=##     óñòàíîâèòü ìàêñèìàëüíîå ÷èñëî îøèáîê
  419.               ïî óìîë÷àíèþ 16
  420.   <b>/MIF</b>=file   îïðåäåëèòü èìÿ ãëàâíîãî êîìïèëèðóåìîãî ôàéëà
  421.   <b>/NS</b>         çàïðåòèòü ïîäêëþ÷àòü stub ôàéëîâ
  422.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  423.   <b>/NW</b>=##      âûáîðî÷íîå îòêëþ÷åíèå ïðåäóïðåæäåíèé
  424.   <b>/OBJ</b>        ñîçäàòü OBJ ôàéë
  425.               òîëüêî 16 áèòíûé êîä.
  426.               ïî óìîë÷àíèþ COM
  427.   <b>/OC</b>         îïòèìèçèðîâàòü ïî ðàçìåðó êîäà
  428.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  429.   <b>/ON</b>         îïòèìèçàöèÿ ÷èñåë
  430.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  431.   <b>/OS</b>         îïòèìèçàöèÿ ïî ñêîðîñòè âûïîëíåíèÿ
  432.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  433.   <b>/OST</b>        îïòèìèçàöèÿ ñòðîêîâûõ èäåíòèôèêàòîðîâ
  434.               ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ
  435.   <b>/P</b>          âñòàâèòü áëîê ðàçáîðêè êîìàíäíîé ñòðîêè
  436.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  437.   <b>/R</b>          âñòàâèòü áëîê óìåíüøàþùèé ðàçìåð äîñòóïíîé ïàìÿòè.
  438.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  439.               èìååò ñìûñë òîëüêî â DOS-ôàéëàõ
  440.   <b>/S</b>=#####    óñòàíîâèòü ðàçìåð ñòåêà
  441.               ïî óìîë÷àíèþ 2048
  442.   <b>/SA</b>=####    íà÷àëüíîå ñìåùåíèå àäðåñà çàïóñêà ïðîãðàììû
  443.               èìååò ñìûñë òîëüêî â COM-ôàéëàõ, ïî óìîë÷àíèþ 0x100
  444.   <b>/SOBJ</b>       ñîçäàòü âåäîìûé OBJ ôàéë
  445.               ïî óìîë÷àíèþ COM
  446.   <b>/STM</b>        ïåðåíåñòè áëîê startup êîäà â ïðîöåäóðó main
  447.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  448.               èìååò ñìûñë òîëüêî â COM-ôàéëàõ
  449.   <b>/SUV</b>=####   íà÷àëüíûé àäðåñ íå èíèöèàëèçèðîâàííûõ ïåðåìåííûõ, ïðè
  450.               èñïîëüçîâàíèè èìè startup êîäà.
  451.               èìååò ñìûñë òîëüêî â COM-ôàéëàõ, ïî óìîë÷àíèþ ðàâåí /SA
  452.   <b>/SYM</b>        íàäñòðîéêà äëÿ COM ôàéëà
  453.               ïî óìîë÷àíèþ COM
  454.   <b>/SYS</b>        ñîçäàòü äðàéâåð óñòðîéñòâ (SYS)
  455.               ïî óìîë÷àíèþ COM
  456.   <b>/TEXE</b>       ñîçäàòü EXE ôàéë äëÿ DOS (ìîäåëü TINY)
  457.               ïî óìîë÷àíèþ COM
  458.   <b>/UL</b>         èñïîëüçîâàòü lea ïðè îïòèìèçàöèè ñëîæåíèÿ ðåãèñòðîâ.
  459.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  460.   <b>/UST</b>        èñïîëüçîâàòü startup êîä äëÿ ïåðåìåííûõ.
  461.               èìååò ñìûñë òîëüêî â COM-ôàéëàõ
  462.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  463.   <b>/W</b>          ðàçðåøèòü ïðåäóïðåæäåíèÿ
  464.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  465.   <b>/W32</b>        ñîçäàòü EXE ôàéë äëÿ Windows32 GUI
  466.               ïî óìîë÷àíèþ COM
  467.   <b>/W32C</b>       ñîçäàòü EXE ôàéë äëÿ Windows32 console
  468.               ïî óìîë÷àíèþ COM
  469.   <b>/WBSS</b>       ïîìåùàòü íå èíèöèàëèçèðîâàííûå äàííûå â îòäåëüíóþ ñåêöèþ.
  470.               ïî óìîë÷àíèþ äëÿ /w32 ðàçðåøåíî, äëÿ îñòàëüíûõ çàïðåùåíî.
  471.               ïîääåðæèâàåò èíâåðñèþ
  472.   <b>/WF</b>=file    ïåðåíàïðàâèòü âûâîä ïðåäóïðåæäåíèé â ôàéë.
  473.               ïî óìîë÷àíèþ íåò
  474.   <b>/WFA</b>        èñïîëüçîâàòü áûñòðûå âûçîâû API ïðîöåäóð
  475.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  476.               òîëüêî ïîä windows
  477.   <b>/WFU</b>        ñîçäàâàòü òàáëèöó ïåðåìåùåíèé (äëÿ Windows32)
  478.               ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ
  479.               òîëüêî ïîä windows
  480.               äëÿ DLL óñòàíàâëèâàåòñÿ â äà
  481.   <b>/WIB</b>=#####  óñòàíîâèòü àäðåñ image base
  482.               ïî óìîë÷àíèþ 0x400000
  483.   <b>/WMB</b>        ñîçäàâàòü Windows-ôàéë ñ åäèíûì áëîêîì
  484.               ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ
  485.               òîëüêî ïîä windows
  486.               äëÿ DLL óñòàíàâëèâàåòñÿ â íåò
  487.   <b>/WORDS</b>      âûäàòü ñïèñîê çàðåçåðâèðîâàííûõ èäåíòèôèêàòîðîâ
  488.   <b>/WS</b>=name    óêàçûâàåò èìÿ ôàéëà èñïîëüçóåìîãî â êà÷åñòâå <b>stub</b> ïîä windows.
  489.   <b>/X</b>          çàïðåòèòü âñòàâëÿòü â êîä <b>SPHINXC--</b> ñèãíàòóðó
  490.               ïî óìîë÷àíèþ ðàçðåøåíî, ïîääåðæèâàåò èíâåðñèþ
  491.               îòêëþ÷àåòñÿ åñëè åñòü <b>J0</b>
  492.  
  493.       Ïðèìå÷àíèå: âûðàæåíèå <i>ïîääåðæèâàåò èíâåðñèþ</i> îçíà÷àåò, ÷òî äëÿ äàííîé
  494.   îïöèè ìîæíî èñïîëüçîâàòü è ïðîòèâîïîëîæíîå çíà÷åíèå ñ ïîìîùüþ ñèìâîëà <b>-</b>
  495.   ïîñëå îïöèè. Ïðèìåð:
  496.  
  497.   <b>/WFA-</b>
  498.  
  499.        Ïàðàìåòðû êîìàíäíîé ñòðîêè ìîæíî ïèñàòü êàê áîëüøèìè, òàê è
  500.   ìàëåíüêèìè áóêâàìè.
  501. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  502.  
  503.  
  504. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.1>
  505.     2.1.1 /ON - Îïòèìèçàöèÿ ÷èñëîâûõ âûðàæåíèé.
  506. </A></B></FONT><FONT FACE="Courier">
  507.  
  508.         Ïðè âêëþ÷åíèè â êîìàíäíóþ ñòðîêó îïöèè <b>/ON</b> èëè â ôàéë C--.INI ñòðî÷êè
  509.     <b>ON</b>, êîìïèëÿòîð áóäåò àíàëèçèðîâàòü îïåðàöèè íàä ÷èñëàìè è ãäå ýòî
  510.     ìîæíî, ñîêðàùàòü ÷èñëî îïåðàöèé. Íàïðèìåð:
  511.  
  512.      Ñòðîêà äî îïòèìèçàöèè  | Ïîñëå îïòèìèçàöèè
  513.     -----------------------------------------------
  514.       AX = var + 7 - 3;     | AX = var + 4;
  515.       AX = var * 2 * 5;     | AX = var * 10;
  516.       AX = var * 2 / 4;     | AX = var / 2;
  517.       AX = var * 10 / 2;    | AX = var * 5;
  518.       AX = var / 2 / 3;     | AX = var / 6;
  519.       AX = var / 4 * 8;     | AX = var * 2;
  520.       AX = var / 16 * 16;   | AX = var;
  521.  
  522.         Âîçìîæíûå îòðèöàòåëüíûå ïîñëåäñòâèÿ:
  523.         Ïðèìåíåíèå ýòîé îïòèìèçàöèè ìîæåò èìåòü è íåãàòèâíûå ïîñëåäñòâèÿ.
  524.     Íàïðèìåð, åñëè Âàì íóæíî âûðîâíÿòü çíà÷åíèå ïåðåìåííîé íà ãðàíèöó
  525.     ïàðàãðàôà, Âû íàïèøèòå ñòðîêó:
  526.  
  527.     var = var / 16 * 16;
  528.  
  529.     íî ïîñëå îïòèìèçàöèè áóäåò
  530.  
  531.     var = var;
  532.  
  533.     ò.å. âûðàâíèâàíèå íå áóäåò  ïðîèçâåäåíî. Ýòîãî ìîæíî èçáåæàòü, åñëè
  534.     ðàçáèòü ýòî âûðàæåíèå íà äâà:
  535.  
  536.     var = var / 16;
  537.     var = var * 16;
  538.  
  539.     òîãäà îïòèìèçàöèÿ íå áóäåò ïðîèçâåäåíà. Íî äëÿ ïîëó÷åíèÿ áîëåå
  540.     êîìïàêòíîãî êîäà ëó÷øå áóäåò çàïèñàòü òàê:
  541.  
  542.     AX = var;
  543.     AX = AX / 16;
  544.     AX = AX * 16;
  545.     var = AX;
  546. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  547.  
  548.  
  549. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.2>
  550.     2.1.2 /DE - Âðåìåííîå ðàñøèðåíèå ðàçðÿäíîñòè ïåðåìåííîé.
  551. </A></B></FONT><FONT FACE="Courier">
  552.  
  553.         Êàê èçâåñòíî, ïîñëå óìíîæåíèÿ ìîæåò ïðîèçîéòè ïåðåïîëíåíèå, ò.å
  554.     ðàçðÿäíîñòü ðåçóëüòàòà ìîæåò ïðåâûñèòü ðàçðÿäíîñòü èñõîäíûõ îïåðàíäîâ è
  555.     ïðîèçîéäåò èñêàæåíèå ðåçóëüòàòà. ×àñòè÷íî ðåøèòü ýòó ïðîáëåìó Âàì ïîìîæåò
  556.     îïöèÿ êîìàíäíîé ñòðîêè <b>/DE</b> èëè ñòðîêà <b>DE</b> â ôàéëå C--.INI. Ïîñëå êîìàíäû
  557.     óìíîæåíèÿ êîìïèëÿòîð áóäåò ïðîñìàòðèâàòü îñòàòîê ñòðîêè è åñëè îáíàðóæèò,
  558.     ÷òî ðàñøèðåíèå ðàçðÿäíîñòè ìîæåò áûòü âîñòðåáîâàíî (âîñòðåáîâàòü
  559.     ðàñøèðåííóþ ðàçðÿäíîñòü ìîãóò îïåðàöèè äåëåíèÿ è âû÷èñëåíèÿ îñòàòêà), òî
  560.     áóäóò ïðèíÿòû ìåðû ïî åå ñîõðàíåíèþ. Íàïðèìåð:
  561.  
  562.       a = b*c+d/e; //çäåñü áóäåò âêëþ÷åíà ïîääåðæêà ðàñøèðåíèÿ ðàçðÿäíîñòè
  563.       a = b*c+d*e; //çäåñü ïîääåðæêè ðàñøèðåíèÿ ðàçðÿäíîñòè íå áóäåò.
  564.  
  565.         Îäíàêî ïðèìåíåíèå ýòîé îïöèè ìîæåò èìåòü è íåãàòèâíûå ïîñëåäñòâèÿ.
  566.     Ïîêàæó ýòî íà ïðèìåðå:
  567.  
  568.     ïóñòü èìååòñÿ âûðàæåíèå
  569.  
  570.       a = b * c / d;
  571.  
  572.     åñëè çíà÷åíèÿ ïåðåìåííûõ b = 0xC000, c = 0x1000, d=0x10, ïîñëå çàïóñêà
  573.     òàêàÿ ïðîãðàììà çàâèñíåò ñ ñîîáùåíèåì î òîì, ÷òî ïðîèçîøëî ïåðåïîëíåíèå
  574.     ïðè äåëåíèè.
  575. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  576.  
  577.  
  578. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.3>
  579.     2.1.3 /ARGC - Àëüòåðíàòèâíûé îáðàáîò÷èê êîìàíäíîé ñòðîêè.
  580. </A></B></FONT><FONT FACE="Courier">
  581.  
  582.         Îòëè÷èå ýòîãî îáðàáîò÷èêà êîìàíäíîé ñòðîêè îò <b>parsecommandline</b>
  583.     çàêëþ÷àåòñÿ â òîì, ÷òî ïðè âûçîâå <b>PARAMSTR(0)</b>; Âû ïîëó÷èòå àäðåñ ñòðîêè â
  584.     êîòîðîé óêàçàí ïóòü è èìÿ çàïóùåííîé ïðîãðàììû. Ñëåäóþùèå âûçîâû ýòîé
  585.     ïðîöåäóðû ñ óâåëè÷èâàþùèìñÿ ïàðàìåòðîì áóäóò âîçâðàùàòü àäðåñà ñëîâ
  586.     êîìàíäíîé ñòðîêè. À âûçîâ ïðîöåäóðû <b>PARAMCOUNT</b> âåðíåò Âàì ÷èñëî ñëîâ â
  587.     êîìàíäíîé ñòðîêå ïëþñ îäèí.
  588.  
  589.         Àëüòåðíàòèâíûé îáðàáîò÷èê êîìàíäíîé ñòðîêè âêëþ÷àåòñÿ äèðåêòèâîé
  590.     <b>?argc TRUE</b> èëè èç êîìàíäíîé ñòðîêè êîìïèëÿòîðà êëþ÷îì <b>/argc</b> èëè
  591.     ñòðî÷êîé <b>argc</b> â ôàéëå C--.INI.
  592. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  593.  
  594.  
  595. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.4>
  596.     2.1.4 /OST - ñëèÿíèå îäèíàêîâûõ ñòðîêîâûõ êîíñòàíò.
  597. </A></B></FONT><FONT FACE="Courier">
  598.  
  599.         Åñëè ýòîò ðåæèì îïòèìèçàöèè áóäåò àêòèâèçèðîâàí, òî êîìïèëÿòîð áóäåò
  600.     çàïîìèíàòü âñå ñòðîêîâûå êîíñòàíòû è ïðè îáíàðóæåíèè îäèíàêîâûõ â êîä
  601.     ôàéëà íå áóäåò âñòàâëåíà ïîâòîðíàÿ ñòðîêîâàÿ êîíñòàíòà, à áóäåò ñäåëàíà
  602.     ññûëêà íà ïåðâóþ, îáíàðóæåííóþ ðàíåå ñòðîêîâóþ êîíñòàíòó. Â îïòèìèçàöèè
  603.     ó÷àñòâóþò òîëüêî íåèìåíîâàííûå ñòðîêîâûå êîíñòàíòû. Ò.å. åñëè ìàññèâ èëè
  604.     ñòðóêòóðà áóäåò èíèöèàëèçèðîâàíû ñòðîêîé, òî òàêàÿ ñòðîêà íå áóäåò
  605.     ó÷àñòâîâàòü â ïðîöåññå èíèöèàëèçàöèè, òàê ýòà ñòðîêà ìîæåò áûòü èçìåíåíà
  606.     â ïðîöåññå ðàáîòû ïðîãðàììû. Ïðèìåð:
  607.  
  608.       char var="test";  //ýòà ñòðîêà íå áóäåò ó÷àñòâîâàòü â ïðîöåññå
  609.                         //îïòèìèçàöèè.
  610.  
  611.       void proc(){
  612.         WRITESTR("test");       // ýòà ñòðîêà áóäåò ó÷àñòâîâàòü â îïòèìèçàöèè.
  613.         AX="test";          // ïåðåìåííîé AX áóäåò ïðèñâîåí àäðåñ ñòðîêè,
  614.                             // êîòîðàÿ áûëà âñòàâëåíà â êîä ïðîãðàììû â
  615.                             // ïðåäûäóùåé ñòðîêå.
  616.       }
  617.  
  618.         Îáî âñåõ ñëó÷àÿõ îáíàðóæåíèÿ ïîâòîðíîé ñòðîêè êîìïèëÿòîð áóäåò
  619.     âûäàâàòü ïðåäóïðåæäåíèÿ.
  620.  
  621.         Âêëþ÷àåòñÿ ýòîò ðåæèì îïòèìèçàöèè ëèáî ñ êîìàíäíîé ñòðîêè <b>/ost</b>, ëèáî
  622.     äèðåêòèâîé <b>#pragma option ost</b>, ëèáî ñòðîêîé â ôàéëå c--.ini - <b>ost</b>.
  623.     Îòêëþ÷èòü, âêëþ÷åííûé ðàíåå, ýòîò ðåæèì ìîæíî äèðåêòèâîé <b>#pragma option ost-</b>.
  624. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  625.  
  626.  
  627. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.5>
  628.     2.1.5 /D - óñòàíîâêà èäåíòèôèêàòîðà â TRUE èç êîìàíäíîé ñòðîêè.
  629. </A></B></FONT><FONT FACE="Courier">
  630.  
  631.         Åñëè Âû íàïèñàëè ïðîãðàììó, êîòîðàÿ ìîæåò êîìïèëèðîâàòüñÿ ïî ðàçíîìó,
  632.     â çàâèñèìîñòè îò ñîñòîÿíèÿ íåêîòîðûõ èäåíòèôèêàòîðîâ (èñïîëüçóåòñÿ ðåæèì
  633.     óñëîâíîé êîìïèëÿöèè), òî Âàì î÷åíü ìîæåò ïðèãîäèòñÿ ýòà îïöèÿ.
  634.     Óñòàíàâëèâàÿ ñ êîìàíäíîé ñòðîêè ðàçëè÷íûå èäåíòèôèêàòîðû, Âû ìîæåòå
  635.     ïîëó÷àòü ðàçëè÷íûå âàðèàíòû ïðîãðàììû, íå ðåäàêòèðóÿ èñõîäíûé òåêñò
  636.     ïðîãðàììû.
  637.  
  638.         Èäåíòèôèêàòîð ââîäèòñÿ ñ êîìàíäíîé ñòðîêè êëþ÷îì <b>/d=idname</b>.
  639. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  640.  
  641.  
  642. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.6>
  643.     2.1.6 /IA - óïðîùåííûé ââîä àññåìáëåðíûõ èíñòðóêöèé.
  644. </A></B></FONT><FONT FACE="Courier">
  645.  
  646.         Ñòàëî âîçìîæíûì èñïîëüçîâàòü àññåìáëåðíûå èíñòðóêöèè áåç ïðåôèêñà <b>$</b>
  647.     è âíå áëîêà <b>asm</b>. Ýòîò ðåæèì âêëþ÷àåòñÿ: ñ êîìàíäíîé ñòðîêè îïöèåé <b>/ia</b>;
  648.     â ôàéëå êîíôèãóðàöèè ñòðîêîé <b>ia</b> èëè äèðåêòèâîé <b>#pragma option ia</b>.
  649.  
  650.         Êîãäà ýòîò ðåæèì âêëþ÷åí, âñå èìåíà àññåìáëåðíûõ èíñòðóêöèé ñòàíîâÿòñÿ
  651.     çàðåçåðâèðîâàííûìè ñëîâàìè, ò.å. Âû íå ñìîæåòå ýòè èìåíà èñïîëüçîâàòü â
  652.     êà÷åñòâå èìåí ïåðåìåííûõ èëè ïðîöåäóð. Àññåìáëåðíûå èíñòðóêöèè êîìïèëÿòîð
  653.     ðàñïîçíàåò íåçàâèñèìî îò òîãî, íàïèñàíû îíè ìàëåíüêèìè èëè áîëüøèìè
  654.     áóêâàìè.
  655. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  656.  
  657.  
  658. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.7>
  659.     2.1.7 /CRI - ïðîïóñê ïîâòîðíî âêëþ÷àåìîãî ôàéëà.
  660. </A></B></FONT><FONT FACE="Courier">
  661.  
  662.         ×àùå âñåãî, ïîâòîðíî âêëþ÷àòü ôàéë â êîìïèëèðóåìûé ïðîåêò, íåò
  663.     íåîáõîäèìîñòè, íî ýòî èíîãäà ïðîèñõîäèò èç-çà òîãî, ÷òî íåêîòîðûå
  664.     âêëþ÷àåìûå ôàéëû ñàìè âêëþ÷àþò äðóãèå ôàéëû. ×òîáû ýòîãî íå ïðîèñõîäèëî
  665.     ïðèõîäèòñÿ äåëàòü ïðîâåðêó íà ïîâòîðíóþ çàãðóçêó ôàéëà. Òåïåðü ýòó
  666.     ôóíêöèþ áåðåò íà ñåáÿ êîìïèëÿòîð è ó Âàñ îòïàäàåò íåîáõîäèìîñòü äåëàòü
  667.     ýòó ïðîâåðêó.
  668.  
  669.         Íî èíîãäà (î÷åíü ðåäêî) âîçíèêàåò ïîòðåáíîñòü ñäåëàòü ïîâòîðíîå
  670.     âêëþ÷åíèå ôàéëà. Äëÿ ýòîãî â êîìïèëÿòîðå åñòü îïöèÿ êîìàíäíîé ñòðîêè
  671.     <b>/cri-</b>, êîòîðàÿ çàïðåùàåò êîìïèëÿòîðó äåëàòü ïðîâåðêó íà ïîâòîðíîå
  672.     âêëþ÷åíèå. Ñîîòâåòñòâåííî, äëÿ c--.ini ôàéëà, ýòî ìîæíî ñäåëàòü ñòðîêîé
  673.     <b>cri-</b> èëè äèðåêòèâîé â êîìïèëèðóåìîì ôàéëå - <b>#pragma option cri-</b>.
  674. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  675.  
  676.  
  677. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.8>
  678.     2.1.8 /IND - èìïîðò èìåí ïðîöåäóð èç DLL.
  679. </A></B></FONT><FONT FACE="Courier">
  680.  
  681.         Åñëè Âû õîòèòå â ñâîåé ïðîãðàììå èñïîëüçîâàòü DLL, äëÿ êîòîðîé íåò
  682.     çàãîëîâî÷íîãî ôàéëà ñ îïèñàíèåì ïðîöåäóð, òî êîìïèëÿòîð ìîæåò
  683.     èìïîðòèðîâàòü èìåíà èç ýòîé DLL. Äëÿ ýòîãî Âàì íàäî óêàçàòü èìÿ ýòîé
  684.     áèáëèîòåêè ëèáî ÷åðåç îïöèþ êîìàíäíîé ñòðîêè <b>/ind=name.dll</b>, ëèáî â
  685.     ôàéëå INI ñòðîêîé 'ind=name.dll', ëèáî ÷åðåç äèðåêòèâó '#pragma option
  686.    ind=name.dll'.
  687.  
  688.         Ê íåäîñòàòêîì òàêîãî ñïîñîáà ïîëó÷åíèÿ èìåí ìîæíî îòíåñòè òî, ÷òî ïðè
  689.     êîìïèëÿöèè ïðîãðàììû áèáëèîòåêà, èç êîòîðîé èìïîðòèðóþòñÿ èìåíà,
  690.     îáÿçàòåëüíî äîëæíà ïðèñóòñòâîâàòü â êîìïüþòåðå. Òàêæå, åñëè èìåíà â
  691.     áèáëèîòåêå íàïèñàíû áåç ñóôôèêñà '@number', êîìïèëÿòîð íå áóäåò
  692.     êîíòðîëèðîâàòü ÷èñëî ïàðàìåòðîâ ïåðåäàâàåìûõ ïðîöåäóðå. È, ê ñîæàëåíèþ,
  693.     êîìïèëÿòîð óìååò èìïîðòèðîâàòü èìåíà èç áèáëèîòåê èìåþùèõ òîëüêî ôîðìàò
  694.     PE-ôàéëà.
  695. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  696.  
  697.  
  698. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.9>
  699.     2.1.9 /WS - çàäàòü èìÿ stub ôàéëà äëÿ ïðîãðàìì ïîä windows.
  700. </A></B></FONT><FONT FACE="Courier">
  701.  
  702.         Êàê èçâåñòíî, â ïðîãðàììàõ ïîä windows åñòü DOS çàãëóøêà, íàçûâàåìàÿ
  703.     stub, êîòîðîé ïåðåäàåòñÿ óïðàâëåíèå ïðè çàïóñêå òàêîé ïðîãðàììû â ÷èñòîì
  704.     DOS-å. Îáû÷íî òàêàÿ çàãëóøêà âûâîäèò íà ýêðàí ñîîáùåíèå î òîì, ÷òî ýòó
  705.     ïðîãðàììó íàäî çàïóñêàòü â ñðåäå windows.
  706.  
  707.         Âû ìîæåòå âìåñòî ñòàíäàðòíîãî stub èñïîëüçîâàòü ñâîé. Äëÿ ýòîãî Âàì
  708.     íåîáõîäèìî óêàçàòü èìÿ 16-áèòíîãî EXE-ôàéëà ëèáî ÷åðåç îïöèþ êîìàíäíîé
  709.     ñòðîêè <b>/ws=filename</b>, ëèáî ñòðîêîé â INI-ôàéëå <b>ws=filename</b>, ëèáî
  710.     äèðåêòèâîé <b>#pragma option ws=filename</b>.
  711.  
  712.         Òàêèì îáðàçîì, ó Âàñ ïîÿâèëàñü âîçìîæíîñòü ñîçäàâàòü ïðîãðàììû,
  713.     ðàáîòàþùèå è ïîä DOS è ïîä windows.
  714. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  715.  
  716.  
  717. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.10>
  718.     2.1.10 /WBSS - ðàçìåñòèòü íå èíèöèàëèçèðîâàííûå äàííûå â îòäåëüíîé ñåêöèè.
  719. </A></B></FONT><FONT FACE="Courier">
  720.  
  721.         Ñåêöèÿ <b>.bss</b> ñîçäàåòñÿ àâòîìàòè÷åñêè ïðè êîìïèëÿöèè ïðîãðàìì ñ êëþ÷îì
  722.     <b>/w32</b>. Åñëè Âû õîòèòå èìåòü ýòó ñåêöèþ è ïðè êîìïèëÿöèè ïðîãðàìì ñ
  723.     êëþ÷àìè <b>/w32c</b> èëè <b>/dll</b> Âàì íåîáõîäèìî äîáàâèòü ëèáî â êîìàíäíîé
  724.     ñòðîêå îïöèþ <b>/wbss</b>, ëèáî ñòðîêó <b>wbss</b> â INI-ôàéëå, ëèáî äèðåêòèâó
  725.     <b>#pragma option wbss</b>.
  726.  
  727.         Èñïîëüçîâàíèå ñåêöèè <b>.bss</b> ïðàêòè÷åñêè íå âëèÿåò íà ðàçìåð ïîëó÷àåìîãî
  728.     ôàéëà. Òåîðåòè÷åñêè, äëÿ ïðîöåññîðîâ, ó êîòîðûõ åñòü îòäåëüíûé êýø äëÿ
  729.     äàííûõ, èñïîëüçîâàíèå ñåêöèè <b>.bss</b>, äîëæíî ïîâûøàòü ñêîðîñòü ðàáîòû
  730.     ïðîãðàììû.
  731. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  732.  
  733.  
  734. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.11>
  735.     2.1.11 /DBG - ñîçäàíèå îòëàäî÷íîé èíôîðìàöèè.
  736. </A></B></FONT><FONT FACE="Courier">
  737.  
  738.         Åñëè ïðè êîìïèëÿöèè ïðîãðàììû â êîìàíäíóþ ñòðîêó äîáàâèòü êëþ÷ <b>/dbg</b>,
  739.     èëè â ôàéë êîíôèãóðàöèè c--.ini äîáàâèòü ñòðîêó <b>dbg</b>, òî êîìïèëÿòîð ïîñëå
  740.     îêîí÷àíèÿ êîìïèëÿöèè ñîçäàñò ôàéë ñ îòëàäî÷íîé èíôîðìàöèåé. Ýòîò ôàéë
  741.     èìååò èìÿ ãëàâíîãî ìîäóëÿ è èìååò ðàñøèðåíèå *.tds.
  742.  
  743.         Îòëàäî÷íàÿ èíôîðìàöèÿ ñîçäàâàåìàÿ êîìïèëÿòîðîì C-- ñîâìåñòèìà ñ
  744.     îòëàäî÷íîé èíôîðìàöèåé ñîçäàâàåìîé êîìïèëÿòîðàìè ôèðìû Borland. Íî, ïîêà,
  745.     ýòà èíôîðìàöèÿ ðåàëèçîâàíà åùå íå â ïîëíîì îáúåìå. Ñîçäàâàåìîé ñåé÷àñ
  746.     îòëàäî÷íîé èíôîðìàöèè äîñòàòî÷íî äëÿ ïðîâåäåíèÿ ïðîñòåéøåé îòëàäêè
  747.     ïðîãðàììû.
  748.  
  749.         Äëÿ 16-áèòíûõ ïðîãðàìì ïîä DOS äëÿ îòëàäêè íàäî èñïîëüçîâàòü Turbo
  750.     Debugger èç ïàêåòà Borland C v4.5 èëè ëó÷øå (ôàéë td.exe).
  751.  
  752.         Äëÿ ïðîãðàìì ïîä Windows íàäî èñïîëüçîâàòü 32-áèòíûé îòëàä÷èê èç ýòîãî
  753.     æå ïàêåòà (ôàéë td32.exe).
  754.  
  755.         Äëÿ 32-áèòíûõ ïðîãðàìì, èñïîëüçóþùèõ ðàñøèðèòåëü DOS ïðèìåíÿòü äëÿ
  756.     îòëàäêè Turbo Debugger íåâîçìîæíî. Íî, ìîæåò áûòü ÿ íå çíàþ, êàê ýòî
  757.     äåëàòü. Åñëè Âû çíàåòå, êàê ñîçäàâàòü 32-áèòíûå ïðîãðàììû ñ
  758.     DOS-ðàñøèðèòåëåì êîìïèëÿòîðàìè ôèðìû Borland ñ âêëþ÷åíèåì â íèõ îòëàäî÷íîé
  759.     èíôîðìàöèè, òî ðàññêàæèòå ìíå. À ÿ ïîïðîáóþ ïðèìåíèòü ýòî äëÿ C--.
  760. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  761.  
  762.  
  763. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.12>
  764.     2.1.12 /J0 /J1 /J2
  765. </A></B></FONT><FONT FACE="Courier">
  766.  
  767.         Ñèíîíèìîì êëþ÷åé <b>/J0 /J1 /J2</b> ÿâëÿåòñÿ äèðåêòèâà <b>#jumptomain</b> ñ
  768.     ïàðàìåòðàìè <b>NONE, SHORT è NEAR</b> ñîîòâåòñòâåííî.
  769.  
  770.         Äèðåêòèâà <b>#jumptomain</b> âûïîëíÿåò íåìíîãî ðàçëè÷íûå ôóíêöèè â
  771.     çàâèñèìîñòè îò òèïà âûõîäíîãî ôàéëà.
  772.  
  773.         Êîìïèëÿöèÿ ôàéëà òèïà <b>*.com</b> è <b>*.exe</b> ìîäåëü ïàìÿòè <b>tiny</b>:
  774.  
  775.       <b>#jumptomain NONE (-j0)</b> - â ýòîì ñëó÷àå ïî îêîí÷àíèè êîäà íà÷àëüíîé
  776.     èíèöèàëèçàöèè ïðîãðàììû íå ãåíåðèðóåòñÿ jmp íà ïðîöåäóðó main. Ýòó
  777.     äèðåêòèâó ñëåäóåò èñïîëüçîâàòü â ñëó÷àå, åñëè äî ïðîöåäóðû main íåò äðóãèõ
  778.     íå äèíàìè÷åñêèõ ïðîöåäóð è èíèöèàëèçèðîâàííûõ ïåðåìåííûõ.
  779.  
  780.       <b>#jumptomain SHORT (-j1)</b> - â ýòîì ñëó÷àå ïî îêîí÷àíèè êîäà íà÷àëüíîé
  781.     èíèöèàëèçàöèè ãåíåðèðóåòñÿ êîðîòêèé jmp íà ïðîöåäóðó main. Ýòó äèðåêòèâó
  782.     ñëåäóåò èñïîëüçîâàòü, åñëè äî ïðîöåäóðû main íàõîäèòñÿ íå áîëåå 128 áàéò
  783.     êîäà è äàííûõ.
  784.  
  785.       <b>#jumptomain NEAR (-j2)</b> - ýòî ñîñòîÿíèå óñòàíàâëèâàåòñÿ ïî óìîë÷àíèþ. Ïðè
  786.     ýòîì ãåíåðèðóåòñÿ áëèçêèé jmp íà ïðîöåäóðó main.
  787.  
  788.         Êîìïèëÿöèÿ ôàéëîâ <b>*.exe</b> (êëþ÷è <b>-exe -d32 -w32 -w32c</b>):
  789.  
  790.       <b>#jumptomain NONE (-j0)</b> - â ýòîì ñëó÷àå êîä íà÷àëüíîé èíèöèàëèçàöèè
  791.     ïðîãðàììû íå ãåíåðèðóåòñÿ è óïðàâëåíèå ïðè çàïóñêå ïåðåäàåòñÿ ñðàçó íà
  792.     ïðîöåäóðó main.
  793.  
  794.       Âî âñåõ îñòàëüíûõ ñëó÷àÿõ ãåíåðèðóåòñÿ êîä íà÷àëüíîé èíèöèàëèçàöèè è
  795.     óïðàâëåíèå íà ïðîöåäóðó main ïåðåäàåòñÿ èíñòðóêöèåé call.
  796.  
  797.         Êîìïèëÿöèÿ ôàéëîâ <b>*.dll</b>:
  798.  
  799.       <b>#jumptomain NONE (-j0)</b> - â ýòîì ñëó÷àå êîä íà÷àëüíîé èíèöèàëèçàöèè
  800.     ïðîãðàììû íå ãåíåðèðóåòñÿ è óïðàâëåíèå ïðè çàïóñêå ïåðåäàåòñÿ ñðàçó íà
  801.     ïðîöåäóðó <b>main</b>.
  802.  
  803.       Âî âñåõ îñòàëüíûõ ñëó÷àÿõ ãåíåðèðóåòñÿ êîä çàãëóøêè è óïðàâëåíèå íà
  804.     ïðîöåäóðó <b>main</b> íå ïåðåäàåòñÿ. Ôàêòè÷åñêè ïðîöåäóðà <b>main</b> â ýòîì ñëó÷àå íå
  805.     íóæíà.
  806.  
  807.       Ïðîöåäóðà <b>main</b> ïðè ñîçäàíèè ôàéëîâ <b>DLL</b> äîëæíà âûãëÿäåòü íåìíîãî èíà÷å,
  808.     ÷åì â äðóãèõ ñëó÷àÿõ:
  809.  
  810.     dword main ( dword hInstDLL, reason, reserv )
  811.     {
  812.       ...
  813.     }
  814. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  815.  
  816.  
  817. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.13>
  818.     2.1.13 /LST - Ñîçäàíèå àññåìáëåðíîãî ëèñòèíãà.
  819. </A></B></FONT><FONT FACE="Courier">
  820.  
  821.         Ñ ïîìîùüþ äîïîëíèòåëüíîé îïöèè êîìàíäíîé ñòðîêè <b>-lst</b> Âû ìîæåòå
  822.     ïîëó÷èòü âìåñòå ñ èñïîëíèòåëüíûì ôàéëîì è åãî àññåìáëåðíûé ëèñòèíã.
  823.     Ëèñòèíã áóäåò ïîìåùåí â ôàéë îäíîèìåííûé ñ èñïîëíèòåëüíûì ôàéëîì è
  824.     èìåþùèì ðàñøèðåíèå *.lst.
  825.  
  826.         Àññåìáëåðíûé ëèñòèíã ñîçäàåòñÿ íåçàâèñèìîé îò êîìïèëÿòîðà ÷àñòüþ êîäà
  827.     ñ èñïîëüçîâàíèåì èíôîðìàöèè íàêàïëèâàåìîé ïðè êîìïèëÿöèè ïðîãðàììû.
  828. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  829.  
  830.  
  831. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.14>
  832.     2.1.14 /ENV - Ñîõðàíåíèå àäðåñà ïåðåìåííûõ îêðóæåíèÿ.
  833. </A></B></FONT><FONT FACE="Courier">
  834.  
  835.         Åñëè ïðè êîìïèëÿöèè ïðîãðàììû Âû â êîìàíäíóþ ñòðîêó äîáàâèòå îïöèþ
  836.     <b>-ENV</b> èëè â ôàéë c--.ini ñòðîêà <b>ENV</b>, òî êîìïèëÿòîð äîáàâèò â âàøó
  837.     ïðîãðàììó ïåðåìåííóþ <b>environ</b>, â êîòîðîé ïðè çàãðóçêå áóäåò ñîõðàíÿòñÿ
  838.     àäðåñ ïåðåìåííûõ îêðóæåíèÿ çàïóñêàåìîé ïðîãðàììû. Äëÿ ïðîãðàìì ïîä
  839.     Windows ýòî áóäåò ïîëíûé àäðåñ, à äëÿ îñòàëüíûõ â ýòîé ïåðåìåííîé áóäåò
  840.     ñîõðàíÿòüñÿ òîëüêî àäðåñ ñåãìåíòà.
  841. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  842.  
  843.  
  844. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.15>
  845.     2.1.15 /CPA - Î÷èñòêà post-îáëàñòè äàííûõ.
  846. </A></B></FONT><FONT FACE="Courier">
  847.  
  848.         Ïåðåìåííûå, êîòîðûì â òåëå ïðîãðàììû íå áûëî ïðèñâîåíî íèêàêîå
  849.     çíà÷åíèå, íå âêëþ÷àþòñÿ â òåëî ñêîìïèëèðîâàííîé ïðîãðàììû. Äëÿ íèõ
  850.     ðåçåðâèðóåòñÿ ïàìÿòü çà ïðåäåëàìè ïðîãðàììû. Íî ýòà ïàìÿòü ìîæåò áûòü
  851.     çàïîëíåíà ïðîèçâîëüíîé èíôîðìàöèåé.
  852.  
  853.         Åñëè Âàì íåîáõîäèìî, ÷òîáû íåèíèöèàëèçèðîâàííûå ïåðåìåííûå ïðè
  854.     çàãðóçêå ïðîãðàììû âñåãäà ñîäåðæàëè îäíî è òîæå çíà÷åíèå (íîëü) -
  855.     âêëþ÷èòå â êîìàíäíóþ ñòðîêó îïöèþ <b>-CPA</b>.
  856. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  857.  
  858.  
  859. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.16>
  860.     2.1.16 /W - âûâîä ïðåäóïðåæäåíèé.
  861. </A></B></FONT><FONT FACE="Courier">
  862.  
  863.         Ïî óìîë÷àíèþ êîìïèëÿòîð íå âûâîäèò ïðåäóïðåæäåíèÿ è ìíîãèå äàæå íå
  864.     ïîäîçðåâàþò î ñóùåñòâîâàíèè òàêîé ïîëåçíîé îïöèè. Â C-- ïðåäóïðåæäåíèÿ
  865.     ôàêòè÷åñêè ÿâëÿþòñÿ ïîäñêàçêàìè äëÿ ñîçäàíèÿ îïòèìàëüíûõ ïðîãðàìì è
  866.     çà÷àñòóþ îáëåã÷àþò îòëàäêó ïðîãðàìì.  ïðåäóïðåæäåíèÿõ êîìïèëÿòîð ìîæåò
  867.     ñîîáùèòü Âàì î òîì, â êàêîì ìåñòå ìîæíî èñïîëüçîâàòü êîðîòêèå ôîðìû
  868.     îïåðàòîðîâ IF, WHILE, FOR... Î òîì, êàêèå ïðîöåäóðû, ïåðåìåííûå è
  869.     ñòðóêòóðû îïðåäåëåííûå â âàøåé ïðîãðàììå íå áûëè èñïîëüçîâàíû. Î òîì
  870.     êàêèå ðåãèñòðû êîìïèëÿòîð èñïîëüçîâàë áåç âàøåãî âåäîìà è ìíîãî äðóãîé
  871.     ïîëåçíîé èíôîðìàöèè.
  872.  
  873.         Ïî óìîë÷àíèþ ïðåäóïðåæäåíèÿ âûâîäÿòñÿ íà ýêðàí. Íî èõ áûâàåò òàê
  874.     ìíîãî, ÷òî îíè ìîãóò íå ïîìåñòèòüñÿ íà ýêðàíå. Ïîýòîìó â êîìïèëÿòîðå åñòü
  875.     îïöèÿ, ïî êîòîðîé âñå ïðåäóïðåæäåíèÿ âûâîäÿòñÿ â ôàéë. Èìÿ ýòîãî ôàéëà
  876.     çàäàåòñÿ â òîé æå îïöèè. Ïîìåñòèâ â ñâîé c--.ini ôàéë ïàðó âîò ýòèõ ñòðîê:
  877.  
  878.     w
  879.     wf=warning
  880.  
  881.         Âû áóäåòå ïîëó÷àòü â ôàéëå <b>warning</b> ïðåäóïðåæäåíèÿ.
  882. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  883.  
  884.  
  885. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.17>
  886.     2.1.17 /NW - Âûáîðî÷íîå îòêëþ÷åíèå òèïîâ ïðåäóïðåæäåíèé.
  887. </A></B></FONT><FONT FACE="Courier">
  888.  
  889.         Ñåé÷àñ êîìïèëÿòîð ìîæåò âûäàâàòü 12 òèïîâ ïðåäóïðåæäåíèé è, èíîãäà èõ
  890.     áûâàåò òàê ìíîãî, ÷òî ñòàíîâèòñÿ òðóäíî â íèõ îðèåíòèðîâàòüñÿ. Òåïåðü
  891.     ìîæíî âûáîðî÷íî çàïðåùàòü âûäà÷ó ïðåäóïðåæäåíèé. Äëÿ ýòîãî â êîìàíäíîé
  892.     ñòðîêå (èëè â ôàéëå C--.INI) ìîæíî óñòàíîâèòü îïöèþ <b>/nw=number</b>, ãäå
  893.     number - ÷èñëî îò 1 äî 12. Ýòèì öèôðàì ñîîòâåòñòâóþò ñëåäóþùèå òèïû
  894.     ïðåäóïðåæäåíèé:
  895.  
  896.       1 - Optimize numerical expressions
  897.       2 - Compiler used register ..."
  898.      3 - Short operator '...' may be used
  899.      4 - String '...' repeated
  900.      5 - Expansion variable
  901.      6 - Signed value returned
  902.      7 - '...' defined above, therefore skipped.
  903.      8 - Variable/structure/procedure '...' possible not used
  904.      9 - Non-initialized variable may have been used
  905.     10 - Return flag was destroyed
  906.     11 - Code may not be executable
  907.     12 - Don't use local/parametric values in inline procedures
  908. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  909.  
  910.  
  911. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.18>
  912.    2.1.18 /WSI - êîðîòêàÿ òàáëèöà èìïîðòà.
  913. </A></B></FONT><FONT FACE="Courier">
  914.  
  915.        Òàáëèöà èìïîðòà îáû÷íî ñîñòîèò â ñâîþ î÷åðåäü èç ÷åòûðåõ òàáëèö. Äâå
  916.    òàáëèöû <b>LookUp Table</b> è <b>Import Address Table</b> àáñîëþòíî îäèíàêîâû.
  917.  
  918.        Îïöèåé êîìàíäíîé ñòðîêè <b>/WSI</b> Âû ìîæåòå çàñòàâèòü êîìïèëÿòîð
  919.    ãåíåðèðîâàòü òîëüêî îäíó èç ýòèõ äâóõ îäèíàêîâûõ òàáëèö (ãåíåðèðóåòñÿ
  920.    òîëüêî <b>Import Address Table</b>). Òåì ñàìûì ó Âàñ ïîëó÷èòñÿ áîëåå êîìïàêòíàÿ
  921.    òàáëèöà èìïîðòà, ÷òî ïðèâåäåò, â íåêîòîðûõ ñëó÷àÿõ, ê ñîçäàíèþ áîëåå
  922.    êîìïàêòíîãî âûõîäíîãî ôàéëà.
  923. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  924.  
  925.  
  926. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2>
  927.  2.2 Äèðåêòèâû òðàíñëÿòîðà.
  928. </A></B></FONT><FONT FACE="Courier">
  929.  
  930.      C-- íå ñîäåðæèò ïðåïðîöåññîð. Òåì íå ìåíåå, åñòü íåñêîëüêî ôóíêöèé
  931.  î÷åíü ïîõîæèõ íà ôóíêöèè C ïðåïðîöåññîðà.
  932.  
  933.      Îíè äàþòñÿ êàê äèðåêòèâû òðàíñëÿòîðà. Âñå äèðåêòèâû òðàíñëÿòîðà
  934.  íà÷èíàþòñÿ ñ âîïðîñèòåëüíîãî çíàêà <b>?</b> ëèáî ñ ñèìâîëà <b>#</b>. Âîò ñïèñîê èìåþùèõñÿ
  935.  äèðåêòèâ è èõ íàçíà÷åíèå:
  936.  
  937.  <b>? align</b> [val]                  Âûðîâíÿòü äàííûå ïðîãðàììû íà ÷åòíûé ïî
  938.                                 óìîë÷àíèþ èëè íà àäðåñ êðàòíûé âåëè÷èíå val.
  939.  
  940.  <b>? aligncode</b> [val]              Âûðîâíÿòü êîä ïðîãðàììû íà ÷åòíûé ïî
  941.                                 óìîë÷àíèþ èëè íà àäðåñ êðàòíûé âåëè÷èíå <b>val</b>.
  942.                                  Çàïîëíåíèå ïðîèçâîäèòñÿ êîäîì 0x90.
  943.  
  944.  <b>? aligner</b> (aligner value)      îïðåäåëèòü çíà÷åíèå áàéòà âñòàâêè.
  945.  
  946.  <b>? alignword</b> (TRUE or FALSE)    ðàçðåøàåò èëè çàïðåùàåò âûðàâíèâàíèå íà
  947.                                 ÷åòíûé àäðåñ ïåðåìåííûõ òèïà word è int,
  948.                                 çíà÷åíèå ïî óìîë÷àíèþ TRUE.
  949.  
  950.  <b>? argc</b> (TRUE or FALSE)         Âêëþ÷èòü èëè îòêëþ÷èòü àëüòåðíàòèâíûé
  951.                                 îáðàáîò÷èê êîìàíäíîé ñòðîêè.
  952.  
  953.  <b>? atexit</b>                       Âñòàâëÿåò â startup êîä ïîääåðæêè ïðîöåäóðû
  954.                                 ATEXIT().
  955.  
  956.  <b>? code32</b> (TRUE/FALSE)          ðàçðåøàåò/çàïðåùàåò ãåíåðàöèþ 32-áèòíîãî
  957.                                 êîäà.
  958.  
  959.  <b>? codesize</b>                     îïòèìèçàöèÿ ðàçìåðà êîäà (â óùåðá ñêîðîñòè).
  960.  
  961.  <b>? compilerversion</b> min-vers     óêàçûâàåò, êîìïèëÿòîð êàêîé âåðñèè íåîáõîäèì
  962.                                 äëÿ êîìïèëÿöèè äàííîé ïðîãðàììû.
  963.  
  964.  <b>? ctrl_c</b> (TRUE or FALSE )      ðàçðåøàåò èëè çàïðåùàåò èãíîðèðîâàíèå
  965.                                 íàæàòèÿ CTRL-C.
  966.  
  967.  <b>? dataseg</b> (value)              óêàçûâàåò êîìïèëÿòîðó ñåãìåíòíûé àäðåñ ÎÇÓ
  968.                                 äëÿ ïåðåìåííûõ ïðè êîìïèëÿöèè ROM-BIOS.
  969.  
  970.  <b>? define</b> (identifier) (token)  îïðåäåëÿåò èäåíòèôèêàòîð.
  971.  
  972.  <b>? DOSrequired</b> (íîìåð)          óñòàíàâëèâàåò ìèíèìàëüíóþ òðåáóåìóþ âåðñèþ
  973.                                 DOS:  ñòàðøèé áàéò - íîìåð âåðñèè,
  974.                                 ìëàäøèé áàéò - íîìåð ìîäèôèêàöèè:
  975.                                  0x0101 äëÿ âåðñèè 1.1 DOS
  976.                                  0x0315 äëÿ âåðñèè 3.21 DOS
  977.                                  0x0303 äëÿ âåðñèè 3.3 DOS
  978.                                  0x0600 äëÿ âåðñèè 6.0 DOS
  979.                                  0x0602 äëÿ âåðñèè 6.2 DOS è ò.ä.
  980.  
  981.  <b>? dosstring</b> (TRUE/FALSE)       óêàçûâàåò êîìïèëÿòîðó, ÷òî â êà÷åñòâå
  982.                                 òåðìèíàòîðà ñòðîêè íàäî èñïîëüçîâàòü ñèìâîë <b>$</b>
  983.  
  984.  <b>? else</b>                         ãåíåðèðóåò àëüòåðíàòèâíûé êîä åñëè <b>?ifdef</b> èëè
  985.                                 <b>?ifndef</b> ïðèíèìàþò çíà÷åíèå FALSE (ïðèìåð
  986.                                 èñïîëüçîâàíèÿ ñìîòðèòå â ôàéëå FPU.H--)
  987.  
  988.  <b>? endif</b>                        óêàçûâàåò íà êîíåö äåéñòâèÿ äèðåêòèâ <b>ifdef</b> è
  989.                                 <b>ifndef</b>
  990.  
  991.  <b>? fastcallapi</b> (FALSE/TRUE)     çàïðåòèòü/ðàçðåøèòü ãåíåðàöèþ áûñòðîãî âûçîâà
  992.                                 API-ïðîöåäóð (ïî óìîë÷àíèþ ðàçðåøåíî).
  993.                                 Äèðåêòèâà ðàáîòàåò ïðè êîìïèëÿöèè ïðîãðàìì
  994.                                 ïîä Windows.
  995.  
  996.  <b>? fixuptable</b> (TRUE/FALSE)      ðàçðåøèòü/çàïðåòèòü ñîçäàíèå FixUp òàáëèöû
  997.                                 (ïî óìîë÷àíèþ çàïðåùåíî). Äèðåêòèâà ðàáîòàåò
  998.                                 ïðè êîìïèëÿöèè ïðîãðàìì ïîä Windows.
  999.  
  1000.  <b>? ifdef</b> (identifier)           åñëè èäåíòèôèêàòîð îïðåäåëåí, òî âîçâðàùàåò
  1001.                                 TRUE èíà÷å FALSE
  1002.  
  1003.  <b>? imagebase</b> value              çàäàåò àäðåñ Image Base. Ïî óìîë÷àíèþ ýòîò
  1004.                                 àäðåñ  ðàâåí 0x400000. Äèðåêòèâà ðàáîòàåò ïðè
  1005.                                 êîìïèëÿöèè ïðîãðàìì ïîä Windows.
  1006.  
  1007.  <b>? ifndef</b> (identifier)          åñëè èäåíòèôèêàòîð îïðåäåëåí, òî âîçâðàùàåò
  1008.                                 FALSE èíà÷å TRUE
  1009.  
  1010.  <b>? include</b> ("filename")         âêëþ÷àåò äðóãîé ôàéë.
  1011.  
  1012.  <b>? includepath</b> ("path")         óêàçàíèå êîìïèëÿòîðó, â êàêîé äèðåêòîðèè íàäî
  1013.                                 èñêàòü âêëþ÷àåìûå ôàéëû
  1014.  
  1015.  <b>? initallvar</b>                   èíèöèàëèçèðóåò 0 âñå íåèíèöèàëèçèðîâàííûå
  1016.                                 ïåðåìåííûå.
  1017.  
  1018.  <b>? jumptomain</b> (NONE, SHORT, NEAR or FALSE)
  1019.                                 óñòàíàâëèâàåò òèï ïåðåõîäà ê main(),
  1020.                                 çíà÷åíèå ïî óìîë÷àíèþ - NEAR.
  1021.  
  1022.  <b>? maxerrors</b> (number)           ìàêñèìàëüíîå êîëè÷åñòâî íàéäåííûõ îøèáîê,
  1023.                                 ïðåâûñèâ êîòîðîå òðàíñëÿòîð ïðåêðàùàåò
  1024.                                 ðàáîòó, çíà÷åíèå ïî óìîë÷àíèþ - 16.
  1025.  
  1026.  <b>? movedatarom</b>  (TRUE/FALSE)    óêàçûâàåò êîìïèëÿòîðó î íåîáõîäèìîñòè
  1027.                                 ïåðåíîñà äàííûõ èç ÏÇÓ â ÎÇÓ.
  1028.  
  1029.  <b>? parsecommandline</b> (TRUE or FALSE)
  1030.                                 âêëþ÷àåò â ïðîãðàììó áëîê êîäà äëÿ
  1031.                                 ñèíòàêñè÷åñêîãî àíàëèçà êîìàíäíîé ñòðîêè
  1032.                                 çíà÷åíèå ïî óìîë÷àíèþ FALSE.
  1033.  
  1034.  <b>? pragma</b>                       ìîæåò îáúÿâëÿòü íåñêîëüêî äðóãèõ äèðåêòèâ
  1035.  
  1036.  <b>? print</b> (number or string)     âûâîäèò íà ýêðàí ñòðîêó èëè ÷èñëî.
  1037.  
  1038.  <b>? printhex</b> (number)            âûâîäèò íà ýêðàí ÷èñëî â øåñòíàäöàòåðè÷íîì
  1039.                                 êîäå.
  1040.  
  1041.  <b>? randombyte</b>                   âñòàâëÿåò â êîä ïðîãðàììû áàéò ñëó÷àéíîãî
  1042.                                 çíà÷åíèÿ.
  1043.  
  1044.  <b>? resize</b> (TRUE or FALSE)       âêëþ÷àåò ôóíêöèþ èçìåíåíèÿ ïîñëå çàïóñêà
  1045.                                 ðàçìåðà âûäåëåííîãî ïðîãðàììå áëîêà ïàìÿòè
  1046.                                 íà ìèíèìàëüíî òðåáóåìûé îáúåì,
  1047.                                 çíà÷åíèå ïî óìîë÷àíèþ TRUE.
  1048.  
  1049.  <b>? resizemessage</b> (string)       ñîîáùåíèå, âûâîäèìîå íà ýêðàí ïåðåä
  1050.                                 àâàðèéíûì ïðåðûâàíèåì âûïîëíåíèÿ ïðîãðàììû,
  1051.                                 åñëè èçìåíåíèå ðàçìåðà âûäåëåííîãî ïðîãðàììå
  1052.                                 áëîêà ïàìÿòè íå âûïîëíåíî.
  1053.  
  1054.  <b>? setdinproc</b>                   ïî ýòîé äèðåêòèâå êîìïèëÿòîð íåìåäëåííî
  1055.                                 âñòàâëÿåò â êîä êîìïèëèðóåìîé ïðîãðàììû âñå
  1056.                                 âûçûâàâøèåñÿ ðàíåå äèíàìè÷åñêèå ïðîöåäóðû.
  1057.  
  1058.  <b>? sizerom</b>  (value)             óêàçûâàåò êîìïèëÿòîðó ðàçìåð ÏÇÓ.
  1059.  
  1060.  <b>? speed</b>                        îïòèìèçàöèÿ áûñòðîäåéñòâèÿ (çíà÷åíèå
  1061.                                 ïî óìîë÷àíèþ) â óùåðá ðàçìåðó êîäà.
  1062.  
  1063.  <b>? stack</b> (number)               îïðåäåëÿåò ðàçìåð ñòåêà ïðîãðàììû â áàéòàõ.
  1064.  
  1065.  <b>? startaddress</b> (number)        óñòàíàâëèâàåò ñòàðòîâûé àäðåñ íà÷àëà êîäà,
  1066.                                 çíà÷åíèå ïî óìîë÷àíèþ 0x100.
  1067.  
  1068.  <b>? startuptomain</b>                â com-ôàéëàõ ðàçìåùàåò <b>startup-</b>êîä â
  1069.                                 ïðîöåäóðå <b>main()</b>.
  1070.  
  1071.  <b>? startusevar</b> (number)         óêàçûâàåò àäðåñ, ñ êîòîðîãî ðàçðåøåíî
  1072.                                 èñïîëüçîâàòü ÿ÷åéêè ïàìÿòè ïîä
  1073.                                 íåèíèöèàëèçèðîâàííûå ïåðåìåííûå.
  1074.  
  1075.  <b>? sysattribute</b> (çíà÷åíèå)      ýòà äèðåêòèâà ïåðåäàåò êîìïèëÿòîðó àòðèáóò
  1076.                                 ñîçäàâàåìîãî äðàéâåðà. Ïî óìîë÷àíèþ
  1077.                                 óñòàíàâëèâàåòñÿ çíà÷åíèå 0x2000.
  1078.                                 Äåéñòâóåò òîëüêî ñ êëþ÷îì <b>/SYS</b>.
  1079.  
  1080.  <b>? sysname</b> <òåêñòîâàÿ ñòðîêà>   ýòà äèðåêòèâà ïåðåäàåò êîìïèëÿòîðó èìÿ
  1081.                                 áóäóùåãî äðàéâåðà. Ïî óìîë÷àíèþ
  1082.                                 ïðèñâàèâàåòñÿ èìÿ <b>NO_NAME</b>. Äëèíà èìåíè íå
  1083.                                 áîëåå 8 ñèìâîëîâ.  Äåéñòâóåò òîëüêî ñ êëþ÷îì
  1084.                                 <b>/SYS</b>.
  1085.  
  1086.  <b>? syscommand</b> <command_0>,<command_1>, ...<command_n>; - ýòà äèðåêòèâà
  1087.                                 ÿâëÿåòñÿ îáÿçàòåëüíîé ïðè ñîçäàíèè
  1088.                                 äðàéâåðîâ. Ïî ýòîé äèðåêòèâå êîìïèëÿòîðó
  1089.                                 ïåðåäàåòñÿ ñïèñîê èìåí ïðîöåäóð îáðàáîòêè
  1090.                                 êîìàíä äðàéâåðà. Äåéñòâóåò òîëüêî ñ êëþ÷îì
  1091.                                 <b>/SYS</b>.
  1092.  
  1093.  <b>? warning</b> (TRUE or FALSE)      ýòà äèðåêòèâà ðàçðåøàåò èëè çàïðåùàåò âûäà÷ó
  1094.                                 ïðåäóïðåæäåíèé. Äèðåêòèâà äåéñòâóåò òîëüêî â
  1095.                                 ïðåäåëàõ òåêóùåãî ôàéëà è íå âëèÿåò íà
  1096.                                 âêëþ÷àåìûå ôàéëû.
  1097.  
  1098.  <b>? winmonoblock</b> FALSE           çàïðåùàåò ðàçìåùåíèå òàáëèö ôàéëà ôîðìàòà PE
  1099.                                 â îäíó ñåêöèþ.
  1100.  
  1101.  <b>? undef</b>                        óíè÷òîæàåò êîíñòàíòû îáúÿâëåííûå äèðåêòèâîé
  1102.                                 <b>? define</b>
  1103.  
  1104.  <b>? use8086</b>                      îãðàíè÷èâàåòñÿ ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1105.                                 êîìàíäàìè 8088/8086 (çíà÷åíèå ïî óìîë÷àíèþ).
  1106.  
  1107.  <b>? use8088</b>                      îãðàíè÷èâàåòñÿ ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1108.                                 êîìàíäàìè 8088/8086 (çíà÷åíèå ïî óìîë÷àíèþ).
  1109.  
  1110.  <b>? use80186</b>                     äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1111.                                 êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà 80186.
  1112.  
  1113.  <b>? use80286</b>                     äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1114.                                 êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà 80286.
  1115.  
  1116.  <b>? use80386</b>                     äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1117.                                 êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà 80386.
  1118.  
  1119.  <b>? use80486</b>                     äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1120.                                 êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà 80486.
  1121.  
  1122.  <b>? usePentium</b>                   äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1123.                                 êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà Pentium.
  1124.  
  1125.  <b>? useMMX</b>                       äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà
  1126.                                 êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà Pentium
  1127.                                 MMX.
  1128.  
  1129.  <b>? usestartup</b>                   ðàçðåøàåò êîìïèëÿòîðó èñïîëüçîâàòü ÿ÷åéêè
  1130.                                 ïàìÿòè, çàíèìàåìûå êîäîì íà÷àëüíîé
  1131.                                 èíèöèàëèçàöèè ïðîãðàììû.
  1132. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1133.  
  1134.  
  1135. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.1>
  1136.    2.2.1 ?ifdef/?ifndef
  1137. </A></B></FONT><FONT FACE="Courier">
  1138.  
  1139.         Ðàíåå äèðåêòèâà <b>?ifdef</b> ñðàáàòûâàëà íà íàëè÷èå êîíñòàíòû íåçàâèñèìî
  1140.    îò çíà÷åíèÿ åå âåëè÷èíû, à äèðåêòèâà <b>?ifndef</b> ñðàáàòûâàëà íà îòñóòñòâèå
  1141.    êîíñòàíòû â êîìïèëèðóåìîì ôàéëå. Òåïåðü <b>?indef</b> ñðàáàòûâàåò ëèøü íà
  1142.    êîíñòàíòó îòëè÷íóþ îò FALSE, à <b>?ifndef</b> ñðàáàòûâàåò êàê íà îòñóòñòâèå
  1143.    êîíñòàíòû â êîìïèëèðóåìîì ôàéëå, òàê è íà êîíñòàíòó èìåþùóþ çíà÷åíèå
  1144.    FALSE.
  1145.  
  1146.        Äëÿ äèðåêòèâ <b>?ifdef/?ifndef</b> çàðåçåðâèðîâàíû êîíñòàíòû <i>codesize</i> è
  1147.    <i>speed</i>, êîòîðûå ïðèíèìàþò çíà÷åíèå TRUE èëè FALSE â çàâèñèìîñòè îò ðåæèìà
  1148.    îïòèìèçàöèè. Ýòî áóäåò ïîëåçíûì äëÿ ñîçäàíèÿ áîëåå ãèáêèõ áèáëèîòåê.
  1149.  
  1150.        Åñòü âîçìîæíîñòü ïðîâåðêè òèïà CPU äëÿ êîòîðîãî âåäåòñÿ êîìïèëÿöèÿ.
  1151.    Äîïóñòèìûå âàðèàíòû ñèíòàêñèñà:
  1152.  
  1153.     ?ifdef cpu > 1       //åñëè ïðîãðàììà êîìïèëèðóåòñÿ äëÿ CPU âûøå 80186
  1154.    ?ifndef cpu >= 2 // -------//------------- íå áîëüøå èëè ðàâíî 80286
  1155.    ?ifdef cpu == 3  // -------//------------- ðàâíî 80386
  1156.    ?ifdef cpu != 0  // -------//------------- íå ðàâåí 8086
  1157.    ?ifdef cpu < 3   // -------//------------- õóæå 80386
  1158.    ?ifdef cpu <= 2  // -------//------------- õóæå èëè ðàâåí 80286
  1159.  
  1160.        Ýòà äèðåêòèâà ïîçâîëèò Âàì ïèñàòü îäíó ïðîöåäóðó äëÿ ðàçëè÷íûõ òèïîâ
  1161.    CPU.
  1162. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1163.  
  1164.  
  1165. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.2>
  1166.    2.2.2 ?initallvar
  1167. </A></B></FONT><FONT FACE="Courier">
  1168.  
  1169.        Äèðåêòèâîé <b>?initallvar TRUE</b> âêëþ÷àåòñÿ ðåæèì ïðè êîòîðîì âñåì
  1170.    íåèíèöèàëèçèðîâàííûì ïåðåìåííûì áóäåò ïðèñâîåíî íóëåâîå çíà÷åíèå è îíè
  1171.    áóäóò ðàñïîëàãàòüñÿ â òîì ìåñòå, ãäå áûëè îáúÿâëåíû. Ò.å. ïðàêòè÷åñêè
  1172.    èñ÷åçíóò íåèíèöèàëèçèðîâàííûå ïåðåìåííûå. Ýòî ìîæåò áûòü ïîëåçíûì ïðè
  1173.    íàïèñàíèè äðàéâåðîâ è ðåçèäåíòíûõ ïðîãðàìì.
  1174.  
  1175.        Ïàðàìåòð FALSE ýòîé äèðåêòèâû îòêëþ÷àåò ýòîò ðåæèì.
  1176.        Ïî óìîë÷àíèþ ýòà äèðåêòèâà óñòàíîâëåíà â FALSE.
  1177. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1178.  
  1179.  
  1180. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.3>
  1181.    2.2.3 ?usestartup
  1182. </A></B></FONT><FONT FACE="Courier">
  1183.  
  1184.        Äèðåêòèâà <b>?usestartup</b> ðàçðåøàåò êîìïèëÿòîðó èñïîëüçîâàòü ÿ÷åéêè êîäà
  1185.    íà÷àëüíîé èíèöèàëèçàöèè ïðîãðàììû (startup) äëÿ ïîñëåäóþùåãî ðàçìåùåíèÿ â
  1186.    íèõ íåèíèöèàëèçèðîâàííûõ ïåðåìåííûõ. Ýòî ìîæåò áûòü ïîëåçíûì äëÿ ïîëó÷åíèÿ
  1187.    áîëåå êîìïàêòíîãî êîäà, êàê îáû÷íûõ ïðîãðàìì, òàê è â îñîáåííîñòè
  1188.    ðåçèäåíòíûõ.
  1189.  
  1190.        Ýòó äèðåêòèâó ïðèìåíÿþò òîëüêî äëÿ ãåíåðàöèè *.COM ôàéëîâ.
  1191. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1192.  
  1193.  
  1194. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.4>
  1195.    2.2.4 ?startusevar
  1196. </A></B></FONT><FONT FACE="Courier">
  1197.  
  1198.        Äèðåêòèâîé <b>?startusevar</b> ìîæíî óêàçàòü íà÷àëüíûé àäðåñ ñ êîòîðîãî
  1199.    êîìïèëÿòîð áóäåò ðàñïðåäåëÿòü ïàìÿòü äëÿ íåèíèöèàëèçèðîâàííûõ ïåðåìåííûõ.
  1200.    Íàïðèìåð, ïîëó÷èâ äèðåêòèâó <b>?startusevar 0x53</b> êîìïèëÿòîð áóäåò
  1201.    ðàñïîëàãàòü íåèíèöèàëèçèðîâàííûå ïåðåìåííûå, íà÷èíàÿ ñ àäðåñà 0x53. Ýòî
  1202.    ìîæåò áûòü ïîëåçíûì äëÿ ïîëó÷åíèÿ áîëåå êîìïàêòíîãî êîäà êàê äëÿ
  1203.    ðåçèäåíòíûõ, òàê è äëÿ îáû÷íûõ ïðîãðàìì.
  1204.  
  1205.        Ýòó äèðåêòèâó ïðèìåíÿþò òîëüêî äëÿ ãåíåðàöèè *.COM ôàéëîâ.
  1206. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1207.  
  1208.  
  1209. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.5>
  1210.    2.2.5 ?atexit
  1211. </A></B></FONT><FONT FACE="Courier">
  1212.  
  1213.        Äèðåêòèâà <b>?atexit</b> äîáàâëÿåò â startup ïðîãðàììû êîä ïîääåðæêè
  1214.    ïðîöåäóðû <b>ATEXIT</b>, ðåçåðâèðóåò ìåñòî äëÿ õðàíåíèÿ 16 àäðåñîâ ïðîöåäóð è
  1215.    èçìåíÿåò êîä ïðîöåäóð <b>ABORT</b> è <b>EXIT</b>.
  1216.  
  1217.        Ïðîöåäóðà <b>ATEXIT</b> ðåãèñòðèðóåò ïðîöåäóðó, àäðåñ êîòîðîé ïåðåäàåòñÿ åé â
  1218.    êà÷åñòâå ïàðàìåòðà, êàê ïðîöåäóðó çàâåðøåíèÿ ïðîãðàììû. Ýòà ïðîöåäóðà
  1219.    áóäåò âûçâàíà â ìîìåíò çàâåðøåíèÿ ïðîãðàììû ïðîöåäóðàìè <b>ABORT</b> èëè <b>EXIT</b>
  1220.    èëè èíñòðóêöèåé <b>RET</b> èç <b>main</b>.
  1221.  
  1222.        Âñåãî ìîæíî çàðåãèñòðèðîâàòü äî 16 ïðîöåäóð. Ïðîöåäóðû âûçûâàþòñÿ â
  1223.    ïîðÿäêå îáðàòíîì ïîðÿäêó èõ ðåãèñòðàöèè.
  1224. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1225.  
  1226.  
  1227. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.6>
  1228.    2.2.6 ?startuptomain
  1229. </A></B></FONT><FONT FACE="Courier">
  1230.  
  1231.        Ïî ýòîé äèðåêòèâå êîìïèëÿòîð â íà÷àëå ôàéëà äåëàåò <b>jmp</b> íà íà÷àëî
  1232.    ïðîöåäóðû main(). Ïåðåä íà÷àëîì êîìïèëÿöèè ýòîé ïðîöåäóðû êîìïèëÿòîð
  1233.    íà÷íåò êîìïèëÿöèþ startup êîäà è ëèøü çàòåì áóäåò ïðîäîëæåíà êîìïèëÿöèÿ
  1234.    ïðîöåäóðû main(). Òåì ñàìûì <b>startup êîä</b> îêàæåòñÿ íå â íà÷àëå ôàéëà, êàê
  1235.    ýòî ïðîèñõîäèò îáû÷íî, à â òåëå ïðîöåäóðû main(). Ýòî áóäåò ïîëåçíûì ïðè
  1236.    êîìïèëÿöèè ðåçèäåíòíûõ ïðîãðàìì (TSR).
  1237.  
  1238.        Äèðåêòèâà ?startuptomain ðàáîòàåò òîëüêî ïðè êîìïèëÿöèè com-ôàéëîâ.
  1239. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1240.  
  1241.  
  1242. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.7>
  1243.    2.2.7 ?undef
  1244. </A></B></FONT><FONT FACE="Courier">
  1245.  
  1246.        Ýòà äèðåêòèâà óíè÷òîæàåò êîíñòàíòû îáúÿâëåííûå äèðåêòèâîé <b>?define</b>. Åå
  1247.    ìîæíî ïðèìåíÿòü äëÿ èçìåíåíèÿ â ïðîöåññå êîìïèëÿöèè çíà÷åíèÿ êàêîé-íèáóäü
  1248.    êîíñòàíòû.
  1249. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1250.  
  1251.  
  1252. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.8>
  1253.    2.2.8 ?align è ?aligncode
  1254. </A></B></FONT><FONT FACE="Courier">
  1255.  
  1256.        Â C-- ñóùåñòâóåò äèðåêòèâà <b>?align</b>, êîòîðàÿ äåëàåò îäíîêðàòíîå
  1257.    âûðàâíèâàíèå äàííûõ íà ÷åòíûé àäðåñ. Íî åñëè ê ýòîé äèðåêòèâå äîáàâèòü
  1258.    ÷èñëî, òî âûðàâíèâàíèå áóäåò ïðîèçâåäåíî íà àäðåñ êðàòíûé ýòîìó ÷èñëó.
  1259.    Íàïðèìåð äèðåêòèâà <b>?align 4</b> äîïîëíèò ñåãìåíò äàííûõ äî àäðåñà êðàòíîãî
  1260.    4. Ïðè âûðàâíèâàíèè áóäóò âñòàâëÿòüñÿ áàéòû, çíà÷åíèÿ êîòîðûõ îïðåäåëÿþòñÿ
  1261.    äèðåêòèâîé <b>?aligner</b>, ïî óìîë÷àíèþ ýòî çíà÷åíèå ðàâíî íóëþ. Äèðåêòèâà
  1262.    <b>?align</b> ïðîèçâîäèò âûðàâíèâàíèå òîëüêî â ñåãìåíòå äàííûõ. Â òåõ ìîäåëÿõ
  1263.    ïàìÿòè, â êîòîðûõ ñåãìåíò äàííûõ è êîäà ñîâïàäàþò ýòó äèðåêòèâó ìîæíî
  1264.    ïðèìåíÿòü è äëÿ âûðàâíèâàíèÿ íà÷àëà ïðîöåäóð.
  1265.  
  1266.        Äèðåêòèâà <b>?aligncode [value]</b> äåëàåò âûðàâíèâàíèå â ñåãìåíòå êîäà íà
  1267.    àäðåñ êðàòíûé çíà÷åíèþ <b>value</b>, ïî óìîë÷àíèþ íà ÷åòíûé àäðåñ. Çíà÷åíèå áàéòà
  1268.    çàïîëíåíèÿ â ýòîé äèðåêòèâå ÿâëÿåòñÿ ÷èñëî 0x90 - êîä èíñòðóêöèè NOP.
  1269.    Çíà÷åíèå áàéòà çàïîëíåíèÿ äëÿ ýòîé äèðåêòèâû èçìåíèòü íåëüçÿ. Ò.î. ýòó
  1270.    äèðåêòèâó ìîæíî ïðèìåíÿòü è âíóòðè èñïîëíÿåìîãî êîäà. Íàïðèìåð, åñëè Âû
  1271.    õîòèòå ïîëó÷èòü áûñòðûé êîä íà 486 ïðîöåññîðå, òî ðåêîìåíäóåòñÿ äåëàòü
  1272.    âûðàâíèâàíèå íà÷àëà ïðîöåäóð è öèêëîâ íà àäðåñ êðàòíûé 16.
  1273. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1274.  
  1275.  
  1276. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.9>
  1277.    2.2.9 ?pragma
  1278. </A></B></FONT><FONT FACE="Courier">
  1279.  
  1280.        Äèðåêòèâà <b>#pragma</b> ýòî ìíîãîôóíêöèîíàëüíàëüíàÿ äèðåêòèâà, êîòîðàÿ â
  1281.    ñâîþ î÷åðåäü èìååò ñâîè äèðåêòèâû:
  1282.  
  1283.      <b>option</b>
  1284.        Äèðåêòèâà <b>option</b> ïîçâîëÿåò âêëþ÷èòü â Âàø êîä îïöèè êîìàíäíîé ñòðîêè
  1285.    êîìïèëÿòîðà. Íåêîòîðûå îïöèè íå ìîãóò áûòü èñïîëüçîâàíû â ýòîé äèðåêòèâå;
  1286.    äðóãèå äîëæíû ïîìåùàòüñÿ â ñàìîì íà÷àëå èñõîäíîãî òåêñòà. Ïðèìåð:
  1287.  
  1288.      #pragma option w32c
  1289.  
  1290.        Ýòà äèðåêòèâà îáúÿâëÿåò êîìïèëÿòîðó, ÷òî íàäî ñîçäàòü êîíñîëüíûé
  1291.    32-áèòíûé ôàéë ïîä windows.
  1292.  
  1293.      <b>startup</b>
  1294.       Äèðåêòèâîé <b>startup</b> ìîæíî óêàçàòü ôóíêöèþ, êîòîðàÿ áóäåò âûïîëíåíà ïåðåä
  1295.    çàïóñêîì ïðîöåäóðû <b>main</b>. Ýòà äèðåêòèâà èìååò òàêîé ôîðìàò:
  1296.  
  1297.      #pragma startup procname
  1298.  
  1299.        Êîëè÷åñòâî ðàç, êîòîðîå ìîæíî ïðèìåíÿòü ýòó äèðåêòèâó â îäíîé
  1300.    ïðîãðàììå íå îãðàíè÷åíî, íî ðåàëüíî ìîæíî èñïîëüçîâàòü ëèøü íåñêîëüêî
  1301.    òûñÿ÷ ðàç.
  1302.  
  1303.      <b>line</b>
  1304.        Äèðåêòèâà <b>line</b> âûâîäèò íà ýêðàí íîìåð òåêóùåé ñòðîêè è èìÿ ôàéëà.
  1305.    Äîïîëíèòåëüíî ìîæåò âûâîäèòüñÿ ñîäåðæèìîå ñòðîêè íàõîäÿùååñÿ ïîñëå ñëîâà
  1306.    <b>line</b>. Ïðèìåð:
  1307.  
  1308.      #pragma line information
  1309.  
  1310.        Âñòðåòèâ ýòó äèðåêòèâó, êîìïèëÿòîð âûâåäåò íà ýêðàí íîìåð ñòðîêè è èìÿ
  1311.    ôàéëà. Òàêæå áóäåò âûâåäåíî ñîîáùåíèå ñïðàâà îò ñëîâà <b>line</b>, åñëè îíî
  1312.    åñòü.
  1313.  
  1314.      <b>resource</b>
  1315.        Ýòà äèðåêòèâà ìîæåò ïðèíèìàòü çíà÷åíèÿ <b>start</b> è <b>end</b>. Ýòè äâà
  1316.    çíà÷åíèÿ âûäåëÿþò íà÷àëî è êîíåö áëîêà ðåñóðñîâ, åñëè âû èñïîëüçóåòå åãî
  1317.    íåïîñðåäñòâåííî â èñõîäíîì êîäå ôàéëà, à íå â îòäåëüíîì ôàéëå. Ïðèìåð:
  1318.  
  1319.    #pragma resource start
  1320.  
  1321.    MyMenu MENU DISCARDABLE
  1322.    BEGIN    POPUP "Files",HELP
  1323.        BEGIN
  1324.            MENUITEM "Open",                        ID_OPEN
  1325.            MENUITEM "Save",                        ID_SAVE
  1326.            MENUITEM SEPARATOR
  1327.            MENUITEM "Exit",                        ID_EXIT
  1328.        END
  1329.        MENUITEM "Other",                           65535
  1330.    END
  1331.  
  1332.    #pragma resource end
  1333. <A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1334.  
  1335.  
  1336. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=3.1>
  1337. 3. Êîíñòàíòû.
  1338.  
  1339.  3.1 ×èñëîâûå êîíñòàíòû.
  1340. </A></B></FONT><FONT FACE="Courier">
  1341.  
  1342.      Ïðåäñòàâëåíèå ÷èñëîâûõ êîíñòàíò â âèäå äåñÿòè÷íûõ ÷èñåë (÷èñåë ñ
  1343.  îñíîâàíèåì 10) è øåñòíàäöàòåðè÷íûõ ÷èñåë (îñíîâàíèå ñ÷èñëåíèÿ 16) ïîëíîñòüþ
  1344.  àíàëîãè÷íî ÿçûêó <b>C</b>.
  1345.  
  1346.      Ïðè äâîè÷íîì ïðåäñòàâëåíèè ÷èñåë (îñíîâàíèå 2) ÷èñëî äîëæíî íà÷èíàòüñÿ
  1347.  ñ ñèìâîëîâ <b>0b</b>, çà êîòîðûìè áåç ïðîáåëà èäåò ïîñëåäîâàòåëüíîñòü íóëåé è
  1348.  åäèíèö.
  1349.  
  1350.      Ïðè âîñüìåðè÷íîì ïðåäñòàâëåíèè ÷èñåë (îñíîâàíèå 8) ÷èñëî äîëæíî
  1351.  íà÷èíàòüñÿ ñ ñèìâîëîâ <b>0o</b>, çà êîòîðûìè áåç ïðîáåëà èäåò ïîñëåäîâàòåëüíîñòü
  1352.  öèôð.
  1353.  
  1354.      Âåùåñòâåííîå ÷èñëî îòëè÷àåòñÿ îò öåëîãî ïî íàëè÷èþ â íåì òî÷êè.
  1355.  Íà÷èíàòüñÿ âåùåñòâåííîå ÷èñëî äîëæíî ëèáî öèôðîé îò 0 äî 9, ëèáî çíàêîì
  1356.  ìèíóñ. Íåîáÿçàòåëüíîé ÷àñòüþ âåùåñòâåííîãî ÷èñëà ÿâëÿåòñÿ ïîêàçàòåëü
  1357.  ñòåïåíè. Ïîêàçàòåëü ñòåïåíè îòäåëÿåòñÿ îò ÷èñëà ñèìâîëîì <b>e</b> èëè <b>E</b>.
  1358.  Ïðîáåëû íåäîïóñòèìû.
  1359.  
  1360.  Ïðèìåðû:
  1361.    0b11111111 // äâîè÷íîå ïðåäñòàâëåíèå ÷èñëà 255
  1362.    0x00F // øåñòíàäöàòåðè÷íîå ïðåäñòàâëåíèå ÷èñëà 15
  1363.    0o10 // âîñüìåðè÷íîå ïðåäñòàâëåíèå ÷èñëà 8
  1364.    1.234567E-20 // âåùåñòâåííîå ÷èñëî
  1365.  
  1366.      C-- âìåñòå ñ òðàäèöèîííûì <b>C-</b>ñòèëåì øåñòíàäöàòåðè÷íûõ ÷èñåë ïîíèìàåò è
  1367.  ÷èñëà çàïèñàííûå â ñòèëå àññåìáëåðà. Äëÿ òåõ, êòî âäðóã íå çíàåò, ñîîáùàþ,
  1368.  ÷òî øåñòíàäöàòåðè÷íûå ÷èñëà â àññåìáëåðå èìåþò íà êîíöå ñèìâîë <b>h</b> èëè <b>H</b>.
  1369.  Åñëè ïåðâûé ñèìâîë øåñòíàäöàòåðè÷íîãî ÷èñëà áîëüøå <b>9</b>, òî ïåðåä íèì
  1370.  îáÿçàòåëüíî äîëæåí áûòü çàïèñàí ñèìâîë <b>0</b>. Ïðèìåðû:
  1371.  
  1372.    1234h
  1373.    0A000H
  1374.  
  1375.      Ê ÷èñëîâûì êîíñòàíòàì ìîæíî ïèñàòü ñóôôèêñû <b>L, U è F</b>. Ôàêòè÷åñêè
  1376.  ýòè ñóôôèêñû â C-- íå èãðàþò íèêàêîé ðîëè, êîìïèëÿòîð èõ ïðîñòî
  1377.  ïðîãëàòûâàåò. Ïðèìåð:
  1378.  
  1379.  #define DEF  1L
  1380.  #define DEF2 2Lu
  1381.  #define DEF3 3.0F
  1382.  
  1383.      Ýòè ñóôôèêñû íå çàâèñÿò îò ðåãèñòðà, ò.å. èõ ìîæíî ïèñàòü êàê
  1384.  ìàëåíüêèìè, òàê è áîëüøèìè áóêâàìè.
  1385. <A href="#contents3" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1386.  
  1387.  
  1388. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=3.2>
  1389.  3.2 Ñèìâîëüíûå êîíñòàíòû.
  1390. </A></B></FONT><FONT FACE="Courier">
  1391.  
  1392.      Îäèíî÷íûå ñèìâîëüíûå êîíñòàíòû, êàê è â <b>C</b>, äîëæíû çàêëþ÷àòüñÿ â
  1393.  îäèíî÷íûå êàâû÷êè <b>'</b>.
  1394.  
  1395.      Òàêæå êàê è â <b>C</b>, äëÿ îáîçíà÷åíèÿ ñïåöèàëüíûõ ñèìâîëîâ ñëóæèò îáðàòíàÿ
  1396.  íàêëîííàÿ ÷åðòà âïðàâî <b>\</b> ñ ïîñëåäóþùèì çà íåé êëþ÷åâûì ñèìâîëîì (èëè
  1397.  íåñêîëüêèìè ñèìâîëàìè). Ïîääåðæèâàþòñÿ ñëåäóþùèå ñïåöèàëüíûå ñèìâîëû:
  1398.  
  1399.    \a  /* çâóêîâîé ñèãíàë */
  1400.    \b  /* çàáîé */
  1401.    \f  /* ïåðåâîä  ñòðàíèöû */
  1402.    \l  /* ïåðåâîä ñòðîêè */
  1403.    \n  /* âîçâðàò êàðåòêè*/
  1404.    \r  /* âîçâðàò êàðåòêè*/
  1405.    \t  /* òàáóëÿöèÿ */
  1406.    \x??  /* ñèìâîë ASCII, ñîîòâåòñòâóþùèé áàéòîâîìó ïðåäñòàâëåíèþ,
  1407.               ñîñòîÿùåìó èç äâóõ øåñòíàäöàòåðè÷íûõ öèôð, ðàñïîëîæåííûõ
  1408.               íà ìåñòå çíàêîâ âîïðîñà */
  1409.     \???  /* ñèìâîë ASCII, ñîîòâåòñòâóþùèé áàéòîâîìó ïðåäñòàâëåíèþ,
  1410.               ñîñòîÿùåìó èç òðåõ äåñÿòè÷íûõ öèôð, ðàñïîëîæåííûõ
  1411.               íà ìåñòå çíàêîâ âîïðîñà */
  1412.  
  1413.      Ëþáîé äðóãîé ñèìâîë ïîñëå îáðàòíîé íàêëîííîé ÷åðòû âïðàâî áóäåò ïðèíÿò
  1414.  êàê ïðîñòîé ñèìâîë.
  1415.  
  1416.      Ñèìâîë "Îäèíî÷íàÿ êàâû÷êà" <b>'</b> ìîæåò áûòü ââåäåí ïðè ïîìîùè êîíñòðóêöèè
  1417.  <b>\'</b>
  1418.  
  1419.      Ñèìâîë NULL ìîæåò áûòü ââåäåí êàê ''
  1420.  
  1421.      Â C-- ïîääåðæèâàþòñÿ è ìíîãîáóêâåííûå ñèìâîëüíûå êîíñòàíòû. Ïðèìåðû
  1422.  ìíîãîáóêâåííûõ ñèìâîëüíûõ êîíñòàíò:
  1423.  
  1424.         'ab'
  1425.         'the'
  1426.         'this is large'
  1427.  
  1428.      Íèêàêîãî îãðàíè÷åíèÿ íà ÷èñëî ñèìâîëîâ â ñèìâîëüíîé êîíñòàíòå íå
  1429.  íàêëàäûâàåòñÿ, íî ðàçëè÷àþòñÿ òîëüêî ïîñëåäíèå 4 ñèìâîëà. Ýòî - ìàêñèìóì,
  1430.  êîòîðûé ìîæåò áûòü ñîõðàíåí â 32-ðàçðÿäíîé ïåðåìåííîé. Íàïðèìåð, êîíñòàíòû
  1431.  <b>this is large</b> è <b>arge</b> - îäèíàêîâû.
  1432.  
  1433.      C-- îáðàáàòûâàåò âñå ñèìâîëüíûå êîíñòàíòû êàê ÷èñëîâûå çíà÷åíèÿ ASCII
  1434.  ñèìâîëîâ. Äëÿ ìíîãîáóêâåííûõ ñèìâîëüíûõ êîíñòàíò ïåðâûé ñèìâîë
  1435.  ñîîòâåòñòâóåò ñòàðøèì ðàçðÿäàì, òàêèì îáðàçîì, çíà÷åíèå äëÿ <b>ab</b> áóäåò
  1436.  çàêîäèðîâàíî êàê <b>a*256+b</b>.
  1437. <A href="#contents3" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1438.  
  1439.  
  1440. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=3.3>
  1441.  3.3 Ñòðîêîâûå êîíñòàíòû.
  1442. </A></B></FONT><FONT FACE="Courier">
  1443.  
  1444.      Ñòðîêîâûå êîíñòàíòû, êàê è â C, çàêëþ÷àþòñÿ â äâîéíûå êàâû÷êè (").
  1445.   Ñïåöèàëüíûå ñèìâîëû âíóòðè ñòðîê îáîçíà÷àþòñÿ òàê æå, êàê è â ñèìâîëüíûõ
  1446.   êîíñòàíòàõ. Âñå ñïåöèàëüíûå ñèìâîëû èìåþò òî æå çíà÷åíèå, ÷òî è â
  1447.   ñèìâîëüíûõ êîíñòàíòàõ çà èñêëþ÷åíèåì <b>\n</b>, êîòîðûé èìååò çíà÷åíèå <b>íîâàÿ
  1448.   ñòðîêà</b> è çàìåíÿåò ñîáîé ïàðó ñèìâîëîâ <b>âîçâðàò êàðåòêè</b> è <b>ïåðåâîä
  1449.   ñòðîêè</b>.
  1450.  
  1451.       Â íàñòîÿùåå âðåìÿ íàèáîëüøàÿ äëèíà ñòðîêîâîé êîíñòàíòû - 2048 ñèìâîëîâ,
  1452.   âêëþ÷àÿ ñèìâîë-îãðàíè÷èòåëü 0, òàêèì îáðàçîì, ìàêñèìóì 2047 çíà÷àùèõ
  1453.   ñèìâîëîâ.
  1454. <A href="#contents3" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1455.  
  1456.  
  1457. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=3.4>
  1458.   3.4 Ïîñòîÿííûå âûðàæåíèÿ.
  1459. </A></B></FONT><FONT FACE="Courier">
  1460.  
  1461.       Ïîñòîÿííîå âûðàæåíèå - îäèíî÷íàÿ ÷èñëîâàÿ êîíñòàíòà èëè íåñêîëüêî
  1462.   ÷èñëîâûõ êîíñòàíò, ñâÿçàííûõ ìåæäó ñîáîé îïåðàòîðàìè. ×èñëîâîå çíà÷åíèå
  1463.   âûðàæåíèÿ âû÷èñëÿåòñÿ îäèí ðàç âî âðåìÿ êîìïèëÿöèè è äàëåå èñïîëüçóåòñÿ
  1464.   òîëüêî åãî ïîñòîÿííîå çíà÷åíèå.
  1465.  
  1466.       Ïîäîáíî âñåì âûðàæåíèÿì â C--, ïîñòîÿííûå âûðàæåíèÿ âñåãäà âû÷èñëÿþòñÿ
  1467.   ñëåâà íàïðàâî, íåâçèðàÿ íà ïðàâèëà àðèôìåòèêè! Ýòî ñîâåðøåííî îòëè÷íî îò
  1468.   äðóãèõ ÿçûêîâ, è ïðè íàïèñàíèè âûðàæåíèé íàäî áûòü îñòîðîæíûì è ïîìíèòü,
  1469.   ÷òî 2+3*2=10 à íå 8.
  1470.  
  1471.       Íåêîòîðûå ïðèìåðû ïîñòîÿííûõ âûðàæåíèé:
  1472.   45 & 1 + 3 // ðàâíÿåòñÿ 4
  1473.   14 - 1 / 2 // ðàâíÿåòñÿ 6 (ïîìíèòå öåëî÷èñëåííûå çíà÷åíèÿ)
  1474.   1 * 2 * 3 / 2 + 4 // ðàâíÿåòñÿ 7
  1475.       Ïðèìåðû ñ ïðèìåíåíèåì âåùåñòâåííûõ ÷èñåë:
  1476.   3.23*1.53+2.0E2 // ðàâíÿåòñÿ 204.9419
  1477. <A href="#contents3" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1478.  
  1479.  
  1480. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.1>
  1481. 4. Âûðàæåíèÿ.
  1482.  
  1483.   4.1 Òèïû âûðàæåíèé.
  1484. </A></B></FONT><FONT FACE="Courier">
  1485.  
  1486.       Èìåþòñÿ òðè òèïà âûðàæåíèé â C--, íå ñ÷èòàÿ ïîñòîÿííûõ âûðàæåíèé. Ýòî
  1487.   âûðàæåíèÿ òèïà <b>EAX/AX/AL</b>, âûðàæåíèÿ òèïà <b>íåEAX/AX/AL</b> è óñëîâíûå âûðàæåíèÿ.
  1488.   Âñå C-- âûðàæåíèÿ âû÷èñëÿþòñÿ ñëåâà íàïðàâî, íåçàâèñèìî îò ñòàðøèíñòâà
  1489.   âõîäÿùèõ â âûðàæåíèå ìàòåìàòè÷åñêèõ îïåðàöèé.
  1490. <A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1491.  
  1492.  
  1493. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.2>
  1494.   4.2 Âûðàæåíèÿ òèïà EAX/AX/AL.
  1495. </A></B></FONT><FONT FACE="Courier">
  1496.  
  1497.       Ýòîò òèï âûðàæåíèé ïðèìåíÿåòñÿ â ñëó÷àå, êîãäà åãî ðåçóëüòàò ìîæåò áûòü
  1498.   ñîõðàíåí â ïåðåìåííîé â ïàìÿòè èëè â ðåãèñòðå <b>EAX</b> èëè <b>AX</b> èëè <b>AL</b>.
  1499.  
  1500.       Åñëè ðåçóëüòàò ìîæåò áûòü ñîõðàíåí â ïåðåìåííûõ òèïà <b>byte</b> èëè <b>char</b>,
  1501.   èñïîëüçóåòñÿ íîòàöèÿ <b>AL</b>.
  1502.  
  1503.       Åñëè ðåçóëüòàò ìîæåò áûòü ñîõðàíåí â ïåðåìåííûõ òèïà <b>word</b> èëè <b>int</b>,
  1504.   èñïîëüçóåòñÿ íîòàöèÿ <b>AX</b>.
  1505.  
  1506.       Åñëè ðåçóëüòàò ìîæåò áûòü ñîõðàíåí â ïåðåìåííûõ òèïà <b>dword, long</b> èëè
  1507.   <b>float</b>, èñïîëüçóåòñÿ íîòàöèÿ <b>EAX</b>.
  1508. <A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1509.  
  1510.  
  1511. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.3>
  1512.   4.3 Âûðàæåíèÿ èñïîëüçóþùèå ïîëó÷àòåëü ïðè âû÷èñëåíèè âûðàæåíèÿ.
  1513. </A></B></FONT><FONT FACE="Courier">
  1514.  
  1515.       Åñëè â ïðàâîé ÷àñòè âûðàæåíèÿ èñïîëüçóåòñÿ ïåðåìåííàÿ ÿâëÿþùàÿñÿ
  1516.   îäíîâðåìåííî è ïðèåìíèêîì, òî òàêèå âûðàæåíèÿ äàþò ðàçëè÷íûå ðåçóëüòàòû â
  1517.   çàâèñèìîñòè îò òîãî ÿâëÿåòñÿ ïðèåìíèê ðåãèñòðîì èëè ïåðåìåííîé ïàìÿòè. Ýòî
  1518.   ñâÿçàíî ñ òåì, ÷òî ïðè âû÷èñëåíèè âûðàæåíèÿ â ïåðåìåííóþ ïàìÿòè, âû÷èñëåíèå
  1519.   ïðîèçâîäèòñÿ ñíà÷àëà â ðåãèñòð <b>EAX/AX/AL</b>, è ëèøü ïîñëå îêîí÷àíèÿ âû÷èñëåíèÿ
  1520.   ðåçóëüòàò áóäåò çàïèñàí â ïðèåìíèê. Åñëè æå ïðèåìíèêîì ÿâëÿåòñÿ ðåãèñòð, òî
  1521.   åãî çíà÷åíèå áóäåò ìåíÿòüñÿ ïîñëå êàæäîé îïåðàöèè âû÷èñëåíèÿ. Ïðèìåð:
  1522.  
  1523.   int var;
  1524.     var = BX = 2;
  1525.     var = 3 + var; // ðåçóëüòàòîì áóäåò 5
  1526.     BX = 3 + BX;   // ðåçóëüòàòîì áóäåò 6
  1527. <A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1528.  
  1529.  
  1530. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.4>
  1531.   4.4 Íå - EAX/AX/AL âûðàæåíèÿ.
  1532. </A></B></FONT><FONT FACE="Courier">
  1533.  
  1534.       Ýòîò òèï âûðàæåíèé ïðèìåíÿåòñÿ â ñëó÷àå, êîãäà åãî ðåçóëüòàò äîëæåí
  1535.   áûòü ñîõðàíåí â ëþáîì äðóãîì ðåãèñòðå, îòëè÷íîì îò àêêóìóëÿòîðà <b>EAX, AX</b>
  1536.   èëè <b>AL</b>.  ïðîöåññå âû÷èñëåíèÿ âûðàæåíèÿ ýòîãî òèïà ìåíÿåòñÿ òîëüêî
  1537.   ñîäåðæèìîå óêàçàííîãî ðåãèñòðà-ïîëó÷àòåëÿ, âñå äðóãèå ðåãèñòðû áóäóò
  1538.   ñîõðàíåíû. Åñëè ðåãèñòðîì-ïîëó÷àòåëåì ñëóæèò áàéòîâûé ðåãèñòð, à ïðè
  1539.   âû÷èñëåíèè èñïîëüçóþòñÿ âåëè÷èíû ðàçìåðîì â ñëîâî, îäíîâðåìåííî ñ çàïèñüþ â
  1540.   ìëàäøèé áàéò ìîæåò áûòü ðàçðóøåíî ñîäåðæèìîå ñòàðøåãî áàéòà
  1541.   ðåãèñòðà-ïîëó÷àòåëÿ.
  1542.  
  1543.       Ýòî îáñòîÿòåëüñòâî íàêëàäûâàåò íåêîòîðûå îãðàíè÷åíèÿ íà îïåðàöèè è
  1544.   îïåðàíäû, äîïóñòèìûå â âûðàæåíèÿõ òèïà <b>íå EAX/AX/AL</b>. Âíóòðè âûðàæåíèé
  1545.   áàéòîâîãî òèïà íå äîïóñêàåòñÿ:
  1546.  
  1547.       - äåëàòü âûçîâû ÌÀÊÐÎÊÎÌÀÍÄ,
  1548.       - äåëàòü âûçîâû ÐÅÃÈÑÒÐÎÂÛÕ ïðîöåäóð
  1549.       - äåëàòü âûçîâû ÑÒÅÊÎÂÛÕ ïðîöåäóð
  1550.  
  1551.       Ðàíåå â <b>íå-EAX/AX/AL</b> âûðàæåíèÿõ áûëî ìîæíî èñïîëüçîâàòü ëèøü
  1552.   îïåðàöèè: ñëîæåíèÿ, âû÷èòàíèÿ, XOR, OR, AND. Òåïåðü äëÿ 16 è 32 áèòíûõ
  1553.   ðåãèñòðîâ ïî÷òè âñå îãðàíè÷åíèÿ ñíÿòû. Íî åñòü åùå îãðàíè÷åíèÿ íà ðåãèñòðû.
  1554.   Íàïðèìåð, åñëè â âûðàæåíèè èñïîëüçóåòñÿ ñäâèã íà çíà÷åíèå ïåðåìåííîé, à
  1555.   ïðèåìíèêîì ÿâëÿþòñÿ ðåãèñòðû <b>CX/ECX,</b> òî òàêîå âûðàæåíèå êîìïèëÿòîð íå áóäåò
  1556.   êîìïèëèðîâàòü:
  1557.  
  1558.      CX = var * SI * 3 * var >> 3;  //âûçîâåò ñîîáùåíèå îá îøèáêå
  1559.  
  1560.       Ïðèìå÷àíèå:  äëÿ 8 áèòíûõ <b>íå-AL</b> âûðàæåíèé óìíîæàòü ìîæíî òîëüêî íà
  1561.   ÷èñëà: 0, 1, 2, 4, 8, 16, 32, 64 è 128. Âñå ýòè îãðàíè÷åíèÿ ñâÿçàíû ñî
  1562.   ñòðåìëåíèåì íå ðàçðóøàòü äðóãèå ðåãèñòðû ïðè èñïîëüçîâàíèè <b>íå-EAX/AX/AL</b>
  1563.   âûðàæåíèé.
  1564. <A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1565.  
  1566.  
  1567. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.5>
  1568.   4.5 Óñëîâíûå âûðàæåíèÿ.
  1569. </A></B></FONT><FONT FACE="Courier">
  1570.  
  1571.       Óñëîâíûå âûðàæåíèÿ - âûðàæåíèÿ, ðåçóëüòàòîì âû÷èñëåíèÿ êîòîðûõ ÿâëÿåòñÿ
  1572.   ëîãè÷åñêîå çíà÷åíèå äà èëè íåò, èñïîëüçóåìîå â îïåðàòîðå <b>if</b> è öèêëàõ <b>do {}</b>
  1573.   <b>while, while, for</b>.
  1574.  
  1575.       Èìåþòñÿ äâà òèïà óñëîâíûõ âûðàæåíèé, ïðîñòûå è ñëîæíûå.
  1576.  
  1577.       Âîçìîæíî ëîãè÷åñêîå îáúåäèíåíèå óñëîâèé.
  1578. <A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1579.  
  1580.  
  1581. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.5.1>
  1582.     4.5.1 Ïðîñòûå óñëîâíûå âûðàæåíèÿ.
  1583. </A></B></FONT><FONT FACE="Courier">
  1584.  
  1585.         Ïðîñòûå óñëîâíûå âûðàæåíèÿ - îäèíî÷íàÿ ëåêñåìà èëè âûðàæåíèå, êîòîðîå
  1586.     ïðèìåò çíà÷åíèå äà, åñëè ðàñ÷åòíîå çíà÷åíèå îòëè÷íî îò íóëÿ, èëè çíà÷åíèå
  1587.     íåò, åñëè ðàñ÷åòíîå çíà÷åíèå ðàâíî íóëþ.
  1588. <A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1589.  
  1590.  
  1591. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.5.2>
  1592.     4.5.2 Ñëîæíûå óñëîâíûå âûðàæåíèÿ.
  1593. </A></B></FONT><FONT FACE="Courier">
  1594.  
  1595.     Ñëîæíûå óñëîâíûå âûðàæåíèÿ èìåþò ñëåäóþùóþ ôîðìó:
  1596.  
  1597.          (ëåâàÿ_÷àñòü îïåðàòîð_îòíîøåíèÿ ïðàâàÿ_÷àñòü)
  1598.  
  1599.     Ãäå:
  1600.        ëåâàÿ_÷àñòü - ëþáîå âûðàæåíèå òèïà <b>AL/AX/EAX</b> èëè ïîñòîÿííîå âûðàæåíèå.
  1601.                      Òèï âûðàæåíèÿ îïðåäåëÿåòñÿ ïî òèïó ïåðâîé ëåêñåìû
  1602.                      (ðåãèñòðà èëè ïåðåìåííîé); çíà÷åíèå òèïà ïî óìîë÷àíèþ -
  1603.                      word äëÿ 16-áèòíûõ ïðîãðàìì è dword äëÿ 32-áèòíûõ. Åñëè
  1604.                      æåëàòåëåí äðóãîé òèï, ïåðåä âûðàæåíèåì ñòàâèòñÿ
  1605.                      ñîîòâåòñòâóþùåå êëþ÷åâîå ñëîâî, îïðåäåëÿþùåå åãî òèï:
  1606.                      <b>byte, char, int, long, dword</b> èëè <b>float</b>
  1607.  
  1608.        îïåðàòîð_îòíîøåíèÿ - ëþáîé èç îïåðàòîðîâ îòíîøåíèÿ:
  1609.                      <b>==, !=, <>, <, >, <=, èëè >=</b>.
  1610.  
  1611.        ïðàâàÿ_÷àñòü - ëþáîé îäèíî÷íûé ðåãèñòð, îäèíî÷íàÿ ïåðåìåííàÿ èëè
  1612.                      ïîñòîÿííîå âûðàæåíèå.
  1613.  
  1614.     Ïðèìåðû ïðàâèëüíûõ ñëîæíûõ óñëîâíûõ âûðàæåíèé:
  1615.  
  1616.          (X + y > z)
  1617.          (int CX*DX < = 12*3)
  1618.          (byte first*second+hold == cnumber)
  1619.  
  1620.     Ïðèìåðû íåäîïóñòèìûõ ñëîæíûõ óñëîâíûõ âûðàæåíèé:
  1621.  
  1622.          (x+y >= x-y) // ïðàâàÿ ÷àñòü íå ÿâëÿåòñÿ îäèíî÷íîé ëåêñåìîé èëè
  1623.                          ïîñòîÿííûì âûðàæåíèåì.
  1624.          (Z = y) // âìåñòî == îøèáî÷íî ïîñòàâëåí =
  1625. <A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1626.  
  1627.  
  1628. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.6>
  1629.   4.6 Èçìåíåíèå òèïà âûðàæåíèÿ ïðè ïðèñâàèâàíèè.
  1630. </A></B></FONT><FONT FACE="Courier">
  1631.  
  1632.       Åñëè ïîñëå çíàêà ðàâåíñòâà íàïèñàòü òèï îòëè÷íûé îò òèïà âû÷èñëÿåìîé
  1633.   ïåðåìåííîé, òî âñå ïåðåìåííûå ó÷àñòâóþùèå â ïðîöåññå âû÷èñëåíèÿ, áóäóò
  1634.   ïðåîáðàçîâûâàòüñÿ ê ýòîìó íîâîìó òèïó, è ëèøü êîíå÷íûé ðåçóëüòàò áóäåò
  1635.   ïðåîáðàçîâàí ê òèïó âû÷èñëÿåìîé ïåðåìåííîé. Ïðèìåð:
  1636.  
  1637.   int i, a;
  1638.   long b;
  1639.   char c;
  1640.  
  1641.     i = a * b + c ;
  1642.  
  1643.       Çíà÷åíèÿ ïåðåìåííûõ a, b, è c â ýòîì ïðèìåðå ïåðåä âû÷èñëåíèåì áóäóò
  1644.   ïðåîáðàçîâàíû ê òèïó <b>int</b> (òèïó ïåðåìåííîé i). Íî åñëè çàïèñàòü ýòî
  1645.   âûðàæåíèå âîò òàê:
  1646.  
  1647.     i = long a * b + c ;
  1648.  
  1649.       òî  ïåðåìåííûå  a,  b,  è  c  â  ýòîì  ïðèìåðå  ïåðåä  âû÷èñëåíèåì áóäóò
  1650.   ïðåîáðàçîâàíû ê òèïó  <b>long</b>, à êîíå÷íûé  ðåçóëüòàò áóäåò ïðåîáðàçîâàí  ê òèïó
  1651.   ïåðåìåííîé i - <b>int</b>.
  1652. <A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1653.  
  1654.  
  1655. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.7>
  1656.   4.7 Âû÷èñëåíèå â ðåãèñòðû EAX/AX/AL ñî çíàêîì.
  1657. </A></B></FONT><FONT FACE="Courier">
  1658.  
  1659.       Ïî óìîë÷àíèþ âñå âû÷èñëåíèÿ â ðåãèñòðû ïðîèçâîäÿòñÿ êàê ñ áåç çíàêîâûìè
  1660.   âåëè÷èíàìè.
  1661.  
  1662.   Íàïðèìåð:
  1663.  
  1664.     int a,b,c;
  1665.     AX = a * b / c ;
  1666.  
  1667.   Ïðè ýòîì êîìïèëÿòîð ãåíåðèðîâàë áåç çíàêîâûå èíñòðóêöèè <b>div</b> è <b>mul</b>, òàê êàê
  1668.   ðåãèñòðû ñ÷èòàþòñÿ áåç çíàêîâûìè ïåðåìåííûìè. Åñëè íàïèñàòü âîò òàê:
  1669.  
  1670.     AX = int a * b / c ;
  1671.  
  1672.   òî êîìïèëÿòîð ñãåíåðèðóåò èíñòðóêöèè <b>idiv</b> è <b>imul</b>.
  1673.  
  1674.        Îáðàùàþ âàøå âíèìàíèå, ÷òî äëÿ ðåãèñòðà <b>AL</b> ìîæíî èñïîëüçîâàòü òîëüêî
  1675.   ìîäèôèêàòîð <b>char</b>, äëÿ <b>AX</b> ñîîòâåòñòâåííî òîëüêî <b>int</b>, à äëÿ <b>EAX - long</b>. Äëÿ
  1676.   îñòàëüíûõ ðåãèñòðîâ ïîäîáíîå äåëàòü íåëüçÿ.
  1677. <A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1678.  
  1679.  
  1680. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=5.1>
  1681. 5. Èäåíòèôèêàòîðû.
  1682.  
  1683.   5.1 Ôîðìàò èäåíòèôèêàòîðà.
  1684. </A></B></FONT><FONT FACE="Courier">
  1685.  
  1686.       Èäåíòèôèêàòîðû â C-- äîëæíû íà÷èíàòüñÿ èëè ñ ñèìâîëà ïîä÷åðêèâàíèÿ <b>_</b>
  1687.   èëè çàãëàâíûõ èëè ñòðî÷íûõ áóêâ. Ñëåäóþùèå ñèìâîëû ìîãóò áûòü ëþáîé
  1688.   êîìáèíàöèåé ñèìâîëîâ ïîä÷åðêèâàíèÿ, çàãëàâíûõ èëè ñòðî÷íûõ áóêâ èëè ÷èñåë
  1689.   (îò 0 äî 9). Îáùàÿ äëèíà èäåíòèôèêàòîðà íå ìîæåò ïðåâûøàòü 64 ñèìâîëà.
  1690.   Ñèìâîëû ñ êîäîì áîëüøå 0x7A (êîä ñèìâîëà <b>z</b>) íåäîïóñòèìû.
  1691.  
  1692.   Ïðèìåðû äîïóñòèìûõ èäåíòèôèêàòîðîâ:
  1693.  
  1694.   _DOG
  1695.   Loony12
  1696.   HowdYBoys_AND_Girls
  1697.   WOW___
  1698.   X
  1699.  
  1700.   Ïðèìåðû íåäîïóñòèìûõ èäåíòèôèêàòîðîâ:
  1701.  
  1702.   12bogus                                 /* íå ìîæåò íà÷èíàòüñÿ ñ ÷èñëà */
  1703.   WowisthisalongidentifieryupitsureisnotOyoulengthismorethat64chars
  1704.    /*äëèíà èäåíòèôèêàòîðà ïðåâûøàåò 64 */
  1705.   Y_es sir                                /* ïðîáåëû íåäîïóñòèìû */
  1706.   The-end                                 /* äåôèñû íåäîïóñòèìû */
  1707. <A href="#contents5" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1708.  
  1709.  
  1710. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=5.2>
  1711.   5.2 Çàðåçåðâèðîâàííûå èäåíòèôèêàòîðû.
  1712. </A></B></FONT><FONT FACE="Courier">
  1713.  
  1714.       Ñïèñîê çàðåçåðâèðîâàííûõ â C-- èäåíòèôèêàòîðîâ, êîòîðûå íå ìîãóò
  1715.   èñïîëüçîâàòüñÿ êàê îáùèå èäåíòèôèêàòîðû, ïîñêîëüêó îíè óæå áûëè îïðåäåëåíû
  1716.   èëè çàðåçåðâèðîâàíû äëÿ äðóãèõ öåëåé:
  1717.  
  1718.   <b>BREAK  CASE    CONTINUE  ELSE    EXTRACT  FALSE  FOR
  1719.   FROM   GOTO    IF        LOOPNZ  RETURN   SWITCH TRUE
  1720.   WHILE
  1721.  
  1722.   CARRYFLAG    MINUSFLAG  NOTCARRYFLAG  NOTOVERFLOW
  1723.   NOTZEROFLAG  OVERFLOW   PLUSFLAG      ZEROFLAG
  1724.  
  1725.   __CODEPTR__ __COMPILER__ __DATAPTR__ __DATESTR__ __DATE__    __DAY__
  1726.   __HOUR__    __LINE__     __MINUTE__  __MONTH__   __POSTPTR__ __SECOND__
  1727.   __TIME__    __VER1__     __VER2__    __WEEKDAY__ __YEAR__
  1728.  
  1729.   _export  asm     break   byte      case     cdecl   char       continue
  1730.   default  do      dword   else      enum     extern  far        fastcall
  1731.   float    for     goto    if        inline   int     interrupt  long
  1732.   loop     loopnz  pascal  return    short    signed  sizeof     static
  1733.   stdcall  struct  switch  union     unsigned void    while      word
  1734.  
  1735.   ESCHAR  ESBYTE  ESINT  ESWORD  ESLONG  ESDWORD  ESFLOAT
  1736.   CSCHAR  CSBYTE  CSINT  CSWORD  CSLONG  CSDWORD  CSFLOAT
  1737.   SSCHAR  SSBYTE  SSINT  SSWORD  SSLONG  SSDWORD  SSFLOAT
  1738.   DSCHAR  DSBYTE  DSINT  DSWORD  DSLONG  DSDWORD  DSFLOAT
  1739.   FSCHAR  FSBYTE  FSINT  FSWORD  FSLONG  FSDWORD  FSFLOAT
  1740.   GSCHAR  GSBYTE  GSINT  GSWORD  GSLONG  GSDWORD  GSFLOAT
  1741.  
  1742.   AX   CX   DX   BX   SP   BP   SI   DI
  1743.   EAX  ECX  EDX  EBX  ESP  EBP  ESI  EDI
  1744.   AL   CL   DL   BL   AH   CH   DH   BH
  1745.   ES   CS   SS   DS   FS   GS
  1746.  
  1747.   ST(0)  ST(1)  ST(2)  ST(3)  ST(4)  ST(5)  ST(6)  ST(7)  ST
  1748.   st(0)  st(1)  st(2)  st(3)  st(4)  st(5)  st(6)  st(7)  st
  1749. </b>
  1750.       Ýòîò ñïèñîê ìîæåò áûòü ïîëó÷åí èç C-- òðàíñëÿòîðà â ëþáîå âðåìÿ,
  1751.   çàïóñêîì åãî ñ îïöèåé <b>/WORDS</b> èç êîìàíäíîé ñòðîêè.
  1752.  
  1753.       Åñëè Âû ïîëüçóåòåñü ïðè êîìïèëÿöèè îïöèåé êîìàíäíîé ñòðîêè <b>/ia</b>, êîòîðàÿ
  1754.   ïîçâîëÿåò èñïîëüçîâàòü àññåìáëåðíûå èíñòðóêöèè íå çàêëþ÷àÿ èõ â áëîêè <b>asm</b> è
  1755.   áåç ïðåôèêñà <b>$</b>, òî âñå èìåíà àññåìáëåðíûõ èíñòðóêöèé ñòàíîâÿòñÿ
  1756.   çàðåçåðâèðîâàííûìè ñëîâàìè. Ïðè÷åì èìåíà àññåìáëåðíûõ èíñòðóêöèé êîìïèëÿòîð
  1757.   ðàçëè÷àåò íåçàâèñèìî îò òîãî, íàïèñàíû îíè ìàëåíüêèìè èëè áîëüøèìè áóêâàìè.
  1758.  
  1759.      Ñïèñîê èìåí ïîääåðæèâàåìûõ êîìïèëÿòîðîì àññåìáëåðíûõ èíñòðóêöèè ìîæíî
  1760.   ïîëó÷èòü çàïóñòèâ êîìïèëÿòîð ñ îïöèåé <b>/LAI</b>.
  1761.  
  1762.      Êðîìå ýòîãî â àññåìáëåðíûõ èíñòðóêöèÿõ ñòàíîâÿòñÿ çàðåçåðâèðîâàííûìè
  1763.   ñëåäóþùèå èäåíòèôèêàòîðû:
  1764.  
  1765.   <b>ax   cx   dx   bx   sp   bp   si   di
  1766.   eax  ecx  edx  ebx  esp  ebp  esi  edi
  1767.   al   cl   dl   bl   ah   ch   dh   bh
  1768.   es   cs   ss   ds   fs   gs
  1769.  
  1770.   DR0   DR1   DR2   DR3   DR4   DR5   DR6   DR7
  1771.   CR0   CR1   CR2   CR3   CR4   CR5   CR6   CR7
  1772.   TR0   TR1   TR2   TR3   TR4   TR5   TR6   TR7
  1773.   MM0   MM1   MM2   MM3   MM4   MM5   MM6   MM7
  1774.   XMM0  XMM1  XMM2  XMM3  XMM4  XMM5  XMM6  XMM7
  1775.  
  1776.   dr0   dr1   dr2   dr3   dr4   dr5   dr6   dr7
  1777.   cr0   cr1   cr2   cr3   cr4   cr5   cr6   cr7
  1778.   tr0   tr1   tr2   tr3   tr4   tr5   tr6   tr7
  1779.   mm0   mm1   mm2   mm3   mm4   mm5   mm6   mm7
  1780.   xmm0  xmm1  xmm2  xmm3  xmm4  xmm5  xmm6  xmm7
  1781. </b><A href="#contents5" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1782.  
  1783.  
  1784. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=5.3>
  1785.   5.3 Óíèâåðñàëüíûå ðåãèñòðû äëÿ 16 è 32-áèòíîãî ðåæèìà.
  1786. </A></B></FONT><FONT FACE="Courier">
  1787.  
  1788.       Ïðè ñîçäàíèè áèáëèîòå÷íûõ ïðîöåäóð î÷åíü ÷àñòî ïðèõîäèòñÿ ïèñàòü
  1789.   âàðèàíòû ïðîöåäóðû äëÿ ðàáîòû â 16-áèòíîì è 32-áèòíîì ðåæèìàõ, êîòîðûå
  1790.   îòëè÷àþòñÿ äðóã îò äðóãà ëèøü èñïîëüçîâàíèåì â íèõ ëèáî 16-áèòíûõ ëèáî
  1791.   32-áèòíûõ ðåãèñòðîâ ñîîòâåòñòâåííî. Íî ìîæíî ïèñàòü ëèøü îäíó ïðîöåäóðó,
  1792.   èñïîëüçóÿ â íåé íîâûé ñèíòàêñèñ ðåãèñòðîâ. Åñëè êîìïèëÿòîð âñòðåòèò âîò
  1793.   òàêîé ñèíòàêñèñ:
  1794.  
  1795.     (E)AX=0;
  1796.  
  1797.       òî êîìïèëÿòîð áóäåò èñïîëüçîâàòü ïðè êîìïèëÿöèè 16-áèòíîãî êîäà ðåãèñòð
  1798.   <b>AX</b>, à ïðè êîìïèëÿöèè 32-áèòíîãî êîäà ðåãèñòð <b>EAX</b>.
  1799.  
  1800.       Èñïîëüçîâàíèå àâòîìàòè÷åñêèõ ðåãèñòðîâ ïîçâîëèò óïðîñòèòü áèáëèîòå÷íûå
  1801.   ôàéëû è ñäåëàòü èõ áîëåå ïîíÿòíûìè.
  1802. <A href="#contents5" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1803.  
  1804.  
  1805. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=5.4>
  1806.   5.4 Ïðåäîïðåäåëåííûå èäåíòèôèêàòîðû.
  1807. </A></B></FONT><FONT FACE="Courier">
  1808.  
  1809.       Èäåíòèôèêàòîðû, îïðåäåëÿåìûå êîìïèëÿòîðîì â çàâèñèìîñòè îò ðåæèìà
  1810.   êîìïèëÿöèè:
  1811.  
  1812.   <b>__TLS__</b>     èäåò êîìïèëÿöèÿ ïîä windows (w32, w32c, dll).
  1813.   <b>__DLL__</b>     èäåò êîìïèëÿöèÿ dll.
  1814.   <b>__CONSOLE__</b> èäåò êîìïèëÿöèÿ êîíñîëüíîãî ïðèëîæåíèÿ windows
  1815.   <b>__WIN32__</b>   èäåò êîìïèëÿöèÿ GUI-øíîãî ïðèëîæåíèÿ
  1816.   <b>__FLAT__</b>    êîìïèëèðóåòñÿ 32-áèòíûé êîä.
  1817.   <b>__MSDOS__</b>   êîìïèëèðóåòñÿ 16-áèòíûé êîä.
  1818.   <b>__TINY__</b>    èñïîëüçóåòñÿ ìîäåëü ïàìÿòè tiny â 16-áèòíîì ðåæèìå
  1819.   <b>__SMALL__</b>   èñïîëüçóåòñÿ ìîäåëü ïàìÿòè small â 16-áèòíîì ðåæèìå
  1820.   <b>__DOS32__</b>   êîìïèëèðóåòñÿ 32-áèòíûé êîä ïîä DOS (d32)
  1821.   <b>__COM__</b>     êîìïèëèðóåòñÿ com-ôàéë
  1822.   <b>__SYS__</b>     êîìïèëèðóåòñÿ sys-ôàéë
  1823.   <b>__ROM__</b>     êîìïèëèðóåòñÿ rom-ôàéë
  1824.   <b>__OBJ__</b>     êîìïèëèðóåòñÿ obj-ôàéë
  1825.   <b>__TEXE__</b>    êîìïèëèðóåòñÿ exe-ôàéë ìîäåëè tiny
  1826.   <b>__EXE__</b>     êîìïèëèðóåòñÿ exe-ôàéë ìîäåëè small
  1827.   <b>__MEOS__</b>    êîìïèëèðóåòñÿ èñïîëíÿåìûé ôàéë äëÿ MenuetOS
  1828.   <b>codesize</b>    êîìïèëÿöèÿ âåäåòñÿ ñ îïòèìèçàöèåé íà ðàçìåð êîäà
  1829.   <b>speed</b>       êîìïèëÿöèÿ âåäåòñÿ ñ îïòèìèçàöèåé íà áûñòðîäåéñòâèå êîäà
  1830.   <b>cpu</b>         îïðåäåëÿåò òèï ïðîöåññîðà äëÿ êîòîðîãî âåäåòñÿ êîìïèëÿöèÿ:
  1831.             0 - 8086
  1832.             1 - 80186
  1833.             2 - 80286
  1834.             3 - 80386
  1835.             4 - 80486
  1836.             5 - Pentium
  1837.             6 - Pentium MMX
  1838.             7 - Pentium II
  1839.  
  1840.       Ýòè èäåíòèôèêàòîðû ìîãóò áûòü ïðîâåðåíû äèðåêòèâàìè <b>#ifdef</b> èëè <b>#ifndef</b>.
  1841.   Èäåíòèôèêàòîð <b>cpu</b> ìîæåò áûòü èñïîëüçîâàí ëèøü ñ îïåðàòîðàìè ïðîâåðêè
  1842.   óñëîâèé:
  1843.  
  1844.   #ifdef cpu > 3  //åñëè òèï ïðîöåññîðà áîëüøå 80386
  1845. <A href="#contents5" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1846.  
  1847.  
  1848. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.1>
  1849. 6. Ïåðåìåííûå.
  1850.  
  1851.   6.1 Òèïû ïåðåìåííûõ.
  1852. </A></B></FONT><FONT FACE="Courier">
  1853.  
  1854.       Â C-- èìååòñÿ ñåìü òèïîâ ïåðåìåííûõ (èìåíîâàííûõ îáëàñòåé ïàìÿòè), ýòî:
  1855.   <b>byte, word, dword, char, int, long, float.</b>
  1856.  
  1857.       Ñëåäóþùàÿ òàáëèöà  ïîêàçûâàåò ðàçìåð  è äèàïàçîí  ïðåäñòàâëÿåìûõ âåëè÷èí
  1858.   êàæäîãî èç òèïîâ ïåðåìåííîé:
  1859.  
  1860.    NAME   | SIZE  |        VALUE RANGE          |        VALUE RANGE
  1861.    òèï    |ðàçìåð |   äèàïàçîí ïðåäñòàâëåíèÿ    |   äèàïàçîí ïðåäñòàâëåíèÿ
  1862.           |â áàéò.|    â äåñÿòè÷íîé ñèñòåìå     | â øåñòíàäöàòåðè÷íîé ñèñòåìå
  1863.   ---------------------------------------------------------------------------
  1864.   byte    |   1   |           0 to 255          |        0x00 to 0xFF
  1865.   word    |   2   |           0 to 65535        |      0x0000 to 0xFFFF
  1866.   dword   |   4   |           0 to 4294967295   |  0x00000000 to 0xFFFFFFFF
  1867.   char    |   1   |        -128 to 127          |        0x80 to 0x7F
  1868.   int     |   2   |      -32768 to 32767        |      0x8000 to 0x7FFF
  1869.   long    |   4   | -2147483648 to 2147483647   |  0x80000000 to 0x7FFFFFFF
  1870.   float   |   4   |    -3,37E38 to +3,37E38     |  0xFF7FFFFF to 0x7FFFFFFF
  1871.  
  1872.       Ïðèìå÷àíèå:  äëÿ ðàáîòû ñ òèïàìè <b>float, dword è long</b> èñïîëüçóþòñÿ
  1873.   32-ðàçðÿäíûå öåëî÷èñëåííûå êîìàíäû, ñëåäîâàòåëüíî, äëÿ èõ âûïîëíåíèÿ íóæíî
  1874.   èìåòü ïðîöåññîð íå õóæå 80386, ÷òî ñåé÷àñ íå ÿâëÿåòñÿ áîëüøîé ïðîáëåìîé.
  1875.  
  1876.       Äëÿ ñîâìåñòèìîñòè ñî ñòàíäàðòîì, ïðèíÿòîì â ÿçûêå <b>C</b>, ââåäåíû
  1877.   íîâûå çàðåçåðâèðîâàííûå ñëîâà: <b>short</b>, <b>signed</b>, <b>unsigned</b>. Äëÿ òèïà <b>int</b>
  1878.   â 32-áèòíîì ðåæèìå èçìåíåíà ðàçðÿäíîñòü. Âîò òàáëèöà âñåõ âàðèàíòîâ íîâûõ
  1879.   òèïîâ äàííûõ:
  1880.  
  1881.   ---------------------------------------------------------
  1882.   |   ïîëíûé òèï     |äîïóñòèìûå ñîêðàùåíèÿ|ñòàðûå àíàëîãè|
  1883.   ---------------------------------------------------------
  1884.   |signed char       |char                 |  char        |
  1885.   |signed int        |signed, int          |  int/long    |
  1886.   |signed short int  |short, signed short  |  int         |
  1887.   |signed long int   |long, signed long    |  long        |
  1888.   |unsigned char     |---                  |  byte        |
  1889.   |unsigned int      |unsigned             |  word/dword  |
  1890.   |unsigned short int|unsigned short       |  word        |
  1891.   |unsigned long int |unsigned long        |  dword       |
  1892.   ---------------------------------------------------------
  1893.  
  1894.       Ñòàðûå òèïû <b>byte, word è dword</b> ïîääåðæèâàþòñÿ ïî ïðåæíåìó è èìåþò
  1895.   ôóíêöèîíàëüíî ïðåæíåå çíà÷åíèå. Èçìåíåíèÿ êîñíóëèñü ëèøü òèïà <b>int</b>. Îí â
  1896.   16-áèòíîì ðåæèìå, òàêæå êàê è òèï <b>unsigned int</b>, èìååò 16-áèòíûé ðàçìåð, à
  1897.   â 32-áèòíîì ðåæèìå ýòè îáà òèïà èìåþò ðàçìåð â 32-áèòà. Íà ïåðâûé âçãëÿä
  1898.   òàêèå ñâîéñòâà òèïà <b>int</b> âíîñÿò íåêîòîðóþ ïóòàíèöó, íî ýòî äàåò áîëüøîé
  1899.   âûèãðûø ïðè èñïîëüçîâàíèè ýòîãî òèïà â áèáëèîòå÷íûõ ôàéëàõ, êîòîðûå ìîãóò
  1900.   áûòü èñïîëüçîâàíû ïðè êîìïèëÿöèè 16-áèòíûõ è 32-áèòíûõ ïðîãðàìì.
  1901. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1902.  
  1903.  
  1904. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.2>
  1905.   6.2 Îáúÿâëåíèå ïåðåìåííûõ.
  1906. </A></B></FONT><FONT FACE="Courier">
  1907.  
  1908.       Ñèíòàêñèñ äëÿ îáúÿâëåíèÿ ïåðåìåííûõ ñëåäóþùèé:
  1909.  
  1910.   variable-type identifier;
  1911.  
  1912.   ãäå <b>variable-type - char, byte, int, word, long, dword</b> èëè <b>float</b>.
  1913.  
  1914.       Îäíîâðåìåííî ìîãóò áûòü îáúÿâëåíû íåñêîëüêî èäåíòèôèêàòîðîâ îäíîãî òèïà:
  1915.  
  1916.   variable-type identifier1, identifier2, ... , identifierN;
  1917.  
  1918.       Îäíîìåðíûå ìàññèâû ìîãóò áûòü îáúÿâëåíû ñëåäóþùèì îáðàçîì:
  1919.  
  1920.   variable-type identifier[elements];
  1921.  
  1922.   ãäå <b>elements</b> -  ïîñòîÿííîå âûðàæåíèå äëÿ  êîëè÷åñòâà ïåðåìåííûõ ýòîãî  òèïà,
  1923.   îáúåäèíåííûõ â ìàññèâ.
  1924.  
  1925.       Èíèöèàëèçèðîâàííûå ìàññèâû ìîæíî îáúÿâëÿòü áåç óêàçàíèÿ ÷èñëà
  1926.   ýëåìåíòîâ. Ïðè ýòîì áóäåò ñîçäàí ìàññèâ ïî ôàêòè÷åñêîìó ÷èñëó ýëåìåíòîâ.
  1927.  
  1928.   variable-type identifier[] = { const1, const2 };
  1929.  
  1930.       Ïåðåìåííûå ïðè îáúÿâëåíèè ìîãóò áûòü ïðîèíèöèàëèçèðîâàíû ñëåäóþùèì
  1931.   îáðàçîì:
  1932.  
  1933.   variable-type identifier = value;
  1934.  
  1935.       Íåêîòîðûå ïðèìåðû ãëîáàëüíûõ îáúÿâëåíèé:
  1936.   byte i,j;    /* îáúÿâëÿåò äâå ïåðåìåííûå òèïà byte ñ èìåíàìè i è j */
  1937.   word see[10] /* îáúÿâëÿåò ìàññèâ ñ èìåíåì see, ñîñòîÿùèé èç 10
  1938.                   ýëåìåíòîâ òèïà word */
  1939.   int h,x[27]  /* îáúÿâëÿåò, ïåðåìåííóþ òèïà int ñ èìåíåì h,
  1940.                   è ìàññèâ ñ èìåíåì x, ñîñòîÿùèé èç 27 ýëåìåíòîâ òèïà int */
  1941.   long size=0; /* îáúÿâëåíà ïåðåìåííàÿ òèïà long ñ èìåíåì size è åé ïðèñâîåíî
  1942.                   çíà÷åíèå 0. */
  1943. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1944.  
  1945.  
  1946. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.3>
  1947.   6.3 Ãëîáàëüíûå ïåðåìåííûå.
  1948. </A></B></FONT><FONT FACE="Courier">
  1949.  
  1950.       Ãëîáàëüíûå ïåðåìåííûå - ýòî ïåðåìåííûå, îáëàñòü äåéñòâèÿ êîòîðûõ
  1951.   ðàñïðîñòðàíÿåòñÿ íà âñþ ïðîãðàììó. Â C-- èñïîëüçîâàòü ãëîáàëüíûå ïåðåìåííûå
  1952.   ìîæíî â ïðîöåäóðàõ, ðàñïîëîæåííûõ íèæå ìåñòà åå îáúÿâëåíèÿ. Ò.å. åñëè Âû
  1953.   ïèøèòå ïðîöåäóðó, â êîòîðîé èñïîëüçóåòå ïåðåìåííóþ var, à ñàìó ïåðåìåííóþ
  1954.   îáúÿâëÿåòå íèæå òåêñòà ïðîöåäóðû, òî êîìïèëÿòîð âûäàñò îøèáêó. Ýòî ñâÿçàíî
  1955.   ñ òåì, ÷òî êîìïèëÿòîð ìîæåò çíàòü òèï ïåðåìåííîé òîëüêî ïîñëå èõ
  1956.   îáúÿâëåíèÿ.  Íî äëÿ òàêèõ ïåðåìåííûõ ìîæíî èñïîëüçîâàòü âçÿòèå èõ àäðåñà,
  1957.   òàê êàê àäðåñ ïåðåìåííîé íå çàâèñèò îò åãî òèïà. Ïðèìåð:
  1958.  
  1959.   void Proc(){
  1960.     gvar = 0; /* êîìïèëÿòîð âûäàñò ñîîáùåíèå îá îøèáêå, ò.ê. îí åùå íå çíàåò
  1961.                  òèïà ïåðåìåííîé gvar */
  1962.     AX = #gvar; /* íåñìîòðÿ íà òî, ÷òî êîìïèëÿòîð íå çíàåò è àäðåñà ýòîé
  1963.                    ïåðåìåííîé òàêîå âûðàæåíèå áóäåò îòêîìïèëèðîâàíî */
  1964.   }
  1965.   int gvar;
  1966.  
  1967.       Íî âñå æå ñèòóàöèÿ íå áåçíàäåæíà è íàì óäàñòñÿ äîáèòüñÿ òîãî, ÷åãî ìû
  1968.   çàäóìàëè. Â ýòîì íàì ïîìîæåò àëüòåðíàòèâíûé ñèíòàêñèñ îáðàùåíèÿ ê
  1969.   ïåðåìåííûì:
  1970.  
  1971.   void Proc(){
  1972.     DSINT[#gvar] = 0; /* êîìïèëÿòîð óñïåøíî îòêîìïèëèðóåò ýòî âûðàæåíèå ò.ê.
  1973.                          åìó òåïåðü èçâåñòåí òèï ïåðåìåííîé gvar */
  1974.   }
  1975.   int gvar;
  1976.  
  1977.       Ïàìÿòü ïîä ãëîáàëüíûå ïåðåìåííûå âûäåëÿåòñÿ â ñåãìåíòå äàííûõ. Åñëè
  1978.   ïåðåìåííàÿ ïðè îáúÿâëåíèè èíèöèàëèçèðóåòñÿ (ò.å. åé ïðèñâîåíî êàêîå-òî
  1979.   çíà÷åíèå), òî ïåðåìåííàÿ áóäåò âêëþ÷åíà â êîä êîìïèëèðóåìîãî ôàéëà. Åñëè
  1980.   ïåðåìåííàÿ íå èíèöèàëèçèðóåòñÿ, òî ìåñòî äëÿ ïåðåìåííîé áóäåò
  1981.   çàðåçåðâèðîâàíî ñðàçó æå çà ïîñëåäíèì áàéòîì ñêîìïèëèðîâàííîé ïðîãðàììû.
  1982. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  1983.  
  1984.  
  1985. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.4>
  1986.   6.4 Ëîêàëüíûå ïåðåìåííûå.
  1987. </A></B></FONT><FONT FACE="Courier">
  1988.  
  1989.       Ëîêàëüíûå ïåðåìåííûå - ýòî ïåðåìåííûå îáëàñòü äåéñòâèÿ êîòîðûõ
  1990.   ðàñïðîñòðàíÿåòñÿ ëèøü â ïðåäåëàõ îäíîé ïðîöåäóðû. Îáúÿâëÿòü ëîêàëüíûå
  1991.   ïåðåìåííûå, â îòëè÷èè îò ñîâðåìåííûõ âåðñèé <b>C</b>, ìîæíî ìåæäó èìåíåì ïðîöåäóðû
  1992.   è ïåðâîé îòêðûâàþùåéñÿ ôèãóðíîé ñêîáêîé. Ïðèìåð:
  1993.  
  1994.   void PROC ()
  1995.   int i;  //îáúÿâëåíà ëîêàëüíàÿ ïåðåìåííàÿ òèïà int ñ èìåíåì i
  1996.   {
  1997.       for ( i=0; i<10; i++ ) WRITE(1);
  1998.   }
  1999.  
  2000.       Ïàìÿòü ïîä ëîêàëüíûå ïåðåìåííûå îòâîäèòñÿ â ñåãìåíòå ñòåêà.
  2001.  
  2002.       Ê ëîêàëüíûì ïåðåìåííûì ìîæíî îòíåñòè è ïàðàìåòðû ñòåêîâûõ ïðîöåäóð. Ïîä
  2003.   íèõ òàêæå îòâîäèòñÿ ïàìÿòü â ñòåêå.
  2004.  
  2005.       Ìîæíî èíèöèàëèçèðîâàòü ëîêàëüíûå ïåðåìåííûå ïðè èõ îáúÿâëåíèè. Íî åñòü
  2006.   íåêîòîðûå îãðàíè÷åíèÿ. Íåëüçÿ èíèöèàëèçèðîâàòü ìàññèâû è ìíîãîìåðíûå
  2007.   ñòðóêòóðû. Èíèöèàëèçèðîâàòü ìîæíî îäíèì çíà÷åíèåì, ò.å íåëüçÿ ïðè
  2008.   èíèöèàëèçàöèè ëîêàëüíûõ ïåðåìåííûõ ïîëüçîâàòüñÿ ïåðå÷èñëåíèåì çàêëþ÷åííûì â
  2009.   ôèãóðíûå ñêîáêè è îïåðàòîðàìè <b>FROM</b> è <b>EXTRACT</b>.
  2010.  
  2011.       Èìåíà ëîêàëüíûõ ïåðåìåííûõ ìîãóò ñîâïàäàòü ñ èìåíàìè ãëîáàëüíûõ
  2012.   ïåðåìåííûõ èëè ïðîöåäóð, íî òîãäà Âû íå ñìîæåòå îáðàòèòüñÿ ê ãëîáàëüíîé
  2013.   ïåðåìåííîé èëè âûçâàòü îäíîèìåííóþ ïðîöåäóðó.
  2014.  
  2015.       Ëîêàëüíûå ïåðåìåííûå ìîæíî îáúÿâëÿòü è â íà÷àëå áëîêà ïðîöåäóðû. Íî
  2016.   òîëüêî äî íà÷àëà òåëà ïðîöåäóðû. Ïðèìåð:
  2017.  
  2018.   void proc(){
  2019.   int locproc;  // îáúÿâëåíèå ëîêàëüíîé ïðîöåäóðû
  2020.     locproc=0;  // à òåïåðü ïîøëî òåëî ïðîöåäóðû
  2021.   int locproc;  // à íà ýòî îáúÿâëåíèå ïåðåìåííîé êîìïèëÿòîð âûäàñò ñîîáùåíèå
  2022.                 // îá îøèáêå, ò.ê. óæå íà÷àëîñü òåëî ïðîöåäóðû
  2023.   }
  2024. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2025.  
  2026.  
  2027. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.5>
  2028.   6.5 Äèíàìè÷åñêèå ïåðåìåííûå è ñòðóêòóðû.
  2029. </A></B></FONT><FONT FACE="Courier">
  2030.  
  2031.       Íàðÿäó ñ óæå èçâåñòíûìè Âàì äèíàìè÷åñêèìè ïðîöåäóðàìè â C-- åñòü
  2032.   âîçìîæíîñòü èñïîëüçîâàòü äèíàìè÷åñêè è ïåðåìåííûå è ñòðóêòóðû. Äèíàìè÷åñêèå
  2033.   ïåðåìåííûå è ñòðóêòóðû îáîçíà÷àþòñÿ òàêæå êàê è äèíàìè÷åñêèå ïðîöåäóðû -
  2034.   ñèìâîëîì äâîåòî÷èÿ ïåðåä íà÷àëîì èõ îáúÿâëåíèÿ. È òàêæå êàê è äèíàìè÷åñêàÿ
  2035.   ïðîöåäóðà, äèíàìè÷åñêàÿ ïåðåìåííàÿ èëè ñòðóêòóðà áóäåò âñòàâëåíà â êîä,
  2036.   ëèøü â òîì ñëó÷àå, åñëè îíà áóäåò èñïîëüçîâàíà â ïðîãðàììå.
  2037.  
  2038.       Äèíàìè÷åñêèå ïåðåìåííûå è ñòðóêòóðû íàéäóò ïðèìåíåíèå â áèáëèîòåêàõ.
  2039.   Èñïîëüçîâàòü èõ íåïîñðåäñòâåííî â ïðîãðàììàõ íåò ñìûñëà.
  2040.  
  2041.       Ó äèíàìè÷åñêèõ ïåðåìåííûõ, ñòðóêòóð òàêæå êàê è ó ïðîöåäóð, åñòü îäèí
  2042.   íåäîñòàòîê - Âû íå ñìîæåòå çíàòü, â êàêîì ìåñòå îòêîìïèëèðîâàííîãî êîäà îíè
  2043.   áóäóò ðàñïîëîæåíû, è â êàêîì ïîðÿäêå. Íî íåîáõîäèìîñòü ýòî çíàòü áûâàåò
  2044.   î÷åíü ðåäêî.
  2045.  
  2046.       Äèíàìè÷åñêèå èíèöèàëèçèðîâàííûå ïåðåìåííûå è ñòðóêòóðû â ôàéëå áóäóò
  2047.   ðàñïîëîæåíû â åãî ñàìîì êîíöå, ïîñëå äèíàìè÷åñêèõ ïðîöåäóð. Ýòó èõ
  2048.   îñîáåííîñòü ìîæíî èñïîëüçîâàòü, åñëè Âàì áóäåò íåîáõîäèìî, ÷òîáû äàííûå íå
  2049.   áûëè ðàçáðîñàíû ñðåäè êîäà, à áûëè ñãðóïïèðîâàíû â îäíîì ìåñòå.
  2050. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2051.  
  2052.  
  2053. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.6>
  2054.   6.6 Ïðèñâàèâàíèå îäíîãî çíà÷åíèÿ íåñêîëüêèì ïåðåìåííûì.
  2055. </A></B></FONT><FONT FACE="Courier">
  2056.  
  2057.       Åñëè Âàì íåîáõîäèìî ïðèñâîèòü íåñêîëüêèì ïåðåìåííûì îäèíàêîâûå çíà÷åíèÿ:
  2058.  
  2059.     var1=0;
  2060.     var2=0;
  2061.     var3=0;
  2062.  
  2063.       òî òåïåðü ýòî ìîæíî çàïèñàòü áîëåå êîðîòêî:
  2064.  
  2065.     var1=var2=var3=0;
  2066.  
  2067.       Ïðè èñïîëüçîâàíèè òàêîé çàïèñè ãåíåðèðóåòñÿ áîëåå êîìïàêòíûé è áîëåå
  2068.   áûñòðûé êîä.
  2069. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2070.  
  2071.  
  2072. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.1>
  2073.   6.7 Ïåðåìåííûå òèïà float.
  2074.  
  2075.     6.7.1 Ôîðìàò ïåðåìåííûõ òèïà float.
  2076. </A></B></FONT><FONT FACE="Courier">
  2077.  
  2078.         Äëÿ ïðåäñòàâëåíèÿ çíà÷åíèé ñ ïëàâàþùåé òî÷êîé â ÿçûê C-- ââåäåí òèï
  2079.     float. Ýòîìó òèïó ñîîòâåòñòâóåò äåéñòâèòåëüíîå ÷èñëî îäèíàðíîé òî÷íîñòè
  2080.     FPU.
  2081.  
  2082.         Ôîðìàò ïðåäñòàâëåíèÿ äàííûõ ñ ïëàâàþùåé òî÷êîé âêëþ÷àåò òðè ïîëÿ:
  2083.     çíàêà, ìàíòèññû è ïîðÿäêà. Çíàê îïðåäåëÿåòñÿ ñòàðøèì çíà÷àùèì ðàçðÿäîì.
  2084.     Ïîëå ìàíòèññû ñîäåðæèò çíà÷àùèå áèòû ÷èñëà, à ïîëå ïîðÿäêà ñîäåðæèò
  2085.     ñòåïåíü 2 è îïðåäåëÿåò ìàñøòàáèðóþùèé ìíîæèòåëü äëÿ ìàíòèññû.
  2086.  
  2087.     31 30.....23 22........0
  2088.     |  |      |  |         |
  2089.     |  |      |  -------------- - ïîëå ìàíòèññû
  2090.     |  ------------------------ - ïîëå ïîðÿäêà
  2091.     --------------------------- - áèò çíàêà
  2092. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2093.  
  2094.  
  2095. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.2>
  2096.     6.7.2 Êîíñòàíòû ñ ïëàâàþùåé òî÷êîé.
  2097. </A></B></FONT><FONT FACE="Courier">
  2098.  
  2099.         Êîìïèëÿòîð îòëè÷àåò âåùåñòâåííîå ÷èñëî îò öåëîãî ïî íàëè÷èþ â íåì
  2100.     òî÷êè. Íà÷èíàòüñÿ âåùåñòâåííîå ÷èñëî äîëæíî ëèáî öèôðîé îò <b>0</b> äî <b>9</b>, ëèáî
  2101.     çíàêîì ìèíóñ. Íåîáÿçàòåëüíîé ÷àñòüþ âåùåñòâåííîãî ÷èñëà ÿâëÿåòñÿ
  2102.     ïîêàçàòåëü ñòåïåíè. Ïîêàçàòåëü ñòåïåíè îòäåëÿåòñÿ îò ÷èñëà ñèìâîëîì <b>e</b> èëè
  2103.     <b>E</b>. Ïðîáåëû íåäîïóñòèìû. Âîò ïðèìåðû äîïóñòèìîãî ñèíòàêñèñà:
  2104.  
  2105.      0.98
  2106.      -15.75
  2107.      3.14e2
  2108.      1.234567E-20
  2109. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2110.  
  2111.  
  2112. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.3>
  2113.     6.7.3 Äèàïàçîí äîïóñòèìûõ çíà÷åíèé.
  2114. </A></B></FONT><FONT FACE="Courier">
  2115.  
  2116.         Âåùåñòâåííîå ÷èñëî òèïà float ìîæåò íàõîäèòüñÿ â äèàïàçîíå îò 3.37E38
  2117.     äî -3.37E38. Ìèíèìàëüíî áëèçêîå ê íóëþ çíà÷åíèå ðàâíÿåòñÿ 1.17E-38 è
  2118.     -1.17E-38. Çàïèñûâàòü âåùåñòâåííîå ÷èñëî îäèíàðíîé òî÷íîñòè áîëåå ÷åì 8
  2119.     öèôðàìè íå èìååò ñìûñëà. Ïîêàçàòåëü ñòåïåíè ìîæåò ïðèíèìàòü çíà÷åíèÿ îò
  2120.     +38 äî -38.
  2121. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2122.  
  2123.  
  2124. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.4>
  2125.     6.7.4 Ìàòåìàòè÷åñêèå îïåðàöèè.
  2126. </A></B></FONT><FONT FACE="Courier">
  2127.  
  2128.         Êîìïèëÿòîð ïîääåðæèâàåò 4 îñíîâíûõ äåéñòâèÿ íàä ïåðåìåííûìè òèïà
  2129.     float: ñëîæåíèå, âû÷èòàíèå, óìíîæåíèå è äåëåíèå. Ïîääåðæèâàåòñÿ òàêæå
  2130.     èíêðåìåíò (var++ - óâåëè÷åíèå íà 1), äåêðåìåíò (var-- - óìåíüøåíèå íà 1),
  2131.     ñìåíà çíàêà (-var) è îáìåí çíà÷åíèÿìè (var1 >< var2). Îñòàëüíûå
  2132.     ìàòåìàòè÷åñêèå îïåðàöèè áóäóò ðåàëèçîâàíû ëèáî óæå ðåàëèçîâàíû âî âíåøíèõ
  2133.     áèáëèîòåêàõ. Ïðè âû÷èñëåíèè çíà÷åíèÿ ïåðåìåííîé <b>float</b> ìîæíî èñïîëüçîâàòü
  2134.     è ïåðåìåííûå äðóãèõ òèïîâ, îíè áóäóò àâòîìàòè÷åñêè ïðåîáðàçîâàíû â òèï
  2135.     <b>float</b>.
  2136.  
  2137.         <font color="Red"><b>ÂÍÈÌÀÍÈÅ! Ñîñòàâíûå ìàòåìàòè÷åñêèå  îïåðàöèè âûïîëíÿþòñÿ â òîì
  2138.     ïîðÿäêå, â êîòîðîì îíè çàïèñàíû, íåâçèðàÿ íà ïðàâèëà àðèôìåòèêè</b></font>.
  2139. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2140.  
  2141.  
  2142. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.5>
  2143.     6.7.5 Ïðåîáðàçîâàíèÿ òèïîâ.
  2144. </A></B></FONT><FONT FACE="Courier">
  2145.  
  2146.         Ïðè ìàòåìàòè÷åñêèõ îïåðàöèÿõ êîíå÷íûì èòîãîì êîòîðûõ ÿâëÿåòñÿ
  2147.     ïåðåìåííàÿ òèïà <b>float</b>, âñå îïåðàíäû äðóãèõ òèïîâ ïåðåä âû÷èñëåíèåì áóäóò
  2148.     ïðåîáðàçîâàíû â òèï <b>float</b>. Ïðè ïðèñâàèâàíèè ïåðåìåííîé òèïà <b>float</b> çíà÷åíèÿ
  2149.     ïåðåìåííîé äðóãîãî òèïà îíî òàêæå áóäåò ïðåîáðàçîâàíî â òèï <b>float</b>.
  2150.  
  2151.         Åñëè ïðè öåëî÷èñëåííûõ âû÷èñëåíèÿõ îäíèì èç îïåðàíäîâ áóäåò ïåðåìåííàÿ
  2152.     òèïà <b>float</b>, òî èç íåãî áóäåò âûäåëåíà öåëàÿ ÷àñòü, êîòîðàÿ è ïðèìåò
  2153.     ó÷àñòèå â âû÷èñëåíèÿõ. Ïðè ïðèñâàèâàíèè öåëî÷èñëåííîé ïåðåìåííîé çíà÷åíèÿ
  2154.     ïåðåìåííîé òèïà <b>float</b>, èç íåå òàêæå áóäåò âûäåëåíà öåëàÿ ÷àñòü, êîòîðàÿ è
  2155.     áóäåò ïðèñâîåíà öåëî÷èñëåííîé ïåðåìåííîé.
  2156. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2157.  
  2158.  
  2159. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.6>
  2160.     6.7.6 Îïåðàöèè ñðàâíåíèÿ.
  2161. </A></B></FONT><FONT FACE="Courier">
  2162.  
  2163.         Åñëè ïðè îïåðàöèè ñðàâíåíèÿ ëåâûì îïåðàíäîì ÿâëÿåòñÿ ïåðåìåííàÿ èëè
  2164.     âûðàæåíèå òèïà <b>float</b>, à ïðàâûì ÿâëÿåòñÿ öåëî÷èñëåííîå çíà÷åíèå, òî
  2165.     öåëî÷èñëåííîå çíà÷åíèå áóäåò ïðåîáðàçîâàíî â âåùåñòâåííûé òèï. Åñëè æå
  2166.     ëåâûì îïåðàíäîì ÿâëÿåòñÿ öåëî÷èñëåííîå âûðàæåíèå èëè ïåðåìåííàÿ, à ïðàâûì
  2167.     îïåðàíäîì çíà÷åíèå òèïà <b>float</b>, òî èç ïðàâîãî îïåðàíäà áóäåò âûäåëåíà öåëàÿ
  2168.     ÷àñòü, êîòîðàÿ è ïðèìåò ó÷àñòèå â ñðàâíåíèè.
  2169. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2170.  
  2171.  
  2172. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.7>
  2173.     6.7.7 Ñðàâíåíèå ïåðåìåííûõ òèïà float ñ 32-áèòíûì ðåãèñòðîì.
  2174. </A></B></FONT><FONT FACE="Courier">
  2175.  
  2176.         Â ðåãèñòðàõ ìîãóò ñîäåðæàòüñÿ çíàêîâûå, áåç çíàêîâûå è âåùåñòâåííûå
  2177.     äàííûå. Ïî óìîë÷àíèþ ñ÷èòàåòñÿ, ÷òî â ðåãèñòðå íàõîäèòñÿ áåç çíàêîâîå öåëîå
  2178.     ÷èñëî. Ïðè ñðàâíåíèè ïåðåìåííûõ òèïà <b>float</b> ñ 32-áèòíûì ðåãèñòðîì ìîæíî
  2179.     óêàçûâàòü òèï äàííûõ ñîäåðæàùèõñÿ â ðåãèñòðå.  Äëÿ ýòîé öåëè ìîæíî
  2180.     èñïîëüçîâàòü ìîäèôèêàòîðû: <b>signed, unsigned, float</b>. Ïðèìåðû:
  2181.  
  2182.     float f=1.0;
  2183.  
  2184.     void PROC()
  2185.     {
  2186.       IF( f < signed ECX)       //â ðåãèñòðå ECX íàõîäèòñÿ çíàêîâîå ÷èñëî
  2187.       IF( unsigned EBX > f) //â ðåãèñòðå EBX íàõîäèòñÿ áåç çíàêîâîå ÷èñëî
  2188.       IF( f == float EAX )  //â EAX íàõîäèòñÿ ÷èñëî ôîðìàòà float
  2189.     }
  2190.  
  2191.         <font color="Red"><b>ÂÍÈÌÀÍÈÅ!  Ïðè îïåðàöèè ñðàâíåíèÿ ñ ó÷àñòèåì ïåðåìåíîé òèïà float,
  2192.     ñîäåðæèìîå ðåãèñòðà AX áóäåò ðàçðóøåíî.</b></font>
  2193. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2194.  
  2195.  
  2196. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.8>
  2197.   6.8 Óêàçàòåëè.
  2198. </A></B></FONT><FONT FACE="Courier">
  2199.  
  2200.        C-- ñåé÷àñ óêàçàòåëè ðåàëèçîâàíû íå â ïîëíîì îáúåìå. Ïîýòîìó ìíîãèå
  2201.   âåùè, êîòîðûå âîçìîæíû â îáû÷íûõ ÿçûêàõ <b>C</b>, çäåñü áóäóò íåäîñòóïíû.
  2202.  
  2203.       Ïðèìåð ïðèìåíåíèÿ óêàçàòåëåé â C--:
  2204.  
  2205.   char *string[4]={"string1", "string2", "string3", 0}; //ìàññèâ óêàçàòåëåé
  2206.   char *str="string4";
  2207.  
  2208.   main()
  2209.   int i;
  2210.   char *tstr;
  2211.   {
  2212.         FOR(i=0; string[i]!=0; i++){
  2213.                 WRITESTR(string[i]);
  2214.                 WRITELN();
  2215.         }
  2216.         FOR(tstr=str;byte *tstr!=0; tstr++){
  2217.                 WRITE(byte *tstr);
  2218.         }
  2219.   }
  2220.  
  2221.       Óêàçàòåëè ìîæíî èñïîëüçîâàòü ïðè ïåðåäà÷å ïàðàìåòðîâ ïðîöåäóðàì, à â
  2222.   ñàìèõ ïðîöåäóðàõ â êà÷åñòâå êàê ëîêàëüíûõ, òàê è ïàðàìåòðè÷åñêèõ
  2223.   ïåðåìåííûõ. Óêàçàòåëè ìîæíî òàêæå èñïîëüçîâàòü â ñòðóêòóðàõ. Ìîæíî
  2224.   èñïîëüçîâàòü óêàçàòåëè íà óêàçàòåëè. Ââåäåíà ïîääåðæêà óêàçàòåëåé íà
  2225.   ïðîöåäóðû:
  2226.  
  2227.   void (*proc)();  //îáúÿâëåíèå óêàçàòåëÿ íà ïðîöåäóðó
  2228.  
  2229.       Ïî óìîë÷àíèþ óêàçàòåëè íà ïðîöåäóðó ÿâëÿþòñÿ óêàçàòåëÿìè íà ïðîöåäóðó â
  2230.   ñòèëå <b>pascal</b>, íåçàâèñèìî îò ðåãèñòðà, â êîòîðîì íàïèñàíî èìÿ ïðîöåäóðû è
  2231.   ðåæèìà êîìïèëÿöèè. Åñëè Âàì íåîáõîäèìî, ÷òîáû áûë èñïîëüçîâàí äðóãîé òèï
  2232.   âûçîâà, òî åãî íåîáõîäèìî óêàçàòü ïðè îáúÿâëåíèè óêàçàòåëÿ íà ïðîöåäóðó.
  2233.  
  2234.       Ïðè èíèöèàëèçàöèè óêàçàòåëåé êîìïèëÿòîð íå êîíòðîëèðóåò òî, ÷åì
  2235.   èíèöèàëèçèðóåòñÿ óêàçàòåëü. Ò.å. Âû ìîæåòå óêàçàòåëþ íà <b>char</b> ïðèñâîèòü
  2236.   óêàçàòåëü íà <b>int</b> èëè óêàçàòåëþ íà ïðîöåäóðó ïðèñâîèòü àäðåñ ïåðåìåííîé.
  2237.   Ýòî ìîæåò âûçâàòü îøèáêó â ðàáîòå ïðîãðàììû.
  2238. <A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2239.  
  2240.  
  2241. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=7.1>
  2242. 7. Àäðåñàöèÿ.
  2243.  
  2244.   7.1 Îòíîñèòåëüíàÿ àäðåñàöèÿ.
  2245. </A></B></FONT><FONT FACE="Courier">
  2246.  
  2247.       Èçíà÷àëüíî èíäåêñíûé äîñòóï ê ýëåìåíòàì â ìàññèâàõ ëþáîãî òèïà â
  2248.   êîìïèëÿòîðå îñóùåñòâëÿëñÿ ïîáàéòíî, íåçàâèñèìî îò îáúÿâëåííîãî òèïà äàííûõ.
  2249.   Èíäåêñû îãðàíè÷åíû ôîðìàòîì ïîëÿ <b>RM</b> ïðîöåññîðà 8086, òàêèì îáðàçîì,
  2250.   äîñòóïíû òîëüêî ñëåäóþùèå ôîðìàòû èíäåêñîâ (ãäå èíäåêñ - çíà÷åíèå
  2251.   16-ðàçðÿäíîé êîíñòàíòû èëè ïîñòîÿííîãî âûðàæåíèÿ):
  2252.  
  2253.         variable[index]
  2254.         variable[index+BX+SI]
  2255.         variable[index+BX+DI]
  2256.         variable[index+BP+SI]
  2257.         variable[index+BP+DI]
  2258.         variable[index+SI]
  2259.         variable[index+DI]
  2260.         variable[index+BP]
  2261.         variable[index+BX]
  2262.  
  2263.       Íà÷èíàÿ ñ âåðñèè 0.210, ïîÿâèëàñü âîçìîæíîñòü èñïîëüçîâàòü â êà÷åñòâå
  2264.   èíäåêñà ïåðåìåííûõ òèïà <b>char byte int word long dword</b>. Ïðè ýòîì
  2265.   äîñòóï ê ýëåìåíòàì ìàññèâà îñóùåñòâëÿåòñÿ â çàâèñèìîñòè îò îáúÿâëåííîãî òèïà
  2266.   ìàññèâà.
  2267.  
  2268.       Òàêæå íà÷èíàÿ ñ âåðñèè 0.210 ïîÿâèëàñü âîçìîæíîñòü èñïîëüçîâàòü â
  2269.   êà÷åñòâå èíäåêñíûõ è áàçîâûõ ðåãèñòðîâ ïðè îòíîñèòåëüíîé àäðåñàöèè ëþáûå
  2270.   32-áèòíûå ðåãèñòðû.
  2271.  
  2272.       Åñëè Âû äëÿ àäðåñàöèè ê ýëåìåíòàì ìàññèâà áóäåòå èñïîëüçîâàòü ðåãèñòðû è
  2273.   ÷èñëîâûå êîíñòàíòû, èç êîòîðûõ ìîæíî ïîëó÷èòü ïîëå <b>RM</b> äëÿ èíñòðóêöèé 8086
  2274.   ïðîöåññîðà èëè êîìáèíàöèþ ïîëåé <b>RM BASE è SIB</b> äëÿ 80386 ïðîöåññîðà, òî
  2275.   êîìïèëÿòîð áóäåò èñïîëüçîâàòü ýòè ðåãèñòðû äëÿ ãåíåðàöèè èíñòðóêöèè ñ ýòèìè
  2276.   ïîëÿìè.  ðåçóëüòàòå Âû ïîëó÷èòå îòíîñèòåëüíóþ ïîáàéòíóþ àäðåñàöèþ ê
  2277.   ýëåìåíòàì ìàññèâà.
  2278.  
  2279.       Åñëè æå èç ýòèõ ðåãèñòðîâ íåâîçìîæíî ïîëó÷èòü ïîëÿ <b>RM, BASE, SIB</b>,
  2280.   èëè äëÿ àäðåñàöèè áóäåò èñïîëüçîâàíà ïåðåìåííàÿ, òî êîìïèëÿòîð ñíà÷àëà
  2281.   âû÷èñëèò ýòî âûðàæåíèå â ðåãèñòð <b>(E)SI</b> èëè äðóãîé, ïîäõîäÿùèé ðåãèñòð, à
  2282.   çàòåì óìíîæèò ñîäåðæèìîå ýòîãî ðåãèñòðà íà ðàçðÿäíîñòü Âàøåãî ìàññèâà. Òàêèì
  2283.   îáðàçîì, â ýòîì ñëó÷àå âû áóäåòå èìåòü ïîýëåìåíòíóþ àäðåñàöèþ â ìàññèâå.
  2284.   Ïðèìåð:
  2285.  
  2286.     AX = var [ 5 ];
  2287.     AX = var [ BX + 5 ];
  2288.     AX = var [ BX + CX ];
  2289.     AX = var [ i ];
  2290.  
  2291.       Êîìïèëÿòîð ñãåíåðèðóåò ñëåäóþùèé êîä:
  2292.   test.c-- 7: AX=var[5];
  2293.   0100 A12501                   mov     ax,[125h]
  2294.  
  2295.   test.c-- 8: AX=var[BX+5];
  2296.   0103 8B872501                 mov     ax,[bx+125h]
  2297.  
  2298.   test.c-- 9: AX=var[BX+CX];
  2299.   0107 89DE                     mov     si,bx
  2300.   0109 01CE                     add     si,cx
  2301.   010B 01F6                     add     si,si
  2302.   010D 8B842001                 mov     ax,[si+120h]
  2303.  
  2304.   test.c-- 10: AX=var[i];
  2305.   0111 8B362201                 mov     si,[122h]
  2306.   0115 01F6                     add     si,si
  2307.   0117 8B842001                 mov     ax,[si+120h]
  2308.  
  2309.       Êàê Âû âèäèòå, ïåðâûå äâà âûðàæåíèÿ áûëè ïðåîáðàçîâàíû â îäíó
  2310.   àññåìáëåðíóþ èíñòðóêöèþ, è ïîëó÷èëàñü ïîáàéòíàÿ àäðåñàöèÿ.  äâóõ ñëåäóþùèõ
  2311.   âûðàæåíèÿõ ïîëó÷èòü îäíó àññåìáëåðíóþ èíñòðóêöèþ íå óäàëîñü è êîìïèëÿòîð
  2312.   ïðèìåíèë äëÿ ýòèõ âûðàæåíèé ïîýëåìåíòíóþ àäðåñàöèþ.
  2313.  
  2314.       Òàêîé äâîéñòâåííûé ïîäõîä ðåàëèçîâàí ñ öåëüþ ñîõðàíåíèÿ ñîâìåñòèìîñòè
  2315.   íîâûõ âîçìîæíîñòåé ñ ïðåäûäóùèìè.
  2316.  
  2317.       Íåñìîòðÿ íà êàæóùóþñÿ äëÿ íåèñêóøåííîãî ïîëüçîâàòåëÿ ïóòàíèöó, ýòîò
  2318.   ìåõàíèçì ëåãêî ïîíÿòü è çàïîìíèòü ïî ñëåäóþùåìó ïðîñòîìó ïðàâèëó: åñëè Âû
  2319.   èñïîëüçóåòå â êà÷åñòâå èíäåêñà òîëüêî öèôðîâîå çíà÷åíèå èëè ðåãèñòð <b>BX, SI,
  2320.   DI, BP</b> èëè ëþáîé 32-áèòíûé ðåãèñòð, òî êîìïèëÿòîð ñãåíåðèðóåò êîä ñ
  2321.   ïîáàéòíîé àäðåñàöèåé. Åñëè æå â êà÷åñòâå èíäåêñà áóäåò èñïîëüçîâàíà
  2322.   ïåðåìåííàÿ, òî êîìïèëÿòîð ñãåíåðèðóåò êîä ñ ïîýëåìåíòíîé àäðåñàöèåé. Åñëè
  2323.   æå Âû õîðîøî çíàêîìû ñ àññåìáëåðîì, òî Âàì íå ñîñòàâèò áîëüøîãî òðóäà
  2324.   ïîíÿòü â êàêèõ ñëó÷àÿõ Âû ïîëó÷èòå ïîáàéòíóþ, à â êàêèõ ïîýëåìåíòíóþ
  2325.   àäðåñàöèþ.
  2326.  
  2327.       Èíîãäà òðåáóåòñÿ èìåòü ïîáàéòíûé äîñòóï ê ýëåìåíòàì ìàññèâà èñïîëüçóÿ â
  2328.   êà÷åñòâå èíäåêñà ïåðåìåííóþ. Íàïðèìåð
  2329.  
  2330.     AX=var[i];
  2331.  
  2332.       Äëÿ ýòîãî âûðàæåíèÿ áóäåò ñãåíåðèðîâàíà ïîýëåìåíòíàÿ àäðåñàöèÿ, à íàì
  2333.   íóæíà ïîáàéòîâàÿ. Äëÿ ýòîãî ìîæíî íàïèñàòü òàê:
  2334.  
  2335.     SI=i;
  2336.     AX=var[SI];
  2337.  
  2338.       Íî ìîæíî ýòî çàïèñàòü êîðî÷å:
  2339.  
  2340.     AX=DSWORD[#var+i];
  2341.  
  2342.        îáîèõ ýòèõ ñëó÷àÿõ Âû ïîëó÷èòå ïîáàéòíóþ àäðåñàöèþ ê ýëåìåíòàì ìàññèâà
  2343.   <b>var</b>. Â ïåðâîì âàðèàíòå Âû ñìîæåòå êîíòðîëèðîâàòü êàêîé ðåãèñòð áóäåò
  2344.   èñïîëüçîâàí â êà÷åñòâå èíäåêñà, à âî âòîðîì âàðèàíòå êîìïèëÿòîð áóäåò ñàì
  2345.   âûáèðàòü ðåãèñòð äëÿ èñïîëüçîâàíèÿ â êà÷åñòâå èíäåêñà.
  2346.  
  2347.       Âàæíî âñåãäà ïîìíèòü î äâîéñòâåííîì ïîäõîäå êîìïèëÿòîðà ê âû÷èñëåíèþ
  2348.   àäðåñà â ìàññèâå. Åùå ðàç êðàòêî:  åñëè Âû â ìàññèâå àäðåñóåòåñü èñïîëüçóÿ
  2349.   ÷èñëîâóþ êîíñòàíòó èëè ðåãèñòðû <b>BX,DI,SI,BP</b> êîìïèëÿòîð èñïîëüçóåò ýòè
  2350.   çíà÷åíèÿ áåç èçìåíåíèÿ.  Âî âñåõ äðóãèõ ñëó÷àÿõ áóäåò êîððåêöèÿ çíà÷åíèÿ â
  2351.   çàâèñèìîñòè îò òèïà ìàññèâà.
  2352. <A href="#contents7" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2353.  
  2354.  
  2355. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=7.2>
  2356.   7.2 Àáñîëþòíàÿ àäðåñàöèÿ.
  2357. </A></B></FONT><FONT FACE="Courier">
  2358.  
  2359.       Àáñîëþòíàÿ àäðåñàöèÿ òàêæå âîçìîæíà.  Äåéñòâóþò òå æå ñàìûå îãðàíè÷åíèÿ
  2360.   íà èíäåêñû, ÷òî è ïðè îòíîñèòåëüíîé àäðåñàöèè.
  2361.  
  2362.       Âû÷èñëåííûé èíäåêñ áóäåò àáñîëþòåí â ñåãìåíòå, ðåãèñòð êîòîðîãî óêàçàí.
  2363.   Ìîæíî óêàçûâàòü ëþáîé èç ðåãèñòðîâ <b>DS, CS, SS è ES</b>. Íà ïðîöåññîðàõ 80386 è
  2364.   áîëåå íîâûõ ìîæíî óêàçûâàòü òàêæå ðåãèñòðû <b>FS è GS</b>.
  2365.  
  2366.       Ñèíòàêñèñ - òî÷íî òàêîé æå, êàê è â îòíîñèòåëüíîé àäðåñàöèè, çà
  2367.   èñêëþ÷åíèåì òîãî, ÷òî óêàçûâàåòñÿ íå ïåðåìåííàÿ, à ñåãìåíò è òèï äàííûõ.
  2368.   Ìîãóò ïðèìåíÿòüñÿ ñëåäóþùèå óêàçàòåëè:
  2369.  
  2370.              // àäðåñàöèÿ â ñåãìåíòå äàííûõ
  2371.          DSBYTE  [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå DS
  2372.          DSWORD  [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå DS
  2373.          DSCHAR  [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå DS
  2374.          DSINT   [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå DS
  2375.          DSDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå DS
  2376.          DSLONG  [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå DS
  2377.          DSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå DS
  2378.  
  2379.              // àäðåñàöèÿ â ñåãìåíòå êîäà
  2380.          CSBYTE  [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå CS
  2381.          CSWORD  [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå CS
  2382.          CSCHAR  [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå CS
  2383.          CSINT   [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå CS
  2384.          CSDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå CS
  2385.          CSLONG  [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå CS
  2386.          CSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå CS
  2387.  
  2388.              // àäðåñàöèÿ â ñåãìåíòå ñòåêà
  2389.          SSBYTE  [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå SS
  2390.          SSWORD  [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå SS
  2391.          SSCHAR  [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå SS
  2392.          SSINT   [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå SS
  2393.          SSDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå SS
  2394.          SSLONG  [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå SS
  2395.          SSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå SS
  2396.  
  2397.              // àäðåñàöèÿ â äîïîëíèòåëüíîì ñåãìåíòå äàííûõ
  2398.          ESBYTE  [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå ES
  2399.          ESWORD  [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå ES
  2400.          ESCHAR  [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå ES
  2401.          ESINT   [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå ES
  2402.          ESDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå ES
  2403.          ESLONG  [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå ES
  2404.          ESFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå ES
  2405.  
  2406.              // àäðåñàöèÿ â äîïîëíèòåëüíîì ñåãìåíòå 2 (80386) +
  2407.          FSBYTE  [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå FS
  2408.          FSWORD  [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå FS
  2409.          FSCHAR  [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå FS
  2410.          FSINT   [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå FS
  2411.          FSDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå FS
  2412.          FSLONG  [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå FS
  2413.          FSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå FS
  2414.  
  2415.              // àäðåñàöèÿ â äîïîëíèòåëüíîì ñåãìåíòå 3 (80386) +
  2416.          GSBYTE  [ñìåùåíèå] // àäðåñóþò áàéò â ñåãìåíòå GS
  2417.          GSWORD  [ñìåùåíèå] // àäðåñóþò ñëîâî â ñåãìåíòå GS
  2418.          GSCHAR  [ñìåùåíèå] // àäðåñóþò char â ñåãìåíòå GS
  2419.          GSINT   [ñìåùåíèå] // àäðåñóþò int â ñåãìåíòå GS
  2420.          GSDWORD [ñìåùåíèå] // àäðåñóþò dword â ñåãìåíòå GS
  2421.          GSLONG  [ñìåùåíèå] // àäðåñóþò long â ñåãìåíòå GS
  2422.          GSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå GS
  2423.  
  2424.   Ïðèìåðû:
  2425.      Çàãðóçèòü â AL áàéò èç ÿ÷åéêè ñ øåñòíàäöàòåðè÷íûì àäðåñîì 0000:0417
  2426.                  ES = 0x0000;
  2427.                  AL = ESBYTE [0x417];
  2428.  
  2429.      Ïåðåìåñòèòü ñëîâî èç ÿ÷åéêè ñ øåñòíàäöàòåðè÷íûì àäðåñîì 2233:4455
  2430.      â ÿ÷åéêó ñ øåñòíàäöàòåðè÷íûì àäðåñîì A000:0002
  2431.                  $PUSH DS
  2432.                  DS = 0x2233;
  2433.                  ES = 0xA000;
  2434.                  ESWORD [0x0002] = DSWORD [0x4455];
  2435.                  $POP DS
  2436.  
  2437.      Ñîõðàíèòü âû÷èñëåííîå çíà÷åíèå âûðàæåíèÿ X + 2, èìåþùåå
  2438.      òèï int â ÿ÷åéêå ñ øåñòíàäöàòåðè÷íûì àäðåñîì FFFF:1234
  2439.                  ES = 0xFFFF;
  2440.                  ESINT [0x1234] = X + 2;
  2441.  
  2442.      Ñîõðàíèòü BX â ñåãìåíòå ñòåêà ïî ñìåùåíèþ 42:
  2443.                  SSWORD [42] = BX;
  2444. <A href="#contents7" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2445.  
  2446.  
  2447. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.1>
  2448. 8. Ðàáîòà ñ áëîêàìè äàííûõ.
  2449.  
  2450.   8.1 Ñòðóêòóðû.
  2451.  
  2452.     8.1.1 ×òî òàêîå ñòðóêòóðû.
  2453. </A></B></FONT><FONT FACE="Courier">
  2454.  
  2455.         Ñòðóêòóðà ïîçâîëÿåò îáúåäèíèòü â îäíîì îáúåêòå ñîâîêóïíîñòü çíà÷åíèé,
  2456.     êîòîðûå ìîãóò èìåòü ðàçëè÷íûå òèïû.
  2457. <A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2458.  
  2459.  
  2460. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.2>
  2461.     8.1.2 Ñèíòàêñèñ.
  2462. </A></B></FONT><FONT FACE="Courier">
  2463.  
  2464.     struct [<òåã>] { <ñïèñîê-îáúÿâëåíèé-ýëåìåíòîâ> }
  2465.       <îïèñàòåëü>[,<îïèñàòåëü>...];
  2466.     struct <òåã> <îïèñàòåëü> [,<îïèñàòåëü>];
  2467.  
  2468.         Îáúÿâëåíèå ñòðóêòóðû íà÷èíàåòñÿ ñ êëþ÷åâîãî ñëîâà struct è èìååò äâå
  2469.     ôîðìû çàïèñè.
  2470.  
  2471.         Â ïåðâîé ôîðìå òèïû è èìåíà ýëåìåíòîâ ñòðóêòóðû ñïåöèôèöèðóþòñÿ â
  2472.     ñïèñêå-îáúÿâëåíèé-ýëåìåíòîâ. Íåîáÿçàòåëüíûé â äàííîì ñëó÷àå <b>òåã</b> - ýòî
  2473.     èäåíòèôèêàòîð, êîòîðûé èìåíóåò ñòðóêòóðíûé òèï, îïðåäåëåííûé äàííûì
  2474.     ñïèñêîì îáúÿâëåíèé ýëåìåíòîâ. <b>îïèñàòåëü</b> ñïåöèôèöèðóåò ëèáî ïåðåìåííóþ
  2475.     ñòðóêòóðíîãî òèïà, ëèáî ìàññèâ ñòðóêòóð äàííîãî òèïà.
  2476.  
  2477.         Âòîðàÿ ñèíòàêñè÷åñêàÿ ôîðìà îáúÿâëåíèÿ èñïîëüçóåò òåã ñòðóêòóðû äëÿ
  2478.     ññûëêè íà ñòðóêòóðíûé òèï, îïðåäåëåííûé ãäå-òî â äðóãîì ìåñòå ïðîãðàììû.
  2479.  
  2480.         Ñïèñîê îáúÿâëåíèé ýëåìåíòîâ ïðåäñòàâëÿåò ñîáîé ïîñëåäîâàòåëüíîñòü èç
  2481.     îäíîé èëè áîëåå îáúÿâëåíèé ïåðåìåííûõ. Êàæäàÿ ïåðåìåííàÿ, îáúÿâëåííàÿ â
  2482.     ýòîì ñïèñêå, íàçûâàåòñÿ ýëåìåíòîì ñòðóêòóðû.
  2483.  
  2484.         Ýëåìåíòû ñòðóêòóðû çàïîìèíàþòñÿ â ïàìÿòè ïîñëåäîâàòåëüíî â òîì
  2485.     ïîðÿäêå, â êîòîðîì îíè îáúÿâëÿþòñÿ. Âûðàâíèâàíèå ýëåìåíòîâ âíóòðè
  2486.     ñòðóêòóðû ïî óìîë÷àíèþ íå ïðîèçâîäèòñÿ. Íî ñóùåñòâóåò îïöèÿ, âêëþ÷åíèå
  2487.     êîòîðîé â êîìàíäíóþ ñòðîêó ïîçâîëÿåò èìåòü âûðàâíèâàíèå è âíóòðè
  2488.     ñòðóêòóðû. Ñàìà ñòðóêòóðà âûðàâíèâàåòñÿ íà ÷åòíûé àäðåñ åñëè âêëþ÷åíî
  2489.     âûðàâíèâàíèå.
  2490.  
  2491.       Ïðèìåðû îáúÿâëåíèé ñòðóêòóð:
  2492.  
  2493.     struct test
  2494.     {
  2495.       int a;
  2496.       char b[8];
  2497.       long c;
  2498.     } rr, ff[4];
  2499.  
  2500.         Â ýòîì ïðèìåðå îáúÿâëåíû ñòðóêòóðà ñ èìåíåì <b>rr</b> è ìàññèâ èç 4 ñòðóêòóð
  2501.     ñ èìåíåì <b>ff</b>. Âñåìó íàáîðó ïåðåìåííûõ ïðèñâîåíî íàçâàíèå <b>(òåã) test</b>. Ýòîò
  2502.     òåã ìîæíî èñïîëüçîâàòü äëÿ îáúÿâëåíèÿ äðóãèõ ñòðóêòóð. Íàïðèìåð:
  2503.  
  2504.    struct test dd;
  2505.  
  2506.         Çäåñü îáúÿâëåíà ñòðóêòóðà ñ èìåíåì <b>dd</b>, èìåþùàÿ íàáîð ýëåìåíòîâ
  2507.     îïèñàííûõ â òåãå <b>test</b>.
  2508.  
  2509.         Ïðè îáúÿâëåíèè ñòðóêòóð ñ ðàíåå îáúÿâëåííûì òåãîì êëþ÷åâîå ñëîâî
  2510.    <b>struct</b> ìîæíî íå ïèñàòü. Ò.å ìîæíî íàïèñàòü âîò òàê:
  2511.  
  2512.       test dd;
  2513. <A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2514.  
  2515.  
  2516. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.3>
  2517.     8.1.3 Èíèöèàëèçàöèÿ ñòðóêòóð ïðè îáúÿâëåíèè.
  2518. </A></B></FONT><FONT FACE="Courier">
  2519.  
  2520.         Ïîñëå îáúÿâëåíèÿ ñòðóêòóðû åå ýëåìåíòû ìîãóò ïðèíèìàòü ïðîèçâîëüíûå
  2521.     çíà÷åíèÿ. ×òî áû ýòîãî íå áûëî íàäî ñòðóêòóðû ïðîèíèöèàëèçèðîâàòü.
  2522.     Èíèöèàëèçèðîâàòü ñòðóêòóðû ïðè èõ îáúÿâëåíèè ìîæíî òîëüêî ãëîáàëüíûå. C--
  2523.     ïîääåðæèâàåò íåñêîëüêî ñïîñîáîâ èíèöèàëèçàöèè ñòðóêòóð ïðè èõ îáúÿâëåíèè:
  2524.  
  2525.       1. Îäíèì çíà÷åíèåì:
  2526.  
  2527.        struct test dd=2;
  2528.  
  2529.      ýòîì ïðèìåðå âñåì ýëåìåíòàì ñòðóêòóðû dd ïðèñâàèâàåòñÿ çíà÷åíèå 2.
  2530.  
  2531.       2. Ìàññèâîì çíà÷åíèé:
  2532.  
  2533.        struct test dd={1,2,,6};
  2534.  
  2535.      ýòîì ïðèìåðå ïåðâîìó ýëåìåíòó ñòðóêòóðû dd ïðèñâàèâàåòñÿ çíà÷åíèå 1,
  2536.     âòîðîìó - 2, ÷åòâåðòîìó - 6. Ïðîïóùåííûì è íå äîèíèöèàëèçèðîâàííûì
  2537.     çíà÷åíèÿì áóäåò ïðèñâîåíî 0 çíà÷åíèå.
  2538.  
  2539.       3. Êîìàíäîé FROM:
  2540.  
  2541.        struct test dd=FROM "file.dat";
  2542.  
  2543.     Â ýòîì ïðèìåðå íà ìåñòî ãäå ðàñïîëîæåíà ñòðóêòóðà dd ïðè êîìïèëÿöèè áóäåò
  2544.     çàãðóæåíî ñîäåðæèìîå ôàéëà <file.dat>. Åñëè ðàçìåð ôàéëà áîëüøå ÷åì ðàçìåð
  2545.     ñòðóêòóðû, òî ëèøíèå áàéòû áóäóò çàãðóæåíû â êîä ïðîãðàììû, íî îíè íå
  2546.     áóäóò âîñòðåáîâàíû. Åñëè ðàçìåð ôàéëà ìåíüøå ÷åì ðàçìåð ñòðóêòóðû, òî
  2547.     íåäîñòàþùèå áàéòû ñòðóêòóðû áóäóò çàïîëíåíû íóëÿìè.
  2548.  
  2549.       4. Êîìàíäîé EXTRACT:
  2550.  
  2551.        struct test dd=EXTRACT "file.dat", 24, 10;
  2552.  
  2553.     Â ýòîì ïðèìåðå íà ìåñòî ãäå ðàñïîëîæåíà ñòðóêòóðà dd ïðè êîìïèëÿöèè áóäåò
  2554.     çàãðóæåí ôðàãìåíò èç ôàéëà <b>file.dat</b> äëèíîé 10 áàéò ñî ñìåùåíèÿ 24.
  2555.     Íåäîñòàþùèå áàéòû áóäóò çàïîëíåíû íóëÿìè.
  2556. <A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2557.  
  2558.  
  2559. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.4>
  2560.     8.1.4 Èíèöèàëèçàöèÿ ñòðóêòóðû ïðè âûïîëíåíèè ïðîãðàììû.
  2561. </A></B></FONT><FONT FACE="Courier">
  2562.  
  2563.         Ïðè âûïîëíåíèè ïðîãðàììû, êðîìå ïðèñâîåíèÿ êàæäîìó ýëåìåíòó ñòðóêòóðû
  2564.     çíà÷åíèÿ, ìîæíî ïðîèíèöèàëèçèðîâàòü âñþ ñòðóêòóðó ïðèñâîåíèåì åé ÷èñëà èëè
  2565.     ïåðåìåííîé. Ïðèìåðû:
  2566.  
  2567.     void proc()
  2568.     struct test aa[5],rr;
  2569.     int i;
  2570.     {
  2571.       aa[0]=0x12345678;
  2572.       aa[i]=int 0x12345678;
  2573.       aa=long 0x12345678;
  2574.       rr=i;
  2575.  
  2576.     Â ïåðâîì ïðèìåðå ïàìÿòü, çàíèìàåìàÿ ïåðâîé ñòðóêòóðîé ìàññèâà èç 5
  2577.     ñòðóêòóð, áóäåò çàïîëíåíà áàéòîì 0x78 (ïî óìîë÷àíèþ).
  2578.  
  2579.     Âî âòîðîì ïðèìåðå ïàìÿòü, çàíèìàåìàÿ (i+1)-âîé ñòðóêòóðîé ìàññèâà èç 5
  2580.     ñòðóêòóð, áóäåò çàïîëíåíà ñëîâîì 0x5678.
  2581.  
  2582.     Â òðåòüåì ïðèìåðå ïàìÿòü, çàíèìàåìàÿ âñåì ìàññèâîì èç 5 ñòðóêòóð, áóäåò
  2583.     çàïîëíåíà äëèííûì ñëîâîì 0x12345678.
  2584.  
  2585.      ÷åòâåðòîì ïðèìåðå ïàìÿòü, çàíèìàåìàÿ ñòðóêòóðîé rr, áóäåò çàïîëíåíà
  2586.     ñîäåðæèìûì ïåðåìåííîé i.
  2587.  
  2588.         Ìîæíî òàêæå êîïèðîâàòü ñîäåðæèìîå îäíîé ñòðóêòóðû â äðóãóþ. Íàïðèìåð:
  2589.  
  2590.       rr=aa[2];
  2591.  
  2592.     Áóäåò ñêîïèðîâàíî ñîäåðæèìîå òðåòüåé ñòðóêòóðû ìàññèâà ñòðóêòóð aa â
  2593.     ñòðóêòóðó rr.
  2594. <A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2595.  
  2596.  
  2597. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.5>
  2598.     8.1.5 Îïåðàöèè ñ ýëåìåíòàìè ñòðóêòóð.
  2599. </A></B></FONT><FONT FACE="Courier">
  2600.  
  2601.         Ñ ýëåìåíòàìè ñòðóêòóð ìîæíî âûïîëíÿòü âñå òå îïåðàöèè, êîòîðûå
  2602.     äîñòóïíû äëÿ ïåðåìåííûõ ñîîòâåòñòâóþùåãî òèïà. Íàïðèìåð:  Îáúÿâëåíà
  2603.     ñòðóêòóðà:
  2604.  
  2605.     struct test
  2606.     {
  2607.       int a;
  2608.       char b[8];
  2609.       long c;
  2610.     } rr[3];
  2611.     Ïðèìåð äîïóñòèìîãî ñèíòàêñèñà:
  2612.         rr.a = rr.b[i] * rr[1].c + i ;
  2613.  
  2614.     Ïðèìå÷àíèå:
  2615.         Ïðè îïåðàöèÿõ ñ ýëåìåíòàìè ìàññèâà ñòðóêòóð è ñ èíäåêñèðîâàííûìè
  2616.     ýëåìåíòàìè, â êîòîðûõ â êà÷åñòâå èíäåêñà èëè íîìåðà ñòðóêòóðû èñïîëüçóåòñÿ
  2617.     ïåðåìåííàÿ, êîìïèëÿòîð ìîæåò èñïîëüçîâàòü ðåãèñòðû SI è DI, à â íåêîòîðûõ
  2618.     ñèòóàöèÿõ (íàïðèìåð:  rr[i].b[j] >< rr[i+1].b[j+2] ) áóäåò çàäåéñòâîâàí è
  2619.     ðåãèñòð DX.
  2620.  
  2621.         Äëÿ îòäåëüíûõ ýëåìåíòîâ ñòðóêòóðû, ìîæíî ïîëó÷àòü èõ àäðåñ, ðàçìåð
  2622.     è ñìåùåíèå â òåãå ñòðóêòóðû. Âîò ïðèìåð:
  2623.  
  2624.     struct AA       //îáúÿâëåíèå òåãà ñòðóêòóðû
  2625.     {
  2626.       word a[3];    // ïåðâûé ýëåìåíò ñòðóêòóðû
  2627.       char b;       // âòîðîé ýëåìåíò ñòðóêòóðû
  2628.       long c;       // òðåòèé ýëåìåíò ñòðóêòóðû
  2629.     };
  2630.  
  2631.     struct BB   //òåã âòîðîé ñòðóêòóðû
  2632.     {
  2633.       word aa;  // ïåðâûé ýëåìåíò
  2634.       AA bb;    // âòîðîé ýëåìåíò - âëîæåííàÿ ñòðóêòóðà
  2635.     }ss;                // îáúÿâëÿåì ñòðóêòóðó ñ òåãîì <b>BB</b>
  2636.  
  2637.     void proc()
  2638.     {
  2639.       AX=#ss.bb.b; // ïîëó÷èòü àäðåñ ýëåìåíòà <b>b</b> ñòðóêòóðû <b>bb</b> â ñòðóêòóðå <b>ss</b>
  2640.       AX=#BB.bb.b; // ïîëó÷èòü ñìåùåíèå ýòîãî æå ýëåìåíòà â òåãå <b>BB</b>
  2641.       AX=sizeof(ss.bb); // ïîëó÷èòü ðàçìåð ýëåìåíòà <b>bb</b> â ñòðóêòóðå <b>ss</b>
  2642.       AX=sizeof(BB.bb); // ïîëó÷èòü ðàçìåð ýëåìåíòà <b>bb</b> â òåãå <b>BB</b>
  2643.     }
  2644. <A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2645.  
  2646.  
  2647. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.6>
  2648.     8.1.6 Âëîæåííûå ñòðóêòóðû.
  2649. </A></B></FONT><FONT FACE="Courier">
  2650.  
  2651.         Ïðè îáúÿâëåíèè òåãîâ ñòðóêòóð ìîæíî èñïîëüçîâàòü òåãè äðóãèõ,
  2652.     îáúÿâëåííûõ ðàíåå ñòðóêòóð. Ïðèìåð âëîæåííûõ ñòðóêòóð:
  2653.  
  2654.     struct RGB
  2655.     {
  2656.       byte Red;
  2657.       byte Green;
  2658.       byte Blue;
  2659.       byte Reserved;
  2660.     };
  2661.  
  2662.     struct BMPINFO
  2663.     {
  2664.       struct BMPHEADER header; //îïèñàíèå ýòîé ñòðóêòóðû ïðîïóùåíî
  2665.       struct RGB color[256];
  2666.     }info;
  2667.  
  2668.         Ïðåäïîëîæèì Âàì íóæíî ïîëó÷èòü ñîäåðæèìîå ïåðåìåííîé <b>Red</b> äåñÿòîãî
  2669.     ýëåìåíòà <b>color</b>. Ýòî ìîæíî áóäåò çàïèñàòü òàê:
  2670.  
  2671.       AL=info.color[10].Red;
  2672.  
  2673.         Íî ñóùåñòâóåò îäíî îãðàíè÷åíèå èñïîëüçîâàíèÿ âëîæåííûõ ñòðóêòóð â C--.
  2674.     Ýòî íåâîçìîæíîñòü èñïîëüçîâàíèÿ ïåðåìåííîé â êà÷åñòâå èíäåêñà áîëåå îäíîãî
  2675.     ðàçà ïðè îáðàùåíèè ê ìíîãîýêçåìïëÿðíûì ñòðóêòóðàì. Ïîÿñíèì ýòî íà ïðèìåðå:
  2676.  
  2677.     struct ABC
  2678.     {
  2679.       int a;
  2680.       int b;
  2681.       int c;
  2682.     };
  2683.  
  2684.     struct
  2685.     {
  2686.       struct ABC first[4];  //4 ýêçåìïëÿðà ñòðóêòóðû ABC
  2687.       int d;
  2688.     }second[4];
  2689.  
  2690.     int i,j;
  2691.  
  2692.     void proc()
  2693.     {
  2694.       AX=second[i].first[j].a; //òàêàÿ çàïèñü âûçîâåò ñîîáùåíèå îá îøèáêà, òàê
  2695.                                //êàê ïåðåìåííàÿ èñïîëüçîâàëàñü â äâóõ ìåñòàõ
  2696.       AX=second[2].first[j].a; //à ýòîò ñèíòàêñèñ äîïóñòèì.
  2697.       AX=second[i].first[3].a;
  2698.     }
  2699. <A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2700.  
  2701.  
  2702. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.7>
  2703.     8.1.7 Îòîáðàæåíèå òåãà ñòðóêòóðû íà áëîê ïàìÿòè.
  2704. </A></B></FONT><FONT FACE="Courier">
  2705.  
  2706.         Îòîáðàæåíèå òåãà ñòðóêòóðû íà áëîê ïàìÿòè ÿâëÿåòñÿ àëüòåðíàòèâîé
  2707.     óêàçàòåëÿì íà ñòðóêòóðû.
  2708.  
  2709.         Àëüòåðíàòèâíûé ñïîñîá èñïîëüçîâàíèÿ óêàçàòåëåé íà ñòðóêòóðû ïîçâîëèò
  2710.     Âàì ñàìèì âûáðàòü ðåãèñòð, â êîòîðîì áóäåò õðàíèòñÿ àäðåñ ñòðóêòóðû è
  2711.     ñàìèì ñëåäèòü çà åãî ñîõðàííîñòüþ è ïî ìåðå íåîáõîäèìîñòè âîññòàíàâëèâàòü
  2712.     åãî ñîäåðæèìîå.
  2713.  
  2714.         Îáúÿñíèòü, êàê èñïîëüçîâàòü îòîáðàæåíèå òåãà ñòðóêòóðû íà ïàìÿòü,
  2715.     íàâåðíîå, áóäåò ïðîùå íà ïðèìåðå:
  2716.  
  2717.     struct AA       //îáúÿâëåíèå òåãà ñòðóêòóðû
  2718.     {
  2719.       word a[3];    // ïåðâûé ýëåìåíò ñòðóêòóðû
  2720.       char b;       // âòîðîé ýëåìåíò ñòðóêòóðû
  2721.       long c;       // òðåòèé ýëåìåíò ñòðóêòóðû
  2722.     };
  2723.  
  2724.     byte buf[256];  //áëîê ïàìÿòè, íà êîòîðûé áóäåò îòîáðàæåí òåã ñòðóêòóðû
  2725.  
  2726.     void proc1()
  2727.     {
  2728.      ...
  2729.      proc2 ( #buf );  // âûçîâ ïðîöåäóðû ñ ïåðåäà÷åé åé â êà÷åñòâå ïàðàìåòðà
  2730.                       // àäðåñà áëîêà ïàìÿòè
  2731.      ...
  2732.     }
  2733.  
  2734.     long proc2 (unsigned int pointer_to_mem)
  2735.     {
  2736.     int i;
  2737.       BX=pointer_to_mem;  // â BX çàãðóçèì àäðåñ áëîêà ïàìÿòè
  2738.       FOR(i=0; i<3; i++){ // â ìàññèâ ýëåìåíòà <b>a</b> çàïèñàòü -1
  2739.         BX.AA.a[i]=-1;
  2740.       }
  2741.       BX.AA.b=0;
  2742.       ES:BX.AA.c=EAX;
  2743.       return BX.AA.c;  // âåðíóòü ñîäåðæèìîå ýëåìåíòà <b>c</b>
  2744.     }
  2745.  
  2746.         Â 16-áèòíîì ðåæèìå äëÿ õðàíåíèÿ àäðåñà ñòðóêòóðû ìîæíî èñïîëüçîâàòü
  2747.     ðåãèñòðû: <b>BX,DI,SI,BP</b>. Íî ëó÷øå äëÿ ýòîãî èñïîëüçîâàòü ðåãèñòð <b>BX</b>.
  2748.     Ðåãèñòðû <b>DI è SI</b> ìîæåò èñïîëüçîâàòü êîìïèëÿòîð ïðè âû÷èñëåíèè àäðåñà
  2749.     ìíîãîýëåìåíòíûõ îáúåêòîâ. Ðåãèñòð <b>BP</b> êîìïèëÿòîð èñïîëüçóåò äëÿ ðàáîòû ñ
  2750.     ëîêàëüíûìè è ïàðàìåòðè÷åñêèìè ïåðåìåííûìè.  32-áèòíîì ðåæèìå ìîæíî
  2751.     èñïîëüçîâàòü ëþáîé êðîìå <b>ESP è EBP</b> ðåãèñòð, à ðåãèñòðû <b>EDI è ESI</b> íàäî
  2752.     èñïîëüçîâàòü îñòîðîæíî.
  2753. <A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2754.  
  2755.  
  2756. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.8>
  2757.     8.1.8 Áèòîâûå ïîëÿ ñòðóêòóð.
  2758. </A></B></FONT><FONT FACE="Courier">
  2759.  
  2760.         Áèòîâûå ïîëÿ ñòðóêòóð èñïîëüçóþòñÿ äëÿ ýêîíîìèè ïàìÿòè, ïîñêîëüêó
  2761.     ïîçâîëÿþò ïëîòíî óïàêîâàòü çíà÷åíèÿ, è äëÿ îðãàíèçàöèè óäîáíîãî äîñòóïà ê
  2762.     ðåãèñòðàì âíåøíèõ óñòðîéñòâ, â êîòîðûõ ðàçëè÷íûå áèòû ìîãóò èìåòü
  2763.     ñàìîñòîÿòåëüíîå ôóíêöèîíàëüíîå íàçíà÷åíèå.
  2764.  
  2765.         Îáúÿâëåíèå áèòîâîãî ïîëÿ èìååò ñëåäóþùèé ñèíòàêñèñ:
  2766.  
  2767.     <òèï> [<èäåíòèôèêàòîð>]:<êîíñòàíòà>;
  2768.  
  2769.     èëè íà ïðèìåðå:
  2770.  
  2771.     int var:5;  //îáúÿâëåíèå áèòîâîãî ïîëÿ ðàçìåðîì 5 áèò ñ èìåíåì <b>var</b>
  2772.  
  2773.         Áèòîâîå ïîëå ñîñòîèò èç íåêîòîðîãî ÷èñëà áèòîâ, êîòîðîå çàäàåòñÿ
  2774.     ÷èñëîâûì âûðàæåíèåì <b>êîíñòàíòà</b>. Åãî çíà÷åíèå äîëæíî áûòü öåëûì
  2775.     ïîëîæèòåëüíûì ÷èñëîì è åãî çíà÷åíèå íå äîëæíî ïðåâûøàòü ÷èñëà ðàçðÿäîâ,
  2776.     ñîîòâåòñòâóþùèå <b>òèïó</b> îïðåäåëÿåìîãî áèòîâîãî ïîëÿ. Â C-- áèòîâûå ïîëÿ
  2777.     ìîãóò ñîäåðæàòü òîëüêî áåç çíàêîâûå çíà÷åíèÿ. Íåëüçÿ èñïîëüçîâàòü ìàññèâû
  2778.     áèòîâûõ ïîëåé, óêàçàòåëè íà áèòîâûå ïîëÿ.
  2779.  
  2780.        <b> èäåíòèôèêàòîð</b> èìåíóåò áèòîâîå ïîëå. Åãî íàëè÷èå íåîáÿçàòåëüíî.
  2781.     Íåèìåíîâàííîå áèòîâîå ïîëå îçíà÷àåò ïðîïóñê ñîîòâåòñòâóþùåãî ÷èñëà áèòîâ
  2782.     ïåðåä ðàçìåùåíèåì ñëåäóþùåãî ýëåìåíòà ñòðóêòóðû. Íåèìåíîâàííîå áèòîâîå
  2783.     ïîëå, äëÿ êîòîðîãî óêàçàí íóëåâîé ðàçìåð, èìååò ñïåöèàëüíîå íàçíà÷åíèå:
  2784.     îíî ãàðàíòèðóåò, ÷òî ïàìÿòü äëÿ ñëåäóþùåãî áèòîâîãî ïîëÿ áóäåò íà÷èíàòüñÿ
  2785.     íà ãðàíèöå òîãî òèïà, êîòîðûé çàäàí äëÿ íåèìåíîâàííîãî áèòîâîãî ïîëÿ.
  2786.     Ò.å.  áóäåò ïðîèçâåäåíî âûðàâíèâàíèå áèòîâîãî ïîëÿ íà 8/16/32 áèòà.
  2787.  
  2788.         Â C-- âñå áèòîâûå ïîëÿ óïàêîâûâàþòñÿ îäíî çà äðóãèì íåçàâèñèìî îò
  2789.     ãðàíèö òèïà èäåíòèôèêàòîðîâ. Åñëè ïîñëåäóþùåå ïîëå íå ÿâëÿåòñÿ áèòîâûì
  2790.     ïîëåì, òî îñòàâøèåñÿ äî ãðàíèöû áàéòà áèòû íå áóäóò èñïîëüçîâàíû.
  2791.     Ìàêñèìàëüíûé ðàçìåð áèòîâîãî ïîëÿ ðàâåí 32 áèòà äëÿ òèïà <b>dword/long</b>, 16
  2792.     áèò äëÿ òèïà <b>word/int</b> è 8 áèò äëÿ òèïà <b>byte/char</b>. Áèòîâûå ïîëÿ ìîæíî
  2793.     îáúåäèíÿòü, ò.å. èñïîëüçîâàòü èõ â îïåðàòîðå<b> union. sizeof</b>
  2794.     ïðèìåíåííûé ê áèòîâîìó ïîëþ âåðíåò ðàçìåð ýòîãî ïîëÿ â áèòàõ. Ïðè
  2795.     èñïîëüçîâàíèè áèòîâîãî ïîëÿ, åãî ñîäåðæèìîå áóäåò ðàñøèðÿòñÿ â ðåãèñòð
  2796.     êàê áåç çíàêîâîå öåëîå ÷èñëî.
  2797. <A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2798.  
  2799.  
  2800. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.2>
  2801.   8.2 Îáúåäèíåíèÿ.
  2802. </A></B></FONT><FONT FACE="Courier">
  2803.  
  2804.       Îáúåäèíåíèÿ ïîçâîëÿþò â ðàçíûå ìîìåíòû âðåìåíè õðàíèòü â îäíîì îáúåêòå
  2805.   çíà÷åíèÿ ðàçëè÷íîãî òèïà.
  2806.  
  2807.       Ïàìÿòü, êîòîðàÿ âûäåëÿåòñÿ ïîä îáúåäèíåíèå, îïðåäåëÿåòñÿ ðàçìåðîì
  2808.   íàèáîëåå äëèííîãî èç ýëåìåíòîâ îáúåäèíåíèÿ. Âñå ýëåìåíòû îáúåäèíåíèÿ
  2809.   ðàçìåùàþòñÿ â îäíîé è òîé æå îáëàñòè ïàìÿòè ñ îäíîãî è òîãî æå àäðåñà.
  2810.   Çíà÷åíèå òåêóùåãî ýëåìåíòà îáúåäèíåíèÿ òåðÿåòñÿ, êîãäà äðóãîìó ýëåìåíòó
  2811.   îáúåäèíåíèÿ ïðèñâàèâàåòñÿ çíà÷åíèå.
  2812.  
  2813.       Â C-- ðåàëèçîâàíû òàê íàçûâàåìûå àíîíèìíûå îáúåäèíåíèÿ. Ò.å.
  2814.   îáúåäèíåíèÿì íå ïðèñâàèâàåòñÿ èìÿ, à îáðàùåíèå ê ýëåìåíòàì îáúåäèíåíèÿ
  2815.   ïðîèñõîäèò êàê ê îáû÷íîé ïåðåìåííîé. Ïðèìåð:
  2816.  
  2817.   union
  2818.   {
  2819.     dword regEAX;
  2820.     word  regAX;
  2821.     byte  regAL;
  2822.   };  // îáúÿâèëè, ÷òî 3 ïåðåìåííûå ðàñïîëîæåíû ïî îäíîìó è òîìó æå
  2823.       // ôèçè÷åñêîìó àäðåñó
  2824.  
  2825.   void test()
  2826.   {
  2827.         regEAX = 0x2C;
  2828.         BL = regAL;     //â ðåãèñòðå BL îêàæåòñÿ çíà÷åíèå 0x2C
  2829.   }
  2830.  
  2831.       Îáúåäèíÿòü ìîæíî ïåðåìåííûå ðàçëè÷íûõ òèïîâ, ìàññèâû, ñòðîêîâûå
  2832.   ïåðåìåííûå è ñòðóêòóðû. Îáúåäèíåíèÿ ìîãóò áûòü ãëîáàëüíûìè è ëîêàëüíûìè, à
  2833.   òàêæå ðàñïîëàãàòüñÿ âíóòðè ñòðóêòóð (ïîêà â îáúåäèíåíèÿõ âíóòðè ñòðóêòóð
  2834.   íåëüçÿ èñïîëüçîâàòü ñòðóêòóðû). Ãëîáàëüíûå îáúåäèíåíèÿ ìîãóò áûòü
  2835.   èíèöèàëèçèðîâàííûìè è íåèíèöèàëèçèðîâàííûìè. ×òîáû ïîëó÷èòü
  2836.   èíèöèàëèçèðîâàííîå îáúåäèíåíèå äîñòàòî÷íî ïðîèíèöèàëèçèðîâàòü ëèøü ïåðâûé
  2837.   ýëåìåíò îáúåäèíåíèÿ. Åñëè æå ïåðâûé ýëåìåíò îáúåäèíåíèÿ íå èíèöèàëèçèðîâàí,
  2838.   à ñëåäóþùèå ýëåìåíòû èíèöèàëèçèðîâàíû, òî ýòî âûçîâåò ñîîáùåíèå êîìïèëÿòîðà
  2839.   îá îøèáêå.
  2840. <A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2841.  
  2842.  
  2843. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.3>
  2844.   8.3 Êîìàíäû 'FROM' è 'EXTRACT'.
  2845. </A></B></FONT><FONT FACE="Courier">
  2846.  
  2847.        C-- åñòü î÷åíü îðèãèíàëüíûå êîìàíäû, êîòîðûõ íåò â äðóãèõ ÿçûêàõ. Ýòî
  2848.   <b>FROM è EXTRACT</b>.
  2849.  
  2850.       Êîìàíäà <b>FROM</b> èìååò ñèíòàêñèñ:
  2851.  
  2852.   <òèï_ïåðåìåííîé> <èìÿ_ïåðåìåííîé> = FROM <èìÿ_ôàéëà>;
  2853.  
  2854.       Âñòðåòèâ ýòó êîìàíäó ïðè êîìïèëÿöèè, êîìïèëÿòîð çàãðóçèò â âûõîäíîé
  2855.   ôàéë ñîäåðæèìîå ôàéëà <b>èìÿ_ôàéëà</b>, à <b>èìÿ_ïåðåìåííîé</b> áóäåò èäåíòèôèêàòîðîì
  2856.   íà÷àëà çàãðóæåííîãî êîäà. Âîò ïðèìåð èñïîëüçîâàíèÿ ýòîé êîìàíäû èç ôàéëà
  2857.   tinydraw.c--:
  2858.  
  2859.   byte palette[PALSIZE] = FROM "TINYDRAW.PAL";  // buffer for palette
  2860.  
  2861.      Êîìàíäà <b>EXTRACT</b> èìååò ñèíòàêñèñ:
  2862.  
  2863.   <òèï_ïåðåìåííîé> <èìÿ_ïåðåìåííîé> = EXTRACT <èìÿ_ôàéëà>, <íà÷àëî>, <äëèíà>;
  2864.  
  2865.       Âñòðåòèâ ýòó êîìàíäó ïðè êîìïèëÿöèè, êîìïèëÿòîð çàãðóçèò â âûõîäíîé
  2866.   ôàéë èç ôàéëà <b>èìÿ_ôàéëà</b> ÷èñëî áàéò ðàâíîå <b>äëèíà</b> ñî ñìåùåíèÿ <b>íà÷àëî</b>, à
  2867.   <b>èìÿ_ïåðåìåííîé</b> áóäåò èäåíòèôèêàòîðîì íà÷àëà çàãðóæåííîãî êîäà. Âîò ïðèìåð
  2868.   èñïîëüçîâàíèÿ ýòîé êîìàíäû:
  2869.  
  2870.   byte LIT128 = EXTRACT "8X16.FNT", 16*128, 16;
  2871.   byte LIT130 = EXTRACT "8X16.FNT", 16*130, 16;
  2872. <A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2873.  
  2874.  
  2875. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.1>
  2876. 9. Îïåðàòîðû.
  2877.  
  2878.   9.1 Óñëîâíûå èíñòðóêöèè.
  2879. </A></B></FONT><FONT FACE="Courier">
  2880.  
  2881.       Óñëîâíûå èíñòðóêöèè, ïðè ïîìîùè êîòîðûõ îñóùåñòâëÿåòñÿ âåòâëåíèå, òàêèå
  2882.   æå êàê â C.
  2883.  
  2884.       C-- èìååò äâå èíñòðóêöèè âåòâëåíèÿ. <b>if è IF</b>.
  2885.  
  2886.       <b>if</b> äåëàåò áëèçêèé óñëîâíûé ïåðåõîä, à <b>IF</b> äåëàåò êîðîòêèé
  2887.   (8-ðàçðÿäíûé) óñëîâíûé ïåðåõîä. <b>IF</b> âûïîëíÿåòñÿ áûñòðåå è ìîæåò ýêîíîìèòü
  2888.   äî 3 áàéò â ðàçìåðå êîäà, íî ìîæåò îñóùåñòâëÿòü ïåðåõîäû òîëüêî â ïðåäåëàõ
  2889.   127 áàéòîâ êîäà.
  2890.  
  2891.       Óñëîâíûå èíñòðóêöèè, êàê è â <b>C</b>, ìîãóò ñîïðîâîæäàòüñÿ, êàê îäèíî÷íîé
  2892.   êîìàíäîé, òàê è áëîêîì èç íåñêîëüêèõ êîìàíä, çàêëþ÷åííûõ â ôèãóðíûå ñêîáêè
  2893.   { è }. Óñëîâíûå èíñòðóêöèè èìåþò òå æå îãðàíè÷åíèÿ, ÷òî è óñëîâíûå
  2894.   âûðàæåíèÿ.
  2895.  
  2896.       Åñëè çà èíñòðóêöèåé <b>IF</b> ñëåäóåò áîëüøå ÷åì 127 áàéòîâ êîäà, òðàíñëÿòîð
  2897.   âûäàñò ñëåäóþùåå ñîîáùåíèå îá îøèáêå:
  2898.  
  2899.           IF jump distance too far, use if.
  2900.  
  2901.   Ýòî ìîæíî ïðîñòî èñïðàâèòü, çàìåíèâ â ýòîì ìåñòå èíñòðóêöèþ <b>IF</b> íà <b>if</b>.
  2902.  
  2903.       Êîìàíäû <b>else è ELSE</b> èñïîëüçóþòñÿ òî÷íî òàê æå, êàê â ÿçûêå <b>C</b>.
  2904.   Îòëè÷èå èõ â òîì, ÷òî <b>ELSE</b> èìååò îãðàíè÷åíèå àäðåñà ïåðåõîäà 127 áàéò,
  2905.   òàêîå æå êàê <b>IF. else</b> ãåíåðèðóåò êîä íà 1 áàéò äëèííåå, ÷åì <b>ELSE</b>.
  2906.  
  2907.       Êîìàíäû <b>IF è else</b>, à òàêæå <b>if è ELSE</b> ìîãóò ñâîáîäíî ñìåøèâàòüñÿ
  2908.   êàê â ñëåäóþùåì ïðèìåðå:
  2909.  
  2910.           if( x == 2 )
  2911.               WRITESTR("Two");
  2912.           ELSE{ WRITESTR("not two.");
  2913.                 printmorestuff();
  2914.               }
  2915.  
  2916.       Åñëè çà èíñòðóêöèåé <b>ELSE</b> ñëåäóåò áîëüøå ÷åì 127 áàéòîâ êîäà,
  2917.   òðàíñëÿòîð âûäàñò ñëåäóþùåå ñîîáùåíèå îá îøèáêå:
  2918.  
  2919.           ELSE jump distance too far, use else.
  2920.  
  2921.       Ýòî ìîæíî ïðîñòî èñïðàâèòü, çàìåíèâ â ýòîì ìåñòå èíñòðóêöèþ <b>ELSE</b> íà
  2922.   <b>else</b>.
  2923. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2924.  
  2925.  
  2926. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.2>
  2927.   9.2 Öèêëû do{} while.
  2928. </A></B></FONT><FONT FACE="Courier">
  2929.  
  2930.       Â òàêîì öèêëå áëîê êîäà, ñîñòàâëÿþùèé òåëî öèêëà, áóäåò ïîâòîðÿòüñÿ,
  2931.   ïîêà óñëîâíîå âûðàæåíèå èìååò çíà÷åíèå <b>èñòèííî</b>.
  2932.  
  2933.       Èñòèííîñòü óñëîâíîãî âûðàæåíèÿ ïðîâåðÿåòñÿ ïîñëå âûïîëíåíèÿ òåëà  öèêëà,
  2934.   ïîýòîìó áëîê êîäà áóäåò âûïîëíåí, ïî êðàéíåé ìåðå, îäèí ðàç.
  2935.  
  2936.    Ïðèìåð <b>do {} while</b> öèêëà, â êîòîðîì òåëî áóäåò èñïîëíåíî ïÿòü ðàç:
  2937.  
  2938.            count = 0;
  2939.            do {
  2940.               count++;
  2941.               WRITEWORD(count);
  2942.               WRITELN();
  2943.               } while (count < 5);
  2944.  
  2945.   Óñëîâíîå âûðàæåíèå â <b>do {} while</b> èíñòðóêöèè äîëæíî ñîîòâåòñòâîâàòü òåì æå
  2946.   ïðàâèëàì, ÷òî è â èíñòðóêöèÿõ <b>IF è if</b>.
  2947. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  2948.  
  2949.  
  2950. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.3>
  2951.   9.3 Öèêëû loop, LOOPNZ, loopnz.
  2952. </A></B></FONT><FONT FACE="Courier">
  2953.  
  2954.       Öèêëû <b>loop</b> ïîâòîðÿþò áëîê êîäà, ïîêà îïðåäåëåííàÿ ïåðåìåííàÿ èëè
  2955.   ðåãèñòð, âûïîëíÿþùèå ðîëü ñ÷åò÷èêà öèêëà, ñîäåðæàò çíà÷åíèå, îòëè÷íîå îò
  2956.   íóëÿ. Â êîíöå âûïîëíåíèÿ áëîêà êîäà, ñîñòàâëÿþùåãî òåëî öèêëà, óêàçàííàÿ
  2957.   ïåðåìåííàÿ èëè ðåãèñòð - óìåíüøàåòñÿ íà 1, à çàòåì ïðîâåðÿåòñÿ íà ðàâåíñòâî
  2958.   íóëþ. Åñëè ïåðåìåííàÿ (èëè ðåãèñòð) íå ðàâíà íóëþ, òåëî öèêëà áóäåò
  2959.   âûïîëíåíî ñíîâà, è ïðîöåññ ïîâòîðèòñÿ.
  2960.  
  2961.       Ïðèìåð èñïîëüçîâàíèÿ öèêëà <b>loop</b> â êîòîðîì â êà÷åñòâå ñ÷åò÷èêà öèêëà
  2962.   èñïîëüçîâàíà ïåðåìåííàÿ:
  2963.  
  2964.           count = 5;
  2965.           loop( count )
  2966.               {WRITEWORD(count);
  2967.               WRITELN();
  2968.               }
  2969.  
  2970.       Íàèáîëüøèé ýôôåêò äàåò èñïîëüçîâàíèå ðåãèñòðà CX äëÿ öèêëîâ ñ íåáîëüøèì
  2971.   òåëîì, ïîñêîëüêó â ýòîì ñëó÷àå êîìïèëÿòîðîì ãåíåðèðóåòñÿ öèêë ñ ïðèìåíåíèåì
  2972.   ìàøèííîé êîìàíäû <b>LOOP</b>.
  2973.  
  2974.       Åñëè ïåðåä ñòàðòîì ñ÷åò÷èê öèêëîâ ñîäåðæèò íóëåâîå çíà÷åíèå, êîìàíäû
  2975.   òåëà öèêëà áóäóò âûïîëíåíû ìàêñèìàëüíîå ÷èñëî ðàç äëÿ äèàïàçîíà ïåðåìåííîé
  2976.   (256 ðàç äëÿ 8-áèòíîãî ñ÷åò÷èêà (ïåðåìåííîé òèïà <b>byte</b> èëè <b>char</b>), 65536 äëÿ
  2977.   16-áèòíîãî ñ÷åò÷èêà (ïåðåìåííîé òèïà <b>word</b> èëè <b>int</b>), è 4294967296 äëÿ
  2978.   32-áèòíîãî ñ÷åò÷èêà (ïåðåìåííîé òèïà <b>dword</b> èëè <b>long</b>).
  2979.  
  2980.    Â ñëåäóþùåì ïðèìåðå öèêë áóäåò âûïîëíåí 256 ðàç:
  2981.  
  2982.            BH = 0;
  2983.            loop (BH)
  2984.               {
  2985.               }
  2986.  
  2987.       Åñëè â êîìàíäå íå óêàçàíî íèêàêîãî ñ÷åò÷èêà öèêëà, öèêë áóäåò
  2988.   ïðîäîëæàòüñÿ áåñêîíå÷íî.
  2989.  
  2990.       Ñëåäóþùèé ïðèìåð áóäåò íåïðåðûâíî âûâîäèòü ñèìâîë çâåçäî÷êè (*) íà
  2991.   ýêðàí:
  2992.  
  2993.           loop()
  2994.               WRITE('*');
  2995.  
  2996.       Ïðîãðàììèñò, åñëè õî÷åò, ìîæåò èñïîëüçîâàòü èëè èçìåíÿòü çíà÷åíèå
  2997.   ïåðåìåííîé ñ÷åò÷èêà öèêëà âíóòðè öèêëà.
  2998.  
  2999.       Íàïðèìåð, ñëåäóþùèé öèêë âûïîëíèòñÿ òîëüêî 3 ðàçà:
  3000.  
  3001.            CX = 1000;
  3002.            loop( CX )
  3003.               {
  3004.               IF( CX > 3 )
  3005.                   CX = 3;
  3006.               }
  3007.  
  3008.       Öèêë ìîæíî òàêæå ïðåðâàòü îïåðàòîðîì ðàçðûâà <b>BREAK</b> èëè <b>break</b>. Âîò
  3009.   òîò æå ïðèìåð ñ èñïîëüçîâàíèåì <b>BREAK</b>:
  3010.  
  3011.            CX = 1000;
  3012.            loop( CX )
  3013.               {
  3014.               IF( CX > 3 )
  3015.                   BREAK;
  3016.               }
  3017.  
  3018.       Öèêëû <b>LOOPNZ/loopnz</b> îòëè÷àþòñÿ îò öèêëà <b>loop</b>, òåì, ÷òî ïåðåä âõîäîì
  3019.   â öèêë ïðîâåðÿåòñÿ ðàâåíñòâî íóëþ àðãóìåíòà öèêëà. Åñëè àðãóìåíò ðàâåí
  3020.   íóëþ, òî òåëî öèêëà íè ðàçó íå âûïîëíèòñÿ (â öèêëå <b>loop</b> â ýòîì ñëó÷àå
  3021.   òåëî öèêëà âûïîëíèòñÿ ìàêñèìàëüíîå ÷èñëî ðàç). Öèêë <b>LOOPNZ</b> ïîëó÷àåòñÿ
  3022.   ìàêñèìàëüíî ýôôåêòèâíûì ïðè îïòèìèçàöèè íà ðàçìåð êîäà, åñëè â êà÷åñòâå
  3023.   ïàðàìåòðà-ñ÷åò÷èêà èñïîëüçóåòñÿ ðåãèñòð <b>CX/ECX</b>. Ïðè ýòîì êîìïèëÿòîð
  3024.   èñïîëüçóåò àññåìáëåðíûå èíñòðóêöèè <b>JCXZ/JECXZ è LOOP</b>.
  3025. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3026.  
  3027.  
  3028. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.4>
  3029.   9.4 Öèêë while, WHILE.
  3030. </A></B></FONT><FONT FACE="Courier">
  3031.  
  3032.        Ñèíòàêñèñ:
  3033.     while(<âûðàæåíèå>)
  3034.          <îïåðàòîð>
  3035.  
  3036.       Öèêë âûïîëíÿåòñÿ äî òåõ ïîð, ïîêà çíà÷åíèå <b>âûðàæåíèÿ</b> íå ñòàíåò
  3037.   ëîæíûì. Âíà÷àëå âû÷èñëÿåòñÿ <b>âûðàæåíèå</b>. Åñëè <b>âûðàæåíèå</b> èçíà÷àëüíî ëîæíî,
  3038.   òî òåëî îïåðàòîðà <b>while</b> âîîáùå íå âûïîëíÿåòñÿ è óïðàâëåíèå ñðàçó
  3039.   ïåðåäàåòñÿ íà ñëåäóþùèé îïåðàòîð ïðîãðàììû.
  3040.  
  3041.       Öèêë <b>WHILE</b> àíàëîãè÷åí öèêëó <b>while</b>, íî ïðè ýòîì ãåíåðèðóåòñÿ êîä íà
  3042.   3 áàéòà êîðî÷å. Ðàçìåð ñãåíåðèðîâàííîãî êîäà â öèêëå <b>WHILE</b> äîëæåí áûòü
  3043.   ìåíüøå 127 áàéò.
  3044.  
  3045.     Ïðèìåðû:
  3046.         while ( i < 20 ){
  3047.                 WRITEWORD(i);
  3048.                 i++;
  3049.         }
  3050.  
  3051.         WHILE (i < 20 ) @WRITEWORD(i)//öèêë ëèáî áóäåò áåñêîíå÷íûì ëèáî íå
  3052.                                           //âûïîëíèòñÿ íè ðàçó
  3053. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3054.  
  3055.  
  3056. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.5>
  3057.   9.5 Öèêë for, FOR.
  3058. </A></B></FONT><FONT FACE="Courier">
  3059.  
  3060.        Ñèíòàêñèñ:
  3061.     for ([<íà÷àëüíîå âûðàæåíèå>]; [<óñëîâèå>]; [<ïðèðàùåíèå>])
  3062.       <îïåðàòîð>
  3063.  
  3064.       Öèêë <b>for</b> âûïîëíÿåòñÿ äî òåõ ïîð, ïîêà çíà÷åíèå <b>óñëîâèÿ</b> íå ñòàíåò
  3065.   ëîæíûì. Åñëè <b>óñëîâèå</b> èçíà÷àëüíî ëîæíî, òî òåëî îïåðàòîðà <b>for</b> âîîáùå íå
  3066.   âûïîëíÿåòñÿ è óïðàâëåíèå ñðàçó ïåðåäàåòñÿ íà ñëåäóþùèé îïåðàòîð ïðîãðàììû.
  3067.   <b>Íà÷àëüíîå âûðàæåíèå</b> è <b>ïðèðàùåíèå</b> îáû÷íî èñïîëüçóþòñÿ äëÿ èíèöèàëèçàöèè
  3068.   è ìîäèôèêàöèè ïàðàìåòðîâ öèêëà.
  3069.  
  3070.       Ïåðâûì øàãîì ïðè âûïîëíåíèè <b>for</b> ÿâëÿåòñÿ âû÷èñëåíèå <b>íà÷àëüíîãî
  3071.   âûðàæåíèÿ</b>, åñëè îíî èìååòñÿ. Çàòåì âû÷èñëÿåòñÿ <b>óñëîâèå</b> è ïðîèçâîäèòñÿ
  3072.   åãî îöåíêà ñëåäóþùèì îáðàçîì:
  3073.  
  3074.       1) Åñëè <b>óñëîâèå</b> èñòèííî, òî âûïîëíÿåòñÿ òåëî îïåðàòîðà. Çàòåì
  3075.   âû÷èñëÿåòñÿ <b>ïðèðàùåíèå</b> (åñëè îíî åñòü), è ïðîöåññ ïîâòîðÿåòñÿ.
  3076.  
  3077.       2) Åñëè <b>óñëîâèå</b> îïóùåíî, òî åãî çíà÷åíèå ïðèíèìàåòñÿ çà èñòèíó. Â
  3078.   ýòîì ñëó÷àå öèêë for ïðåäñòàâëÿåò áåñêîíå÷íûé öèêë, êîòîðûé ìîæåò
  3079.   çàâåðøèòüñÿ òîëüêî ïðè âûïîëíåíèè â åãî òåëå îïåðàòîðîâ <b>break, goto,
  3080.   return</b>.
  3081.  
  3082.       3) Åñëè <b>óñëîâèå</b> ëîæíî, òî âûïîëíåíèå öèêëà <b>for</b> çàêàí÷èâàåòñÿ è
  3083.   óïðàâëåíèå ïåðåäàåòñÿ ñëåäóþùåìó îïåðàòîðó.
  3084.  
  3085.       Öèêë <b>FOR</b> àíàëîãè÷åí öèêëó <b>for</b>, íî ïðè ýòîì ãåíåðèðóåòñÿ êîä íà 3
  3086.   áàéòà êîðî÷å. Ðàçìåð ñãåíåðèðîâàííîãî êîäà â öèêëå <b>FOR</b> äîëæåí áûòü ìåíüøå
  3087.   127 áàéò.
  3088.  
  3089.     Ïðèìåðû:
  3090.         for(i=0;i<5;i++){
  3091.                 WRITESTR("ÑÒÐÎÊÀ ");
  3092.                 WRITEWORD(i);
  3093.                 WRITELN();
  3094.         }
  3095.  
  3096.       ×èñëî <b>íà÷àëüíûõ âûðàæåíèé</b> è ÷èñëî <b>ïðèðàùåíèé</b> íå îãðàíè÷åíî. Êàæäûé
  3097.   îïåðàòîð â <b>íà÷àëüíûõ âûðàæåíèÿõ</b> è <b>ïðèðàùåíèÿõ</b> äîëæåí ðàçäåëÿòüñÿ
  3098.   çàïÿòîé. Ïðèìåð:
  3099.  
  3100.         for ( a=1, b=2 ; a<5 ; a++, b+=a ) {...
  3101.  
  3102.       Òàêæå åñòü âîçìîæíîñòü ëîãè÷åñêîãî îáúåäèíåíèÿ <b>óñëîâèé</b>. Îáúåäèíÿòü
  3103.   ìîæíî äî 32 óñëîâèé. Êàæäîå îáúåäèíÿåìîå óñëîâèå äîëæíî áûòü çàêëþ÷åíî â
  3104.   ñêîáêè. Ïðèìåð:
  3105.  
  3106.         for ( a=0 ; (a>=0) && (a<10) ; a++ ){...
  3107. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3108.  
  3109.  
  3110. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.6>
  3111.   9.6 Îïåðàòîð ïåðåêëþ÷àòåëü switch.
  3112. </A></B></FONT><FONT FACE="Courier">
  3113.  
  3114.       Ñèíòàêñèñ:
  3115.     switch(<âûðàæåíèå>){
  3116.       case <êîíñòàíòà>:
  3117.         <îïåðàòîð>
  3118.         ...
  3119.       case <êîíñòàíòà>:
  3120.         <îïåðàòîð>
  3121.         ...
  3122.       ...
  3123.       default:
  3124.         <îïåðàòîð>
  3125.     }
  3126.       Îïåðàòîð ïåðåêëþ÷àòåëü <b>switch</b> ïðåäíàçíà÷åí äëÿ âûáîðà îäíîãî èç
  3127.   íåñêîëüêèõ àëüòåðíàòèâíûõ ïóòåé âûïîëíåíèÿ ïðîãðàììû. Âûïîëíåíèå íà÷èíàåòñÿ
  3128.   ñ âû÷èñëåíèÿ çíà÷åíèÿ <b>âûðàæåíèÿ</b>. Ïîñëå ýòîãî óïðàâëåíèå ïåðåäàåòñÿ îäíîìó
  3129.   èç <b>îïåðàòîðîâ</b> òåëà ïåðåêëþ÷àòåëÿ.  òåëå ïåðåêëþ÷àòåëÿ ñîäåðæàòñÿ
  3130.   êîíñòðóêöèè: <b>case êîíñòàíòà:</b>, êîòîðûå ñèíòàêñè÷åñêè ïðåäñòàâëÿþò ñîáîé
  3131.   ìåòêè îïåðàòîðîâ. Îïåðàòîð, ïîëó÷àþùèé óïðàâëåíèå, - ýòî òîò îïåðàòîð,
  3132.   çíà÷åíèå êîíñòàíòû êîòîðîãî ñîâïàäàþò ñî çíà÷åíèåì <b>âûðàæåíèÿ</b>
  3133.   ïåðåêëþ÷àòåëÿ. Çíà÷åíèå <b>êîíñòàíòû</b> äîëæíî áûòü óíèêàëüíûì.
  3134.  
  3135.       Âûïîëíåíèå òåëà îïåðàòîðà-ïåðåêëþ÷àòåëÿ <b>switch</b> íà÷èíàåòñÿ ñ âûáðàííîãî
  3136.   òàêèì îáðàçîì îïåðàòîðà, è ïðîäîëæàåòñÿ äî êîíöà òåëà èëè äî òåõ ïîð, ïîêà
  3137.   êàêîé-ëèáî îïåðàòîð íå ïåðåäàñò óïðàâëåíèå çà ïðåäåëû òåëà.
  3138.  
  3139.     Îïåðàòîð, ñëåäóþùèé çà êëþ÷åâûì ñëîâîì <b>default</b>, âûïîëíÿåòñÿ, åñëè íè
  3140.   îäíà èç êîíñòàíò íå ðàâíà çíà÷åíèþ <b>âûðàæåíèÿ</b>. Åñëè <b>default</b> îïóùåíî, òî
  3141.   íè îäèí îïåðàòîð â òåëå ïåðåêëþ÷àòåëÿ íå âûïîëíÿåòñÿ, è óïðàâëåíèå
  3142.   ïåðåäàåòñÿ íà îïåðàòîð, ñëåäóþùèé çà <b>switch</b>.
  3143.  
  3144.       Äëÿ âûõîäà èç òåëà ïåðåêëþ÷àòåëÿ îáû÷íî èñïîëüçóåòñÿ îïåðàòîð ðàçðûâà
  3145.   <b>break (BREAK)</b>.
  3146.  
  3147.     Ïðèìåð:
  3148.     switch (i){
  3149.       case 'A':
  3150.         WRITE(i);
  3151.         i++;
  3152.         BREAK;
  3153.       case 32:
  3154.         WRITE('_');
  3155.         i++;
  3156.         BREAK;
  3157.       default:
  3158.         WRITE('i');
  3159.     }
  3160.  
  3161.       Îïåðàòîð <b>switch</b> ñåé÷àñ â êîìïèëÿòîðå ìîæåò ðåàëèçîâûâàòüñÿ òðåì
  3162.   ñïîñîáàìè: äâóõòàáëè÷íûì, òàáëè÷íûì è ìåòîäîì ïîñëåäîâàòåëüíûõ ïðîâåðîê.
  3163.  
  3164.       Òàáëè÷íûé ìåòîä ÿâëÿåòñÿ ñàìûì áûñòðûì, à ïðè áîëüøîì ÷èñëå îïåðàòîðîâ
  3165.   <b>case</b> è ïðè íåçíà÷èòåëüíîé ðàçíèöå ìåæäó ìàêñèìàëüíûì è ìèíèìàëüíûì
  3166.   çíà÷åíèÿìè <b>case</b> îí åùå ìîæåò áûòü è áîëåå êîìïàêòíûì. Íî ó íåãî åñòü è
  3167.   íåäîñòàòêè: â 16-áèòíîì ðåæèìå êîìïèëÿòîð âñåãäà èñïîëüçóåò ðåãèñòð BX, à â
  3168.   32-áèòíîì ðåæèìå, åñëè îïåðàíäîì <b>switch</b> ÿâëÿåòñÿ ðåãèñòð, òî åãî çíà÷åíèå
  3169.   áóäåò ðàçðóøåíî.
  3170.  
  3171.        ìåòîäå ïîñëåäîâàòåëüíûõ ïðîâåðîê áëîê ñðàâíåíèé íàõîäèòñÿ â íà÷àëå
  3172.   òåëà îïåðàòîðà <b>switch</b>, ýòî ïîçâîëÿåò èçáàâèòüñÿ îò 1-2 ëèøíèõ <b>jmp</b>. Íî
  3173.   êîìïèëÿòîð íå ìîæåò îïðåäåëèòü, êàêîé òèï ïåðåõîäà èñïîëüçîâàòü ïðè
  3174.   ïðîâåðêå çíà÷åíèé <b>case</b>. Ýòî áóäåò Âàøåé çàáîòîé. Åñëè ðàçìåð êîäà îò
  3175.   íà÷àëà òåëà îïåðàòîðà <b>switch</b> äî ìåñòà ðàñïîëîæåíèÿ îïåðàòîðà <b>case</b>
  3176.   ìåíüøå 128 áàéò, ìîæíî èñïîëüçîâàòü êîðîòêèé ïåðåõîä.  ýòîì ñëó÷àå Âû
  3177.   ìîæåòå óêàçàòü îïåðàòîð <b>CASE</b>, ÷òî ïðèâåäåò ê ãåíåðàöèè áîëåå êîìïàêòíîãî
  3178.   êîäà. Êîìïèëÿòîð â ïðåäóïðåæäåíèÿõ áóäåò Âàì ïîäñêàçûâàòü î âîçìîæíîñòè
  3179.   èñïîëüçîâàíèÿ îïåðàòîðîâ <b>CASE</b>. Èñïîëüçîâàíèå îïåðàòîðà <b>CASE</b> â ñëó÷àÿõ,
  3180.   êîãäà ðàçìåð áëîêà êîäà áîëåå 128 áàéò ïðèâåäåò ê âûäà÷å êîìïèëÿòîðîì
  3181.   ñîîáùåíèÿ îá îøèáêå.
  3182.  
  3183.      Ïðè äâóõòàáëè÷íîì ìåòîäå ñîçäàþòñÿ äâå òàáëèöû - òàáëèöà àäðåñîâ âõîäà â
  3184.   òåëî îïåðàòîðà <b>switch/SWITCH</b> è òàáëèöà çíà÷åíèé <b>case</b>. Ãåíåðèðóåòñÿ
  3185.   ïðîöåäóðà ñðàâíåíèÿ âõîäíîãî çíà÷åíèÿ ñî çíà÷åíèÿìè âî âòîðîé òàáëèöå. Åñëè
  3186.   åñòü ñîâïàäåíèå, òî äåëàåòñÿ ïåðåõîä ïî àäðåñó èç âòîðîé òàáëèöû. Ýòîò
  3187.   ìåòîä ÿâëÿåòñÿ ñàìûì ìåäëåííûì, íî ïðè áîëüøîì ÷èñëå çíà÷åíèé <b>case</b> (áîëåå
  3188.   15) îí ñòàíîâèòñÿ ñàìûì êîìïàêòíûì.
  3189.  
  3190.       Ïðè îïòèìèçàöèè êîäà íà ðàçìåð, êîìïèëÿòîð ïðåäâàðèòåëüíî âû÷èñëÿåò
  3191.   ðàçìåð êîäà, êîòîðûé ìîæåò áûòü ïîëó÷åí âñåìè ìåòîäàìè è ðåàëèçóåò ñàìûé
  3192.   êîìïàêòíûé. Ïðè îïòèìèçàöèè íà ñêîðîñòü ïðåèìóùåñòâî îòäàåòñÿ òàáëè÷íîìó
  3193.   ìåòîäó, åñëè ðàçìåð òàáëèöû ïîëó÷àåòñÿ íå ñëèøêîì áîëüøèì.
  3194.  
  3195.       Äëÿ îïåðàòîðà <b>switch</b> ââåäåíà òàêæå è êîðîòêàÿ åãî ôîðìà - <b>SWITCH</b>.
  3196.   Åå ìîæíî ïðèìåíÿòü â ñëó÷àå, åñëè ðàçìåð áëîêà êîäà ìåæäó íà÷àëîì òåëà
  3197.   îïåðàòîðà è îïåðàòîðîì <b>default</b> (åñëè îí îòñóòñòâóåò, òî êîíöîì òåëà
  3198.   îïåðàòîðà <b>switch</b>) ìåíüøå 128 áàéò. Î âîçìîæíîñòè èñïîëüçîâàíèÿ êîðîòêîé
  3199.   ôîðìû êîìïèëÿòîð áóäåò ñîîáùàòü â ïðåäóïðåæäåíèÿõ.
  3200.  
  3201.       Äëÿ îïåðàòîðà <b>case/CASE</b>, êîòîðûé ìîæåò èñïîëüçîâàòüñÿ òîëüêî â òåëå
  3202.   áëîêà îïåðàòîðà <b>switch/SWITCH</b>, ìîæíî óêàçûâàòü äèàïàçîí çíà÷åíèé. Ñíà÷àëà
  3203.   íàäî óêàçûâàòü ìåíüøåå çíà÷åíèå, çàòåì ïîñëå ìíîãîòî÷èÿ áîëüøåå. Ïðèìåð:
  3204.  
  3205.   switch(AX){
  3206.     case 1...5:
  3207.       WRITESTR("Range AX from 1 to 5");
  3208.       BREAK;
  3209.   };
  3210.  
  3211.       Ðàíüøå Âàì áû ïðèøëîñü ïèñàòü áîëåå ãðîìîçäêóþ êîíñòðóêöèþ:
  3212.  
  3213.   switch(AX){
  3214.     case 1:
  3215.     case 2:
  3216.     case 3:
  3217.     case 4:
  3218.     case 5:
  3219.       WRITESTR("Range AX from 1 to 5");
  3220.       BREAK;
  3221.   };
  3222.  
  3223.       Êðîìå òîãî, ÷òî íîâûé ôîðìàò çàïèñè áîëåå êîìïàêòåí è áîëåå ÷èòàáåëåí,
  3224.   íî åùå ïðè ýòîì êîìïèëÿòîð ñîçäàåò áîëåå êîìïàêòíûé è áûñòðûé êîä.
  3225. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3226.  
  3227.  
  3228. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.7>
  3229.   9.7 Îïåðàòîð ïåðåõîäà goto, GOTO.
  3230. </A></B></FONT><FONT FACE="Courier">
  3231.  
  3232.        Ñèíòàêñèñ:
  3233.        goto <ìåòêà>;
  3234.         .
  3235.         .
  3236.         .
  3237.   <ìåòêà>:
  3238.  
  3239.       Îïåðàòîð ïåðåõîäà <b>goto</b> ïåðåäàåò óïðàâëåíèå íà <b>îïåðàòîð</b> ïîìå÷åííûé
  3240.   <b>ìåòêîé</b>. Àíàëîãîì â àññåìáëåðå îïåðàòîðó goto ÿâëÿåòñÿ êîìàíäà <b>jmp near</b>.
  3241.   Àíàëîãîì â àññåìáëåðå îïåðàòîðó <b>GOTO</b> ÿâëÿåòñÿ êîìàíäà <b>jmp short</b>.
  3242. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3243.  
  3244.  
  3245. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.8>
  3246.   9.8 Îïåðàòîð ðàçðûâà break, BREAK.
  3247. </A></B></FONT><FONT FACE="Courier">
  3248.  
  3249.       Îïåðàòîð ðàçðûâà <b>break</b> ïðåðûâàåò âûïîëíåíèå îïåðàòîðîâ <b>do-while,
  3250.   for, switch, while, loop, loopnz, LOOPNZ</b>. Îí ìîæåò ñîäåðæàòüñÿ
  3251.   òîëüêî â òåëå ýòèõ îïåðàòîðîâ. Óïðàâëåíèå ïåðåäàåòñÿ îïåðàòîðó, ñëåäóþùåìó
  3252.   çà ïðåðâàííûì öèêëîì.
  3253.  
  3254.       Îïåðàòîð <b>BREAK</b> àíàëîãè÷åí <b>break</b>, íî ïðè ýòîì ãåíåðèðóåòñÿ êîä íà 1
  3255.   áàéò êîðî÷å. Ðàçìåð ñãåíåðèðîâàííîãî êîäà îò ìåñòà ãäå ïðèìåíÿåòñÿ <b>BREAK</b>
  3256.   äî êîíöà öèêëà äîëæåí áûòü ìåíüøå 127 áàéò.
  3257.  
  3258.     Ïðèìåðû:
  3259.         FOR (i=0; ; i++){
  3260.                 FOR(j=0; j < WIDTH; j++){
  3261.                         IF(i==5)BREAK;
  3262.                 }
  3263.                 IF(i==10)BREAK;
  3264.         }
  3265. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3266.  
  3267.  
  3268. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.9>
  3269.   9.9 Îïåðàòîð ïðîäîëæåíèÿ continue, CONTINUE.
  3270. </A></B></FONT><FONT FACE="Courier">
  3271.  
  3272.       Îïåðàòîð ïðîäîëæåíèÿ <b>continue</b> ïåðåäàåò óïðàâëåíèå íà ñëåäóþùóþ
  3273.   èòåðàöèþ â öèêëàõ <b>do-while, for, while, loop, loopnz</b>. Â öèêëàõ
  3274.   <b>do-while, while, loop</b> ñëåäóþùàÿ èòåðàöèÿ íà÷èíàåòñÿ ñ âû÷èñëåíèÿ
  3275.   óñëîâíîãî âûðàæåíèÿ. Äëÿ öèêëà <b>for</b> ñëåäóþùàÿ èòåðàöèÿ íà÷èíàåòñÿ ñ
  3276.   âû÷èñëåíèÿ âûðàæåíèÿ ïðèðàùåíèÿ, à çàòåì ïðîèñõîäèò âû÷èñëåíèå óñëîâíîãî
  3277.   âûðàæåíèÿ.
  3278.  
  3279.     Îïåðàòîð <b>CONTINUE</b> àíàëîãè÷åí <b>continue</b>, íî ïðè ýòîì ãåíåðèðóåòñÿ êîä íà
  3280.   1 áàéò êîðî÷å. Ðàçìåð ñãåíåðèðîâàííîãî êîäà îò ìåñòà ãäå ïðèìåíÿåòñÿ
  3281.   <b>CONTINUE</b> äî íà÷àëà èòåðàöèè äîëæåí áûòü ìåíüøå 127 áàéò.
  3282. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3283.  
  3284.  
  3285. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.10>
  3286.   9.10 Ëîãè÷åñêîå îáúåäèíåíèå óñëîâèé.
  3287. </A></B></FONT><FONT FACE="Courier">
  3288.  
  3289.       Ñóùåñòâóåò âîçìîæíîñòü ëîãè÷åñêîãî îáúåäèíåíèÿ ñðàâíåíèé â óñëîâèÿõ
  3290.   <b>IF è if</b>, öèêëàõ <b>do{}while, while{}, WHILE{}, for{} è FOR{}</b>.
  3291.   Êàæäîå ñðàâíåíèå ïðè èõ ëîãè÷åñêîì îáúåäèíåíèè äîëæíî áûòü çàêëþ÷åíî â
  3292.   ñêîáêè.  Îáúåäèíÿòü ìîæíî íå áîëåå 32 ñðàâíåíèé.
  3293.  
  3294.        îòëè÷èå îò <b>C</b> â C-- àíàëèç ëîãè÷åñêèõ îáúåäèíåíèé ïðîèñõîäèò ñëåâà
  3295.   íàïðàâî è âñå ëèøíèå ñêîáêè áóäóò âîñïðèíÿòû êîìïèëÿòîðîì êàê îøèáî÷íûå.
  3296.   Ýòî íåñêîëüêî ñíèæàåò ãèáêîñòü è âîçìîæíîñòè ïðèìåíåíèÿ ýòèõ îáúåäèíåíèé,
  3297.   íî òàêîâà òðàäèöèÿ è ôèëîñîôèÿ, çàëîæåííàÿ â C--.
  3298.  
  3299.       Ïðèìåð:
  3300.  
  3301.            if ( (a>3) && (b>4) || (c<8) ){
  3302.  
  3303.   Ò.å. åñëè ïðîèçâåñòè ðàñøèôðîâêó ýòîãî óñëîâèÿ, òî ïîëó÷èòñÿ ñëåäóþùåå:
  3304.   óñëîâèå âûïîëíèòñÿ åñëè a>3 è b>4 èëè a>3 è c<8.
  3305. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3306.  
  3307.  
  3308. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.11>
  3309.   9.11 Ïåðåõîä ÷åðåç öèêëû.
  3310. </A></B></FONT><FONT FACE="Courier">
  3311.  
  3312.      Äëÿ îïåðàòîðîâ <b>BREAK, break, CONTINUE, continue</b> ââåäåíà
  3313.   ïîääåðæêà ÷èñëîâîãî ïàðàìåòðà, îïðåäåëÿþùåãî, ñêîëüêî öèêëîâ íàäî
  3314.   ïðîïóñòèòü, ïðåæäå ÷åì áóäåò âûïîëíåí ýòîò îïåðàòîð. Íàïðèìåð, ìû èìååì òðè
  3315.   âëîæåííûõ öèêëà:
  3316.  
  3317.   do{
  3318.      loop(CX){
  3319.         for(BX=0;BX<10;BX++){
  3320.          break;   //ñòàíäàðòíûé îïåðàòîð
  3321.          break 0; //break ñ ïàðàìåòðîì - ïðîïóñòèòü 0 öèêëîâ
  3322.          break 1; //break ñ ïàðàìåòðîì - ïðîïóñòèòü 1 öèêë
  3323.          break 2; //break ñ ïàðàìåòðîì - ïðîïóñòèòü 2 öèêëà
  3324.         }
  3325.   LABL0:
  3326.      }
  3327.   LABL1:
  3328.   }while (DX!=0);
  3329.   LABL2:
  3330.  
  3331.        òðåòüåì öèêëå íàõîäèòñÿ ãðóïïà ðàçëè÷íûõ âàðèàíòîâ îïåðàòîðà <b>break</b>.
  3332.   Ïåðâûì ñòîèò ñòàíäàðòíûé îïåðàòîð <b>break</b>, ïðè âûïîëíåíèè êîòîðîãî
  3333.   óïðàâëåíèå áóäåò ïåðåäàâàòüñÿ çà ïðåäåëû òðåòüåãî öèêëà - íà ìåòêó <b>LABL0</b>.
  3334.   Âòîðûì èäåò îïåðàòîð <b>break 0</b>, ïðè âûïîëíåíèè êîòîðîãî áóäåò ïðîïóùåíî 0
  3335.   öèêëîâ è óïðàâëåíèå áóäåò ïåðåäàíî îïÿòü æå íà ìåòêó <b>LABL0</b>. Òàêèì
  3336.   îáðàçîì, çàïèñü <b>break è break 0</b> ÿâëÿþòñÿ ñèíîíèìàìè. Òðåòüèì èäåò
  3337.   îïåðàòîð <b>break 1</b>, ïðè âûïîëíåíèè êîòîðîãî áóäåò ïðîïóùåí îäèí öèêë è
  3338.   óïðàâëåíèå áóäåò ïåðåäàíî çà ïðåäåëû âòîðîãî öèêëà íà ìåòêó <b>LABL1</b>. Íó è
  3339.   íàêîíåö, ïîñëåäíèì èäåò îïåðàòîð <b>break 2</b>, ïðè âûïîëíåíèè êîòîðîãî
  3340.   êîìïèëÿòîð ïðîïóñòèò äâà öèêëà è ïåðåäàñò óïðàâëåíèå çà ïðåäåëû òðåòüåãî,
  3341.   íà ìåòêó <b>LABL2</b>. Ìåòêè â ýòîì ïðèìåðå ïðîñòàâëåíû äëÿ óäîáñòâà îáúÿñíåíèÿ.
  3342.   Íó è ÿ íàäåþñü, Âàì ïîíÿòíî, ÷òî çíà÷åíèå ïàðàìåòðà íå ìîæåò ïðåâûøàòü
  3343.   ÷èñëà öèêëîâ íàõîäÿùèõñÿ ïåðåä òåêóùèì. Òàê äëÿ îäèíî÷íîãî öèêëà ýòîò
  3344.   ïàðàìåòð ìîæåò ïðèíèìàòü ìàêñèìàëüíîå è åäèíñòâåííîå çíà÷åíèå - 0.
  3345. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3346.  
  3347.  
  3348. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.12>
  3349.   9.12 Èíâåðòèðîâàíèå ôëàãà ïðîâåðêè óñëîâèé.
  3350. </A></B></FONT><FONT FACE="Courier">
  3351.  
  3352.       Èíâåðòèðîâàíèå ôëàãà ïðîâåðêè óñëîâèé â îïåðàöèÿõ ñðàâíåíèÿ <b>if/IF
  3353.   for/FOR while/WHILE</b> ïðîèñõîäèò ñ ïîìîùüþ ñèìâîëà <b>! - not</b>.
  3354.  
  3355.      Âûðàæåíè
  3356.  
  3357.     IF ( NOTCARRYFLAG )...   è  IF ( ! CARRYFLAG )...
  3358.     IF ( proc() == 0 )...    è IF ( ! proc() ) ...
  3359.  
  3360.   ÿâëÿþòñÿ ñèíîíèìàìè.
  3361. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3362.  
  3363.  
  3364. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.13>
  3365.   9.13 Âû÷èñëåíèå âûðàæåíèÿ, à çàòåì ïðîâåðêà óñëîâèÿ.
  3366. </A></B></FONT><FONT FACE="Courier">
  3367.  
  3368.       Â îïåðàöèÿõ ñðàâíåíèÿ â ëåâîì îïåðàíäå òåïåðü äîïóñòèìî èñïîëüçîâàòü
  3369.   âû÷èñëåíèÿ âûðàæåíèÿ ñ ïðèñâàèâàíèåì è îïåðàöèè èíêðåìåíòà, äåêðåìåíòà.
  3370.   Íàïðèìåð:
  3371.  
  3372.     IF (i=a+2 != 0 )...
  3373.     IF ( i++ )...
  3374.     IF ( a-- )...
  3375.     IF ( i+=4 == 0 )...
  3376.  
  3377.       Âî âñåõ ýòèõ ïðèìåðàõ ñíà÷àëà ïðîèçîéäåò âû÷èñëåíèå âûðàæåíèÿ â ëåâîé
  3378.   ÷àñòè îïåðàöèè ñðàâíåíèÿ, à ïîòîì áóäåò ïðîèçâåäåíî ñðàâíåíèå ðåçóëüòàòà ñ
  3379.   ïðàâîé ÷àñòüþ âûðàæåíèÿ ñðàâíåíèÿ.
  3380. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3381.  
  3382.  
  3383. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.14>
  3384.   9.14 Ïðîâåðêà áèòîâ ïðè îïåðàöèè ñðàâíåíèÿ.
  3385. </A></B></FONT><FONT FACE="Courier">
  3386.  
  3387.       Åñëè â ëåâîé ÷àñòè âûðàæåíèÿ ñðàâíåíèÿ íàïèñàíî: BX & 5, òî ïðè
  3388.   âû÷èñëåíèè âûðàæåíèÿ ñîäåðæèìîå ðåãèñòðà BX áóäåò èçìåíåíî èíñòðóêöèåé
  3389.   <b>and</b>. Íî èíîãäà âîçíèêàåò íåîáõîäèìîñòü â ïðîâåðêå áèòîâ áåç èçìåíåíèÿ
  3390.   ñîäåðæèìîãî ðåãèñòðà BX. Äëÿ ýòèõ öåëåé íàäî èñïîëüçîâàòü èíñòðóêöèþ
  3391.   <b>test</b>. Êàê æå óêàçàòü êîìïèëÿòîðó, â êàêèõ ñèòóàöèÿõ èñïîëüçîâàòü
  3392.   èíñòðóêöèþ <b>and</b>, à â êàêèõ <b>test</b>? Â ñòàíäàðòíûõ ÿçûêàõ <b>C</b> äëÿ ýòîãî
  3393.   èñïîëüçóåòñÿ ìåõàíèçì ïðèîðèòåòîâ - åñëè âûðàæåíèå çàêëþ÷åíî â ñêîáêè, òî
  3394.   ïðîèçâîäèòñÿ åãî âû÷èñëåíèå, åñëè íåò, òî ïðîèçâîäèòñÿ ïðîâåðêà. Íî C-- íå
  3395.   ïîääåðæèâàåò ïðèîðèòåòîâ. Äëÿ ðàçðåøåíèÿ ýòîé ïðîáëåìû â C-- ðåøåíî
  3396.   èñïîëüçîâàòü íåïîñðåäñòâåííî ñàìó èíñòðóêöèþ <b>test</b>. Âîò äîïóñòèìûå
  3397.   âàðèàíòû ñèíòàêñèñà:
  3398.  
  3399.   IF ( $test AX,5 )
  3400.   IF ( ! $test AX,5)
  3401.   IF ( asm test AX,5)
  3402.   IF ( ! asm { test AX,5 } )
  3403. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3404.  
  3405.  
  3406. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.15>
  3407.   9.15 Îïåðàòîð ïåðåñòàíîâêè.
  3408. </A></B></FONT><FONT FACE="Courier">
  3409.  
  3410.        C-- åñòü îïåðàòîð, êîòîðûé íå âñòðå÷àåòñÿ â äðóãèõ ÿçûêàõ, ýòî
  3411.   îïåðàòîð ïåðåñòàíîâêè. Îïåðàòîð ïåðåñòàíîâêè ìåíÿåò ìåñòàìè ñîäåðæèìîå äâóõ
  3412.   ïåðåìåííûõ. Ñèìâîëüíîå îáîçíà÷åíèå ýòîãî îïåðàòîðà ><. Ïåðåìåííûå ñ îáåèõ
  3413.   ñòîðîí îïåðàòîðà ïåðåñòàíîâêè äîëæíû èìåòü îäèíàêîâûé ðàçìåð, 8 áèò è 8
  3414.   áèò, 16 áèò è 16 áèò, èëè 32 áèòà è 32 áèòà.
  3415.  
  3416.     Âîò íåêîòîðûå ïðèìåðû:
  3417.  
  3418.       AX >< BX; // ñîõðàíÿåò çíà÷åíèå BX â AX è çíà÷åíèå AX â BX
  3419.       CH >< BL; // ìåíÿåò ìåñòàìè ñîäåðæèìîå ðåãèñòðîâ CH è BL
  3420.       dog >< cat; /* ìåíÿåò ìåñòàìè çíà÷åíèÿ ïåðåìåííîé dog è ïåðåìåííîé cat*/
  3421.       counter >< CX; // ìåíÿåò ìåñòàìè çíà÷åíèÿ ïåðåìåííîé counter
  3422.                      // è ñîäåðæèìîå ðåãèñòðà CX
  3423.  
  3424.       Åñëè ïåðåñòàíîâêà îñóùåñòâëÿåòñÿ ìåæäó äâóìÿ 8-ðàçðÿäíûìè ïåðåìåííûìè â
  3425.   ïàìÿòè, áóäåò ðàçðóøåíî ñîäåðæèìîå ðåãèñòðà AL. Åñëè ïåðåñòàíîâêà - ìåæäó
  3426.   äâóìÿ 16-ðàçðÿäíûìè ïåðåìåííûìè â ïàìÿòè, áóäåò ðàçðóøåíî ñîäåðæèìîå
  3427.   ðåãèñòðà AX. Åñëè ïåðåñòàíîâêà - ìåæäó äâóìÿ 32-ðàçðÿäíûìè ïåðåìåííûìè â
  3428.   ïàìÿòè, áóäåò ðàçðóøåíî ñîäåðæèìîå EAX.  ëþáîì äðóãîì ñëó÷àå, íàïðèìåð,
  3429.   ìåæäó ïåðåìåííîé â ïàìÿòè è ðåãèñòðîì, çíà÷åíèÿ âñåõ ðåãèñòðîâ áóäóò
  3430.   ñîõðàíåíû.
  3431. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3432.  
  3433.  
  3434. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.16>
  3435.   9.16 Îïåðàòîð îòðèöàíèÿ.
  3436. </A></B></FONT><FONT FACE="Courier">
  3437.  
  3438.       C-- ïîääåðæèâàåò áûñòðûé ñèíòàêñèñ ñìåíû çíàêà ïåðåìåííîé - îïåðàòîð
  3439.   îòðèöàíèÿ. Ïîñòàâèâ <b>-</b> (çíàê ìèíóñ) ïåðåä èäåíòèôèêàòîðîì ïåðåìåííîé ïàìÿòè
  3440.   èëè ðåãèñòðà è <b>;</b> (òî÷êó ñ çàïÿòîé) ïîñëå èäåíòèôèêàòîðà, âû ñìåíèòå çíàê
  3441.   ïåðåìåííîé ïàìÿòè èëè ðåãèñòðà.
  3442.  
  3443.   Âîò íåêîòîðûå ïðèìåðû:
  3444.  
  3445.            -AX; // ðåçóëüòàò òîò æå, ÷òî è ïðè 'AX = -AX;' ,íî áûñòðåå.
  3446.            -tree; // òî æå ñàìîå, ÷òî 'tree = -tree;' ,íî áûñòðåå.
  3447.            -BH; // ìåíÿåò çíàê BH.
  3448. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3449.  
  3450.  
  3451. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.17>
  3452.   9.17 Îïåðàòîð èíâåðñèè.
  3453. </A></B></FONT><FONT FACE="Courier">
  3454.  
  3455.       C-- ïîääåðæèâàåò áûñòðûé ñèíòàêñèñ âûïîëíåíèÿ ëîãè÷åñêîé èíâåðñèè
  3456.   çíà÷åíèÿ ïåðåìåííîé - îïåðàòîð èíâåðñèè. Ïîñòàâèâ <b>!</b> (âîñêëèöàòåëüíûé çíàê)
  3457.   ïåðåä èäåíòèôèêàòîðîì ïåðåìåííîé ïàìÿòè èëè ðåãèñòðîì è <b>;</b> (òî÷êó ñ
  3458.   çàïÿòîé) ïîñëå èäåíòèôèêàòîðà, âû âûïîëíèòå ëîãè÷åñêóþ (âûïîëíèòñÿ
  3459.   àññåìáëåðíàÿ êîìàíäà NOT) èíâåðñèþ òåêóùåãî çíà÷åíèÿ ïåðåìåííîé. Âîò
  3460.   íåêîòîðûå ïðèìåðû:
  3461.  
  3462.           !AX; // òî æå ñàìîå, ÷òî ' AX ^ = 0xFFFF; ' íî áûñòðåå.
  3463.           !node; // çàìåíÿåò çíà÷åíèå 'node' åãî ëîãè÷åñêîé èíâåðñèåé.
  3464.           !CL; // òî æå ñàìîå, ÷òî ' CL ^ = 0xFF ' íî áûñòðåå.
  3465. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3466.  
  3467.  
  3468. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.18>
  3469.   9.18 Ñïåöèàëüíûå óñëîâíûå âûðàæåíèÿ.
  3470. </A></B></FONT><FONT FACE="Courier">
  3471.  
  3472.       C-- ïîääåðæèâàåò âîñåìü ñïåöèàëüíûõ óñëîâíûõ âûðàæåíèé:
  3473.  
  3474.            CARRYFLAG
  3475.            NOTCARRYFLAG
  3476.            OVERFLOW
  3477.            NOTOVERFLOW
  3478.            ZEROFLAG
  3479.            NOTZEROFLAG
  3480.            MINUSFLAG
  3481.            PLUSFLAG
  3482.  
  3483.       Îíè ìîãóò èñïîëüçîâàòüñÿ âìåñòî ëþáûõ íîðìàëüíûõ óñëîâíûõ âûðàæåíèé.
  3484.   Åñëè Âû æåëàåòå, íàïðèìåð, âûïîëíèòü áëîê êîäà òîëüêî åñëè óñòàíîâëåí ôëàã
  3485.   ïåðåíîñà, Âàì ñëåäóåò èñïîëüçîâàòü ñëåäóþùóþ ïîñëåäîâàòåëüíîñòü êîìàíä:
  3486.  
  3487.            IF( CARRYFLAG )
  3488.            {
  3489.            // çäåñü âû ÷åãî-òî äåëàåòå
  3490.            }
  3491.  
  3492.       Åñëè Âû æåëàåòå íåïðåðûâíî âûïîëíÿòü áëîê êîäà äî òåõ ïîð, ïîêà íå
  3493.   óñòàíîâèòñÿ ôëàã ïåðåïîëíåíèÿ, Âàì ñëåäóåò èñïîëüçîâàòü íå÷òî ïîäîáíîå
  3494.   ñëåäóþùåìó êóñêó êîäà:
  3495.  
  3496.           do {
  3497.               // çäåñü âû îïÿòü ÷åãî-òî äåëàåòå
  3498.               } while( NOTOVERFLOW );
  3499. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3500.  
  3501.  
  3502. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.19>
  3503.   9.19 Ñèìâîë $ - âñòàâëÿåò òåêóùèé àäðåñ ïðîãðàììû.
  3504. </A></B></FONT><FONT FACE="Courier">
  3505.  
  3506.       Ñèìâîë <b>$</b>, êðîìå òîãî, ÷òî ÿâëÿåòñÿ ïðèçíàêîì ïîñëåäóþùåé àññåìáëåðíîé
  3507.   èíñòðóêöèè, â ÿçûêå C--, êàê è â ÿçûêå Assembler ìîæåò óêàçûâàòü òåêóùèé
  3508.   àäðåñ (ñìåùåíèå) êîìïèëèðóåìîé ïðîãðàììû. Íî â C-- îí èìåë îãðàíè÷åííûå
  3509.   âîçìîæíîñòè. Îí ìîã áûòü èñïîëüçîâàí ëèøü êàê àðãóìåíò â îïåðàòîðàõ
  3510.   <b>GOTO/goto</b> è àññåìáëåðíûõ èíñòðóêöèÿõ <b>DW/DD/JMP</b>.
  3511.  
  3512.       Ýòîò ñèìâîë ìîæåò íàõîäèòüñÿ â ëþáîì ìåñòå âû÷èñëÿåìîãî ÷èñëîâîãî
  3513.   âûðàæåíèÿ è ìîæåò áûòü ïðèìåíåí â ëþáîì ìåñòå ñîâìåñòíî ñ äðóãèìè ÷èñëîâûìè
  3514.   âûðàæåíèÿìè.
  3515.  
  3516.   Ïðèìåðû ïðèìåíåíèÿ:
  3517.  
  3518.   DW #main-$    //çàïèñàòü ðàññòîÿíèå îò ïðîöåäóðû main äî òåêóùåãî ìåñòà
  3519.   GOTO $+2;     //ïåðåéòè ïî àäðåñó íà 2 áîëüøå, ÷åì òåêóùèé àäðåñ
  3520. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3521.  
  3522.  
  3523. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.20>
  3524.   9.20 Êëþ÷åâîå ñëîâî static è îïåðàòîð ::.
  3525. </A></B></FONT><FONT FACE="Courier">
  3526.  
  3527.       Åñëè ïåðåä îáúÿâëåíèåì ãëîáàëüíîé ïåðåìåííîé, ñòðóêòóðû èëè ïðîöåäóðû
  3528.   óêàçàòü ñëîâî <b>static</b>, òî ýòè ïåðåìåííàÿ, ñòðóêòóðà èëè ïðîöåäóðà áóäóò
  3529.   äîñòóïíû òîëüêî â òîì ôàéëå, â êîòîðîì îíè áûëè îáúÿâëåíû. Ò.å. åñëè Âû
  3530.   âêëþ÷èòå ýòîò ôàéë â äðóãîé äèðåêòèâîé <b>include</b>, òî ïåðåìåííûå îáúÿâëåííûå
  3531.   âî âêëþ÷àåìîì ôàéëå ñî ñëîâîì <b>static</b> íå áóäóò äîñòóïíû â îñíîâíîì ôàéëå,
  3532.   è Âû ìîæåòå â îñíîâíîì ôàéëå îáúÿâèòü äðóãèå ïåðåìåííûå ñ òàêèìè æå
  3533.   èìåíàìè.
  3534.  
  3535.       Åñëè Âû ïðèìåíèòå ñëîâî <b>static</b> ïðè îáúÿâëåíèè ëîêàëüíîé ïåðåìåííîé â
  3536.   ïðîöåäóðå, òî ïàìÿòü äëÿ ýòîé ïåðåìåííîé áóäåò âûäåëåíà íå â ñòåêå, à â
  3537.   îáëàñòè äàííûõ ïðîöåäóðû. Íî ýòà ïåðåìåííàÿ áóäåò äîñòóïíà òîëüêî âíóòðè
  3538.   ïðîöåäóðû, â êîòîðîé îíà áûëà îáúÿâëåíà. Ïðèìåíåíèå <b>static</b> ê ëîêàëüíûì
  3539.   ïåðåìåííûì äàåò âîçìîæíîñòü ñîõðàíÿòü çíà÷åíèå ïåðåìåííîé äëÿ ñëåäóþùåãî
  3540.   âõîäà â ïðîöåäóðó.
  3541.  
  3542.       Ñëîâî <b>static</b> ìîæíî ïðèìåíÿòü ê ëþáîìó ãëîáàëüíîìó îáúåêòó
  3543.   (ïåðåìåííîé, ñòðóêòóðå, ïðîöåäóðå). Äëÿ ëîêàëüíîãî èñïîëüçîâàíèÿ ýòî ñëîâî
  3544.   ìîæíî ïðèìåíÿòü òîëüêî ê ïåðåìåííûì.
  3545.  
  3546.       Åñëè â Âàøåé ïðîãðàììå åñòü ãëîáàëüíàÿ è ëîêàëüíàÿ ïåðåìåííàÿ ñ
  3547.   îäèíàêîâûìè èìåíàìè, òî â ïðîöåäóðå, â êîòîðîé îáúÿâëåíà ýòà ëîêàëüíàÿ
  3548.   ïåðåìåííàÿ, Âû íå èìåëè äîñòóïà ê îäíîèìåííîé ãëîáàëüíîé ïåðåìåííîé.
  3549.   Ïðèìåíèâ ïåðåä èìåíåì ïåðåìåííîé îïåðàòîð <b>::</b>, Âû ïîëó÷èòå äîñòóï ê
  3550.   ãëîáàëüíîé ïåðåìåííîé.  Ïðèìåð:
  3551.  
  3552.   int var;  //îáúÿâëÿåì ãëîáàëüíóþ ïåðåìåííóþ
  3553.  
  3554.   void proc()
  3555.   int var;  //îáúÿâëÿåì ëîêàëüíóþ ïåðåìåííóþ ñ èìåíåì óæå ñóùåñòâóþùåé
  3556.             //ãëîáàëüíîé ïåðåìåííîé
  3557.   {
  3558.     (E)AX=var;  //èìååì äîñòóï òîëüêî ê ëîêàëüíîé ïåðåìåííîé
  3559.     (E)AX=::var;  //à òàê ìîæíî ïîëó÷èòü äîñòóï ê ãëîáàëüíîé ïåðåìåííîé
  3560.   }
  3561. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3562.  
  3563.  
  3564. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.21>
  3565.   9.21 Îïåðàòîð sizeof.
  3566. </A></B></FONT><FONT FACE="Courier">
  3567.  
  3568.       Îïåðàöèÿ <b>sizeof</b> îïðåäåëÿåò ðàçìåð ïàìÿòè, êîòîðûé ñîîòâåòñòâóåò îáúåêòó
  3569.   èëè òèïó. Îïåðàöèÿ sizeof èìååò ñëåäóþùèé âèä:
  3570.  
  3571.    sizeof (<èìÿ òèïà>)
  3572.  
  3573.       Ðåçóëüòàòîì îïåðàöèè <b>sizeof</b> ÿâëÿåòñÿ ðàçìåð ïàìÿòè â áàéòàõ,
  3574.   ñîîòâåòñòâóþùèé çàäàííîìó îáúåêòó èëè òèïó.
  3575.  
  3576.       Â C-- îïåðàòîð <b>sizeof</b> ìîæíî ïðèìåíÿòü ê ïåðåìåííûì, ðåãèñòðàì, òèïàì
  3577.   ïåðåìåííûõ, ñòðóêòóðàì, ïðîöåäóðàì, òåêñòîâûì ñòðîêàì è ôàéëàì.
  3578.  
  3579.       Åñëè îïåðàöèÿ <b>sizeof</b> ïðèìåíÿåòñÿ ê òèïó ñòðóêòóðû, òî ðåçóëüòàòîì
  3580.   ÿâëÿåòñÿ ðàçìåð òåãà äàííîé ñòðóêòóðû.
  3581.  
  3582.       Åñëè îïåðàöèÿ <b>sizeof</b> ïðèìåíÿåòñÿ ê òåêñòîâîé ñòðîêå, òî ðåçóëüòàòîì
  3583.   îïåðàöèè ÿâëÿåòñÿ ðàçìåð ñòðîêè ïëþñ çàâåðøàþùèé íóëü. Íàïðèìåð:
  3584.  
  3585.    sizeof ("Test")
  3586.  
  3587.   ðåçóëüòàòîì ýòîé îïåðàöèè áóäåò ÷èñëî 5. Åñëè Âû íàïèøèòå òàêóþ
  3588.   êîíñòðóêöèþ:
  3589.  
  3590.   char a="Test";
  3591.  
  3592.    sizeof(a)
  3593.  
  3594.   òî ðåçóëüòàòîì áóäåò 5 - ðàçìåð ïàìÿòè, îòâåäåííûé äëÿ ïåðåìåííîé a.
  3595.  
  3596.       Ïðè èñïîëüçîâàíèè îïåðàòîðà <b>sizeof</b> ñ èìåíåì ñòðóêòóðû âñòàâëÿåò
  3597.   ôàêòè÷åñêèé ðàçìåð ïàìÿòè, çàíèìàåìûé ñòðóêòóðîé. Ýòî îñîáåííî âàæíî, åñëè
  3598.   Âû îáúÿâèëè ìàññèâ ñòðóêòóð.
  3599.  
  3600.       Îïåðàòîð <b>sizeof</b> ìîæíî ïðèìåíÿòü è ê èìåíè îïðåäåëåííîé ðàíåå
  3601.   ïðîöåäóðû. Ðåçóëüòàòîì áóäåò ðàçìåð ýòîé ïðîöåäóðû. Íî äëÿ äèíàìè÷åñêèõ
  3602.   ïðîöåäóð âñåãäà áóäåò íîëü.
  3603.  
  3604.       Îïåðàöèþ <b>sizeof</b> ìîæíî ïðèìåíÿòü è ê ôàéëàì. Ýòî áûâàåò î÷åíü ïîëåçíûì
  3605.   ïðè èñïîëüçîâàíèè îïåðàòîðà <b>FROM</b>, íî ìîæåò ïðèìåíÿòüñÿ è â äðóãèõ ñëó÷àÿõ.
  3606.   Ïðèìåð ïðèìåíåíèÿ îïåðàòîðà <b>sizeof</b> ê ôàéëàì:
  3607.  
  3608.    sizeof ( file "filename.dat" )
  3609.  
  3610.   Ðåçóëüòàòîì ýòîé îïåðàöèè áóäåò ðàçìåð ôàéëà "filename.dat".
  3611. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3612.  
  3613.  
  3614. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.22>
  3615.   9.22 Ìåòêè ïåðåõîäà.
  3616. </A></B></FONT><FONT FACE="Courier">
  3617.  
  3618.       Ìåòêè ïåðåõîäà ïðèìåíÿþòñÿ äëÿ óêàçàíèÿ íà÷àëüíûõ òî÷åê ó÷àñòêîâ êîäà,
  3619.   èñïîëüçóåìûõ êîìàíäàìè ïåðåõîäà âñòðîåííîãî àññåìáëåðà è îïåðàòîðàìè
  3620.   <b>goto/GOTO</b>.
  3621.  
  3622.       Èìåþòñÿ äâà òèïà ìåòîê ïåðåõîäà: ãëîáàëüíûå è ëîêàëüíûå. Ãëîáàëüíûå
  3623.   ìåòêè, êàê ñëåäóåò èç íàçâàíèÿ, ýòî ìåòêè, êîòîðûå âèäèìû èç ëþáîãî ìåñòà â
  3624.   ïðîãðàììå. Ëîêàëüíûå ìåòêè âèäíû òîëüêî â ïðåäåëàõ ñâîåãî ïðîöåäóðíîãî
  3625.   áëîêà, è íå îïðåäåëåíû çà åãî ïðåäåëàìè.
  3626.  
  3627.       Ìåòêè îïðåäåëÿþòñÿ èäåíòèôèêàòîðîì, îêàí÷èâàþùèìèñÿ äâîåòî÷èåì. Åñëè
  3628.   èäåíòèôèêàòîð ñîäåðæèò õîòÿ áû îäèí ñèìâîë ñòðî÷íûõ áóêâ (áóêâ íèæíåãî
  3629.   ðåãèñòðà, ìàëåíüêèõ áóêâ), ýòî ãëîáàëüíàÿ ìåòêà ïåðåõîäà, â ïðîòèâíîì
  3630.   ñëó÷àå, ýòî ëîêàëüíàÿ ìåòêà ïåðåõîäà.
  3631.  
  3632.       Ãëîáàëüíûå ìåòêè ïåðåõîäà íå äîëæíû èñïîëüçîâàòüñÿ âíóòðè äèíàìè÷åñêèõ
  3633.   ïðîöåäóð; òàì ìîæíî èñïîëüçîâàòü òîëüêî ëîêàëüíûå ìåòêè. Ýòî âàæíî ïîìíèòü,
  3634.   ïîñêîëüêó, èç-çà ïðèìåíåíèÿ òàêîãî ñðåäñòâà êàê ìàêðîêîìàíäû, äèíàìè÷åñêàÿ
  3635.   ïðîöåäóðà ìîæåò ïðèñóòñòâîâàòü â íåñêîëüêèõ ìåñòàõ êîäà, ÷òî áóäåò
  3636.   îçíà÷àòü, ÷òî ìåòêå ñîîòâåòñòâóåò áîëüøå ÷åì îäèí àäðåñ.
  3637.  
  3638.       Ìåòêè âíå ïðîöåäóð ôàêòè÷åñêè ðàñïîëàãàþòñÿ â îáëàñòè äàííûõ ïðîãðàììû.
  3639.   Åñëè äàííûå è êîä íàõîäÿòñÿ â îäíîì ñåãìåíòå (à èìåííî òàê îðãàíèçîâàííà
  3640.   ïðîãðàììà, íàïèñàííàÿ íà C--), òî ìåòêè âíå ïðîöåäóð ñòàíîâÿòñÿ ïðîñòûì è
  3641.   ýôôåêòèâíûì ìåòîäîì äëÿ ïîëó÷åíèÿ ðàññòîÿíèé ìåæäó ÷àñòÿìè ïðîãðàììû. Â
  3642.   êà÷åñòâå èìåí äëÿ ìåòîê âíå ïðîöåäóð ìîãóò áûòü èñïîëüçîâàíû óíèêàëüíûå
  3643.   èäåíòèôèêàòîðû, â êîòîðûõ ìîæíî èñïîëüçîâàòü áîëüøèå, ìàëåíüêèå è ñìåñü
  3644.   áîëüøèõ è ìàëåíüêèõ áóêâ.
  3645. <A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3646.  
  3647.  
  3648. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=10.1>
  3649. 10. Àññåìáëåð.
  3650.  
  3651.   10.1 Ïîääåðæêà êîìàíä àññåìáëåðà.
  3652. </A></B></FONT><FONT FACE="Courier">
  3653.  
  3654.       Âñòðîåííûé â C-- àññåìáëåð ïîääåðæèâàåò âñå èíñòðóêöèè 8088/8086,
  3655.   80286, 80386, 80486, Pentium, Pentium II è Pentium III ïðîöåññîðîâ.
  3656.  
  3657.       Âñå èíñòðóêöèè âñòðîåííîãî àññåìáëåðà äîëæíû íà÷èíàòüñÿ ñ ñèìâîëà
  3658.   äîëëàðà <b>$</b>. Ïîääåðæèâàåòñÿ òàêæå êëþ÷åâîå ñëîâî <b>asm</b>, êîòîðîå ÿâëÿÿñü
  3659.   ñèíîíèìîì ê ñèìâîëó äîëëàðà, åùå è ïîääåðæèâàåò îáúåäèíåíèå àññåìáëåðíûõ
  3660.   èíñòðóêöèé â áëîêè.
  3661. <A href="#contents10" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3662.  
  3663.  
  3664. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=10.2>
  3665.   10.2 Êëþ÷åâîå ñëîâî asm.
  3666. </A></B></FONT><FONT FACE="Courier">
  3667.  
  3668.       Êëþ÷åâîå ñëîâî <b>asm</b> ÿâëÿåòñÿ ñèíîíèìîì ê <b>$</b> - ïðåôèêñ àññåìáëåðíîé
  3669.   êîìàíäû. Ïîñëå ñëîâà asm ìîæíî ïèñàòü áëîê àññåìáëåðíûõ êîìàíä.  Ïðèìåð:
  3670.  
  3671.         asm {
  3672.                 .
  3673.                 .
  3674.                 push AX
  3675.   labl:
  3676.                 push BX
  3677.                 mov AX,0x1234
  3678.                 jmp short labl
  3679.                 .
  3680.                 .
  3681.                 .
  3682.         }
  3683.  
  3684.     Ìåòêè âíóòðè áëîêà àññåìáëåðíûõ êîìàíä äîïóñòèìû.
  3685. <A href="#contents10" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3686.  
  3687.  
  3688. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=10.3>
  3689.   10.3 Ïðåôèêñ dup - ïîâòîðåíèå èíñòðóêöèé DB/DW/DD.
  3690. </A></B></FONT><FONT FACE="Courier">
  3691.  
  3692.       Äëÿ àññåìáëåðíûõ èíñòðóêöèè <b>DB, DW, DD</b> ââåäåíà âîçìîæíîñòü èñïîëüçîâàòü
  3693.   ïðåôèêñ ïîâòîðåíèé <b>dup</b>. Ïðèìåíåíèå ýòîãî ïðåôèêñà èìååò ñëåäóþùèé
  3694.   ñèíòàêñèñ:
  3695.  
  3696.     $DW NUMREP dup VALTOREP
  3697.  
  3698.   NUMREP - ÷èñëî ïîâòîðîâ èíñòðóêöèè DW.
  3699.   VALTOREP - âåëè÷èíà, êîòîðàÿ áóäåò ïîâòîðåíà NUMREP ðàç.
  3700.  
  3701.        îòëè÷èå îò àíàëîãà ýòîãî ïðåôèêñà èç àññåìáëåðà ïîâòîðÿåìóþ âåëè÷èíó
  3702.   çàêëþ÷àòü â ñêîáêè íåëüçÿ.
  3703. <A href="#contents10" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3704.  
  3705.  
  3706. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=10.4>
  3707.   10.4 Èíñòðóêöèè ïðîöåññîðà Pentium III.
  3708. </A></B></FONT><FONT FACE="Courier">
  3709.  
  3710.       Â êîìïèëÿòîð äîáàâëåíà ïîääåðæêà 19 íîâûõ èíñòðóêöèé MMX ðàñøèðåíèÿ
  3711.  
  3712.   MASKMOVQ   mmx,mmx
  3713.   MOVNTQ     m64,mmx
  3714.   PAVGB      mmx,mmx/m64
  3715.   PAVGW      mmx,mmx/m64
  3716.   PEXTRW     r32,mmx,i8
  3717.   PINSRW     mmx,r32/m16,i8
  3718.   PMAXUB     mmx,mmx/m64
  3719.   PMAXSW     mmx,mmx/m64
  3720.   PMINUB     mmx,mmx/m64
  3721.   PMINSW     mmx,mmx/m64
  3722.   PMOVMSKB   r32,mmx
  3723.   PMULHUW    mmx,mmx/m64
  3724.   PREFETCHT0 mem
  3725.   PREFETCHT1 mem
  3726.   PREFETCHT2 mem
  3727.   PREFETCHNTA mem
  3728.   SFENCE
  3729.   PSADBW     mmx,mmx/m64
  3730.   PSHUFW     mmx,mmx/m64,i8
  3731.  
  3732.       è 46 èíñòðóêöèé SSE ðàñøèðåíèÿ.
  3733.  
  3734.   ADDPS      xmm,m128/xmm
  3735.   ADDSS      xmm,xmm/m32
  3736.   ANDNPS     xmm,xmm/m128
  3737.   ANDPS      xmm,xmm/m128
  3738.   COMISS     xmm,xmm/m32
  3739.   DIVPS      xmm,m128/xmm
  3740.   DIVSS      xmm,xmm/m32
  3741.   MAXPS      xmm,m128/xmm
  3742.   MAXSS      xmm,xmm/m32
  3743.   MINPS      xmm,m128/xmm
  3744.   MINSS      xmm,xmm/m32
  3745.   MULPS      xmm,m128/xmm
  3746.   MULSS      xmm,xmm/m32
  3747.   ORPS       xmm,xmm/m128
  3748.   RCPPS      xmm,xmm/m128
  3749.   RCPSS      xmm,xmm/m32
  3750.   RSQRTPS    xmm,xmm/m128
  3751.   RSQRTSS    xmm,xmm/m32
  3752.   SQRTPS     xmm,m128/xmm
  3753.   SQRTSS     xmm,xmm/m32
  3754.   SUBPS      xmm,m128/xmm
  3755.   SUBSS      xmm,xmm/m32
  3756.   UCOMISS    xmm,xmm/m32
  3757.   UNPCKHPS   xmm,xmm/m128
  3758.   UNPCKLPS   xmm,xmm/m128
  3759.   XORPS      xmm,xmm/m128
  3760.   CMPPS      xmm,xmm/m128,i8
  3761.   CMPSS      xmm,xmm/m32,i8
  3762.   SHUFPS     xmm,xmm/m128,i8
  3763.   CVTPI2PS   xmm,m64/mmx
  3764.   CVTSI2SS   xmm,m32/r32
  3765.   CVTPS2PI   mmx,m128/xmm
  3766.   CVTTPS2PI  mmx,xmm/m128
  3767.   CVTSS2SI   r32,xmm/m128
  3768.   CVTTSS2SI  r32,xmm/m128
  3769.   LDMXCSR    m32
  3770.   STMXCSR    m32
  3771.   MOVHLPS    xmm,xmm
  3772.   MOVLHPS    xmm,xmm
  3773.   MOVMSKPS   r32,xmm
  3774.   MOVNTPS    m128,xmm
  3775.   MOVAPS     m128/xmm,xmm/m128
  3776.   MOVSS      xmm/m32,xmm/m32
  3777.   MOVUPS     xmm/m128,m128/xmm
  3778.   MOVHPS     xmm/m64,m64/xmm
  3779.   MOVLPS     xmm/m64,m64/xmm
  3780.  
  3781.       Ìíîãèå èç ýòèõ èíñòðóêöèé ìîãóò èñïîëüçîâàòü â êà÷åñòâå îïåðàíäà
  3782.   64-áèòíûå è 128-áèòíûå ÿ÷åéêè ïàìÿòè. Êîìïèëÿòîð C-- ñåé÷àñ ìîæåò ðàáîòàòü
  3783.   òîëüêî ñ 32-áèòíûìè ïåðåìåííûìè. Ïîýòîìó äëÿ èíñòðóêöèé èñïîëüçóþùèõ â
  3784.   êà÷åñòâå îïåðàíäà ÿ÷åéêè ïàìÿòè ðàçìåðîì áîëüøå 32-áèò ìîæíî èñïîëüçîâàòü
  3785.   ïåðåìåííûå ëþáûõ òèïîâ. Êîìïèëÿòîð íå áóäåò âûäàâàòü íà ýòî ñîîáùåíèé îá
  3786.   îøèáêå, áóäåò èñïîëüçîâàí àäðåñ ýòîé ïåðåìåííîé, à ñàìà èíñòðóêöèÿ áóäåò
  3787.   èñïîëüçîâàòü íóæíîå åé ÷èñëî áèòîâ ïàìÿòè, íà÷èíàÿ ñ àäðåñà óêàçàííîé
  3788.   ïåðåìåííîé. Íàïðèìåð:
  3789.  
  3790.       Äëÿ èíñòðóêöèè <b>movaps</b> îäèí èç îïåðàíäîâ ìîæåò áûòü 128-áèòíîé
  3791.   ÿ÷åéêîé ïàìÿòè. Äëÿ ýòîé èíñòðóêöèè äîïóñòèìû ñëåäóþùèé ñèíòàêñèñ:
  3792.  
  3793.   byte  var8_128[16];
  3794.   word  var16_128[8];
  3795.   dword var32_128[4];
  3796.  
  3797.   void proc()
  3798.   {
  3799.   asm{
  3800.     movaps var8_128,xmm0 //â ìàññèâ èç 16 áàéò áóäåò çàïèñàíî ñîäåðæèìîå XMM0
  3801.     movaps xmm1,var16_128       //â XMM1 áóäåò çàïèñàíî ñîäåðæèìîå 8 ñëîâ
  3802.     movaps var32_128,xmm1 //â ìàññèâ èç 4 äâîéíûõ ñëîâ áóäåò çàïèñàíî XMM1
  3803.   }
  3804.   }
  3805. <A href="#contents10" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3806.  
  3807.  
  3808. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.1>
  3809. 11. Ïðîöåäóðû.
  3810.  
  3811.   11.1 Òèïû ïðîöåäóð, ôóíêöèé è ìàêðîêîìàíä.
  3812. </A></B></FONT><FONT FACE="Courier">
  3813.  
  3814.       Ñåé÷àñ C-- ïîääåðæèâàåò 4 òèïà âûçîâà ïðîöåäóð: <b>cdecl, pascal, stdcall
  3815.   è fastcall</b>. Âîò êðàòêèå õàðàêòåðèñòèêè ýòèõ òèïîâ âûçîâîâ ïðîöåäóð:
  3816.  
  3817.   <b><font color="Red">cdecl</font></b>  Ýòîò òèï âûçîâà ïðîöåäóð ÿâëÿåòñÿ ïî óìîë÷àíèþ äëÿ ÿçûêà <b>Ñ</b>. Îí
  3818.   õàðàêòåðèçóåòñÿ òåì, ÷òî ïàðàìåòðû ïðîöåäóðû ïåðåäàþòñÿ â ïîðÿäêå îáðàòíîì
  3819.   èõ çàïèñè. Î÷èñòêà ñòåêà îò ïàðàìåòðîâ ïðîèçâîäèòñÿ ïîñëå çàâåðøåíèÿ ðàáîòû
  3820.   ïðîöåäóðû. Ýòîò ñïîñîá âûçîâà ïðîöåäóð î÷åíü óäîáåí äëÿ ïðîöåäóð ñ
  3821.   ïåðåìåííûì ÷èñëîì ïàðàìåòðîâ.
  3822.  
  3823.   <b><font color="Red">pascal</font></b>  Ýòîò òèï âûçîâà ïðåäïîëàãàåò, ÷òî ïàðàìåòðû ïåðåäàþòñÿ â òîì
  3824.   ïîðÿäêå, â êîòîðîì îíè çàïèñàíû â ïðîãðàììå. Îñâîáîæäåíèå ñòåêà îò
  3825.   ïàðàìåòðîâ ïðîèçâîäèò ñàìà âûçûâàåìàÿ ïðîöåäóðà. Ýòîò òèï âûçîâà ÿâëÿåòñÿ
  3826.   áîëåå êîìïàêòíûì, ÷åì <b>cdecl</b>.
  3827.  
  3828.   <b><font color="Red">stdcall</font></b>  Ýòîò òèï âûçîâà ÿâëÿåòñÿ ãèáðèäîì ïåðâûõ äâóõ. Ïàðàìåòðû
  3829.   ïåðåäàþòñÿ ïðîöåäóðå â ïîðÿäêå îáðàòíîì, òîìó â êîòîðîì îíè çàïèñàíû â
  3830.   ïðîãðàììå. Îñâîáîæäåíèå ñòåêà îò ïàðàìåòðîâ ïðîèçâîäèòñÿ â ñàìîé âûçûâàåìîé
  3831.   ïðîöåäóðå.
  3832.  
  3833.   <b><font color="Red">fastcall</font></b>  Ýòîò òèï âûçîâà ïðîöåäóð ïðåäïîëàãàåò ÷òî ïåðåäà÷à ïàðàìåòðîâ
  3834.   ïðîöåäóðå ïðîèçâîäèòñÿ ÷åðåç ðåãèñòðû, òåì ñàìûì îòïàäàåò íåîáõîäèìîñòü
  3835.   îñâîáîæäåíèÿ ñòåêà îò ïàðàìåòðîâ. Äëÿ ýòîãî òèïà âûçîâà ïðîöåäóðû
  3836.   ñóùåñòâóþò îãðàíè÷åíèÿ ïî ÷èñëó ïåðåäàâàåìûõ ïàðàìåòðîâ. Äëÿ C ýòî òðè
  3837.   ïàðàìåòðà, à äëÿ C-- øåñòü.  C-- ïàðàìåòðû ïåðåäàþòñÿ ïî óìîë÷àíèþ â
  3838.   ñëåäóþùåì ïîðÿäêå: <b>1-é - AX/EAX, 2-é - BX/EBX, 3 - CX/ECX, 4 - DX/EDX, 5 -
  3839.   DI/EDI, 6 - SI/ESI</b>. Ïàðàìåòðû òèïîâ char èëè byte ìîãóò ïåðåäàâàòüñÿ â
  3840.   êîëè÷åñòâå íå áîëåå 4 èëè òîëüêî â ïåðâûõ 4 ðåãèñòðàõ: <b>1 - AL, 2 - BL, 3 -
  3841.   CL, 4 - DL</b>. Ýòîò ïîðÿäîê ðåãèñòðîâ ìîæåò áûòü èçìåíåí, åñëè ÿâíî óêàçàòü
  3842.   åãî ëèáî ïðè îáúÿâëåíèè ïðîöåäóðû, ëèáî ïðè åå îïðåäåëåíèè. Ïðîöåäóðû òèïà
  3843.   fastcall èíîãäà åùå íàçûâàþò ðåãèñòðîâûìè.
  3844.  
  3845.        C-- ïî óìîë÷àíèþ, åñëè èìÿ ïðîöåäóðû íàïèñàíî áîëüøèìè áóêâàìè, òî
  3846.   ñ÷èòàåòñÿ, ÷òî ýòà ïðîöåäóðà èìååò òèï âûçîâà <b>fastcall</b>. Åñëè æå â èìåíè
  3847.   ïðîöåäóðû åñòü õîòÿ áû îäíà ìàëåíüêàÿ áóêâà, òî ïî óìîë÷àíèþ ñ÷èòàåòñÿ, ÷òî
  3848.   ýòà ïðîöåäóðà èìååò òèï âûçîâà <b>pascal</b>, çà èñêëþ÷åíèåì ïðîãðàìì
  3849.   êîìïèëèðóåìûõ ñ êëþ÷îì <b>/w32 /w32c</b> èëè <b>/DLL</b>.  íèõ ïî óìîë÷àíèþ ïðèìåíÿåòñÿ
  3850.   òèï âûçîâà ïðîöåäóð <b>stdcall</b>. Åñëè æå Âû õîòèòå èçìåíèòü òèï âûçîâà ïðîöåäóð
  3851.   èç ïî óìîë÷àíèþ íà ëþáîé äðóãîé, òî ýòó ïðîöåäóðó íàäî îáÿçàòåëüíî îáúÿâèòü
  3852.   ñ óêàçàíèåì òèïà æåëàåìîãî âûçîâà.
  3853.  
  3854.       Îáúÿâëåíèå ïðîöåäóð ââåäåíî äëÿ òîãî, ÷òîáû ñîîáùàòü êîìïèëÿòîðó î
  3855.   òèïå âîçâðàòà èç ïðîöåäóð, ñïîñîáå ïåðåäà÷è ïàðàìåòðîâ ïðîöåäóðå è èõ ÷èñëå.
  3856. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3857.  
  3858.  
  3859. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.2>
  3860.   11.2 Ñòåêîâûå ïðîöåäóðû.
  3861. </A></B></FONT><FONT FACE="Courier">
  3862.  
  3863.       Ñòåêîâûå ïðîöåäóðû ïî óìîë÷àíèþ îáúÿâëÿþòñÿ ïðè ïîìîùè èäåíòèôèêàòîðà,
  3864.   êîòîðûé ñîäåðæèò, ïî êðàéíåé ìåðå, îäèí ñèìâîë ñòðî÷íûõ áóêâ (áóêâ íèæíåãî
  3865.   ðåãèñòðà, ìàëåíüêèõ áóêâ). Òàêèì îáðàçîì, ñòåêîâûå ïðîöåäóðû ëåãêî îòëè÷èìû
  3866.   îò ðåãèñòðîâûõ ïðîöåäóð, ïîñêîëüêó äëÿ èìåí ðåãèñòðîâûõ ïðîöåäóð ñèìâîëû
  3867.   ñòðî÷íûõ áóêâ çàïðåùåíû.
  3868.  
  3869.       Ïàðàìåòðû äëÿ ñòåêîâûõ ïðîöåäóð, åñëè îíè åñòü, ìîãóò èìåòü ëþáîé òèï
  3870.   <b>byte, char, word, int, dword, long</b> èëè <b>float</b>.
  3871.  
  3872.       Ïàðàìåòðû ïåðåäàþòñÿ â ñîîòâåòñòâèè ñ ïðàâèëàìè, ïðèíÿòûìè äëÿ äàííîãî
  3873.   òèïà ïðîöåäóð. Åñëè ïðîöåäóðà íå èìååò îáúÿâëåíèÿ, òî êîìïèëÿòîð íå ñëåäèò
  3874.   çà ÷èñëîì è òèïîì ïåðåäàâàåìûõ ïàðàìåòðîâ.  ýòîì ñëó÷àå ó Âàñ ïîÿâëÿåòñÿ
  3875.   ñâîáîäà â èõ èñïîëüçîâàíèè, íî Âû äîëæíû îñîçíàâàòü è ïîñëåäñòâè
  3876.   íåïðàâèëüíîãî èõ èñïîëüçîâàíèÿ.
  3877.  
  3878.       Â ñïèñêå ïàðàìåòðîâ äëÿ êàæäîãî ïàðàìåòðà óêàçûâàåòñÿ åãî òèï.
  3879.   Ïàðàìåòðû îäíîãî òèïà, èäóùèå ïîäðÿä, ðàçäåëÿþòñÿ çàïÿòûìè. Ôîðìàëüíûå
  3880.   ïàðàìåòðû ðàçíîãî òèïà â îáúÿâëåíèè ôóíêöèè ðàçäåëÿþòñÿ ñèìâîëîì <b>;</b>.
  3881.  
  3882.       Â ñëåäóþùåì ïðèìåðå ñòåêîâàÿ ïðîöåäóðà âîçâðàùàåò ñóììó âñåõ ñâîèõ
  3883.   ïàðàìåòðîâ (èìåþùèõ ðàçëè÷íûå òèïû) êàê âåëè÷èíó òèïà word:
  3884.  
  3885.         word add_them_all (int a,b,c; byte d,e; word x,y)
  3886.         {
  3887.         return( a+b+c+d+e+x+y );
  3888.         }
  3889.  
  3890.       Ðàíåå C-- äåëàë âûçîâû ñòåêîâûõ ïðîöåäóð ëèøü â ñòèëå <b>pascal</b>.
  3891.   Ïðåèìóùåñòâîì ýòîãî ñïîñîáà âûçîâà ïðîöåäóð ÿâëÿåòñÿ êîìïàêòíîñòü è áîëåå
  3892.   ïðîñòîé ìåõàíèçì ãåíåðàöèè êîäà. Ê íåäîñòàòêàì, à ñîîòâåòñòâåííî è
  3893.   ïðåèìóùåñòâàì Ñ-ñòèëÿ, ìîæíî îòíåñòè æåñòêóþ ïðèâÿçàííîñòü ïàñêàëåâñêèõ
  3894.   ïðîöåäóð ê ÷èñëó è òèïó ïåðåäàâàåìûõ ïàðàìåòðîâ (ïîïðîáóéòå ïðè âûçîâå
  3895.   ïðîöåäóðû â ñòèëå <b>pascal</b> îïóñòèòü îäèí ïàðàìåòð è ïîëó÷èòå 100% çàâèñàíèå).
  3896.   Íàïîìíþ íåêîòîðûå òåõíè÷åñêèå äåòàëè îáîèõ òèïîâ âûçîâîâ ïðîöåäóð.
  3897.  
  3898.   Êàäð ñòåêà C-- äëÿ áëèçêèõ ïðîöåäóð ñòåêà â ñòèëå pascal:
  3899.        ÀÄÐÅÑ
  3900.         ...
  3901.       BP + FFFE ïðåäïîñëåäíèé áàéòà ëîêàëüíûõ ïåðåìåííûõ
  3902.       BP + FFFF ïîñëåäíèé áàéò ëîêàëüíûõ ïåðåìåííûõ
  3903.       BP + 0000 Ñîõðàíåííûé BP
  3904.       BP + 0002 RET àäðåñ
  3905.       BP + 0004 ïîñëåäíåå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ (åñëè îíè
  3906.                 åñòü)
  3907.       BP + 0006 ïðåäïîñëåäíåå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ
  3908.        ...
  3909.       BP + nnnn ïåðâîå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ
  3910.  
  3911.       Îñâîáîæäåíèå ñòåêà îò ïåðåäàííûõ ïðîöåäóðå ïàðàìåòðîâ ïðîèñõîäèò ïðÿìî
  3912.   â ñàìîé ïðîöåäóðå êîìàíäîé <b>RET nnnn</b> - ãäå nnnn ÿâëÿåòñÿ ðàçìåðîì ïåðåäàííûõ
  3913.   â ñòåê ïàðàìåòðîâ.
  3914.  
  3915.   Êàäð ñòåêà C-- äëÿ áëèçêèõ ïðîöåäóð ñòåêà â ñòèëå ñè:
  3916.        ÀÄÐÅÑ
  3917.         ...
  3918.       BP + FFFE ïðåäïîñëåäíèé áàéòà ëîêàëüíûõ ïåðåìåííûõ
  3919.       BP + FFFF ïîñëåäíèé áàéò ëîêàëüíûõ ïåðåìåííûõ
  3920.       BP + 0000 Ñîõðàíåííûé BP
  3921.       BP + 0002 RET àäðåñ
  3922.       BP + 0004 ïåðâîå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ (åñëè îíè
  3923.                 åñòü)
  3924.       BP + 0006 âòîðîå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ
  3925.        ...
  3926.       BP + nnnn ïîñëåäíåå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ
  3927.  
  3928.       Ïðîöåäóðû â ñòèëå <b>Ñ</b> çàêàí÷èâàþòñÿ êîìàíäîé <b>RET</b>. Îñâîáîæäåíèå ñòåêà îò
  3929.   ïàðàìåòðîâ ïðîèñõîäèò â òîì ìåñòå îòêóäà áûëà âûçâàíà ïðîöåäóðà. Îáû÷íî ýòî
  3930.   äåëàåòñÿ êîìàíäîé <b>ADD SP,nnnn</b>. Ò.å. êîìïèëÿòîð ìîæåò òî÷íî çíàòü ñêîëüêî è
  3931.   êàêèõ ïàðàìåòðîâ Âû ïåðåäàåòå â äàííîì ñëó÷àå ïðîöåäóðå è ñîîòâåòñòâåííî
  3932.   îñâîáîæäàåò ñòåê ïîñëå çàâåðøåíèÿ ïðîöåäóðû. Ýòî î÷åíü óäîáíî äëÿ ïðîöåäóð,
  3933.   êîòîðûå ìîãóò îáðàáàòûâàòü ïåðåìåííîå ÷èñëî ïàðàìåòðîâ (íàïðèìåð, ïðîöåäóðû
  3934.   òèïà printf).
  3935.  
  3936.       Îáúÿâëåíèå ïðîöåäóðû èìååò ñëåäóþùèé âèä:
  3937.  
  3938.     rettype modif procname();
  3939.  
  3940.       Ïåðâûì èäåò íåîáÿçàòåëüíûé òèï âîçâðàòà èç ïðîöåäóð. Ïî óìîë÷àíèþ îí
  3941.   äëÿ 16-áèòíûõ ïðîãðàìì ðàâåí word, à äëÿ 32-áèòíûõ dword. Çàòåì äîëæåí èäòè
  3942.   òàêæå íåîáÿçàòåëüíûé ìîäèôèêàòîð. Ïî óìîë÷àíèþ âñå ñòåêîâûå ïðîöåäóðû â C--
  3943.   (çà èñêëþ÷åíèåì ðåæèìà êîìïèëÿöèè ïðîãðàìì ïîä Windows, ãäå ïî óìîë÷àíèþ
  3944.   äåéñòâóåò ñòèëü âûçîâà ïðîöåäóð <b>stdcall</b>) èìåþò ñòèëü <b>pascal</b>. Äàëåå èäåò èì
  3945.   ïðîöåäóðû ñî ñêîáêàìè, êîòîðûå ÿâëÿþòñÿ ïðèçíàêîì òîãî ÷òî Âû îáúÿâëÿåòå
  3946.   ïðîöåäóðó, à íå ïåðåìåííóþ. Çàâåðøàåò îáúÿâëåíèå ñèìâîë òî÷êà ñ çàïÿòîé.
  3947.  
  3948.       Ïðè îáúÿâëåíèè ïðîöåäóð â C-- ïðîïèñûâàòü ïàðàìåòðû ïðîöåäóðû
  3949.   íåîáÿçàòåëüíî (òîãäà êîìïèëÿòîð íå áóäåò êîíòðîëèðîâàòü ÷èñëî è òèï
  3950.   ïåðåäàâàåìûõ ïàðàìåòðîâ), íî åñëè Âû èõ âñòàâèòå, òî âêëþ÷èòñÿ ìåõàíèçì
  3951.   êîíòðîëÿ çà ÷èñëîì è òèïîì ïàðàìåòðîâ.
  3952. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  3953.  
  3954.  
  3955. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.3>
  3956.   11.3 Ðåãèñòðîâûå ïðîöåäóðû.
  3957. </A></B></FONT><FONT FACE="Courier">
  3958.  
  3959.       Ðåãèñòðîâûå ïðîöåäóðû îïðåäåëÿþòñÿ, ïî óìîë÷àíèþ, ïðè ïîìîùè
  3960.   èäåíòèôèêàòîðà, êîòîðûé íå ñîäåðæèò ñèìâîëîâ ñòðî÷íûõ áóêâ. Èëè æå ÿâíûì
  3961.   óêàçàíèåì ÷òî ýòî ðåãèñòðîâàÿ ïðîöåäóðà ñ ïîìîùüþ êëþ÷åâîãî ñëîâà <b>fastcall</b>.
  3962.  
  3963.       Êàê óæå áûëî ñêàçàíî, ïàðàìåòðû (åñëè îíè åñòü) äëÿ ðåãèñòðîâîé
  3964.   ïðîöåäóðû ïåðåäàþòñÿ ÷åðåç ðåãèñòðû. Ðåãèñòðîâûå ïðîöåäóðû ìîãóò èìåòü íå
  3965.   áîëåå 6 ïàðàìåòðîâ. Åñëè ïàðàìåòðû èìåþò òèï int èëè word, ðåãèñòðû ïî
  3966.   óìîë÷àíèþ èñïîëüçóþòñÿ â ñëåäóþùåì ïîðÿäêå: <b>AX, BX, CX, DX, DI, è SI</b>.
  3967.   Ïåðâûå ÷åòûðå ïàðàìåòðà ìîãóò òàêæå èìåòü òèï <b>char</b> èëè <b>byte</b>, â ýòîì ñëó÷àå
  3968.   çàäåéñòâóþòñÿ ðåãèñòðû <b>AL, BL, CL è DL</b> ñîîòâåòñòâåííî. Ëþáîé èç øåñòè
  3969.   ïàðàìåòðîâ ìîæåò èìåòü òèï <b>long, dword</b> èëè <b>float</b>, òîãäà äëÿ íåãî
  3970.   èñïîëüçóåòñÿ ðåãèñòð <b>EAX, EBX, ECX, EDX, EDI</b>, èëè <b>ESI</b>.
  3971.  
  3972.       Â ñëåäóþùåì ïðèìåðå ðåãèñòðîâàÿ ïðîöåäóðà ñ èìåíåì TOGETHER âîçâðàùàåò
  3973.   çíà÷åíèå òèïà word êàê ðåçóëüòàò óìíîæåíèÿ ïåðâîãî ïàðàìåòðà, èìåþùåãî òèï
  3974.   word, íà âòîðîé ïàðàìåòð òîãî æå òèïà:
  3975.  
  3976.            word TOGETHER() /* AX = ïåðâûé ïàðàìåòð, BX = âòîðîé ïàðàìåòð */
  3977.            {
  3978.            return (AX * BX);
  3979.            }
  3980.  
  3981.       Â ñëåäóþùåì ïðèìåðå ðåãèñòðîâàÿ ïðîöåäóðà ñ èìåíåì SHOW_NUM, êîòîðàÿ íå
  3982.   âîçâðàùàåò íèêàêîãî çíà÷åíèÿ, çàòî âûâîäèò íà ýêðàí ïåðâûé ïàðàìåòð
  3983.   (èìåþùèé òèï int), çàòåì ðàçäåëèòåëüíûé çíàê â âèäå äâîåòî÷èÿ <b>:</b>, à çàòåì
  3984.   âòîðîé ïàðàìåòð (èìåþùèé òèï byte) :
  3985.  
  3986.            void SHOW_NUM () /* AX = ïåðâîå ÷èñëî, BL = âòîðîå ÷èñëî */
  3987.            {
  3988.            $ PUSH BX
  3989.            WRITEINT (int AX);
  3990.            WRITE (':');
  3991.            $ POP BX
  3992.            WRITEWORD (BL);
  3993.            }
  3994.  
  3995.       Íî åñëè â ïðîöåäóðå ñäåëàòü îáúÿâëåíèå ïîðÿäêà è òèïîâ èñïîëüçóåìûõ
  3996.   ðåãèñòðîâ, òî âîçìîæíî ïðîèçâîëüíîå èñïîëüçîâàíèå ðåãèñòðîâ. Áîëåå ïîäðîáíî
  3997.   îá ýòîì ìîæíî ïî÷èòàòü â ðàçäåëå îá îáúÿâëåíèÿõ ïàðàìåòðîâ â ðåãèñòðîâûõ
  3998.   ïðîöåäóðàõ.
  3999.  
  4000.       Äëÿ òîãî, ÷òîáû èñïîëüçîâàòü ðåãèñòðîâóþ ïðîöåäóðó êàê ìàêðîêîìàíäó,
  4001.   îíà äîëæíà áûòü îáúÿâëåíà êàê äèíàìè÷åñêàÿ ïðîöåäóðà. Äèíàìè÷åñêèå
  4002.   ïðîöåäóðû îïèñàíû â ñëåäóþùåì ïîäðàçäåëå.
  4003. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4004.  
  4005.  
  4006. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.4>
  4007.   11.4 Äèíàìè÷åñêèå ïðîöåäóðû.
  4008. </A></B></FONT><FONT FACE="Courier">
  4009.  
  4010.       Äèíàìè÷åñêèå ïðîöåäóðû - ïðîöåäóðû, êîòîðûå îïðåäåëåíû, íî âñòàâëÿþòñÿ
  4011.   â êîä ïðîãðàììû, òîëüêî åñëè åñòü âûçîâ. Äèíàìè÷åñêèå ïðîöåäóðû ìîãóò
  4012.   èñïîëüçîâàòüñÿ êàê ìàêðîêîìàíäû.
  4013.  
  4014.       Îïðåäåëåíèå äèíàìè÷åñêîé ïðîöåäóðû íà÷èíàåòñÿ ñ ñèìâîëà äâîåòî÷èÿ ':'.
  4015.  
  4016.   Ïðèìåð äèíàìè÷åñêîé ïðîöåäóðû ñòåêà:
  4017.  
  4018.           : void setvideomode (byte mode)
  4019.           {
  4020.           AL = mode;
  4021.           AH = 0;
  4022.           $ INT 0x10
  4023.           }
  4024.  
  4025.   Ïðèìåð äèíàìè÷åñêîé ðåãèñòðîâîé ïðîöåäóðû:
  4026.  
  4027.           : int ABS () /* AX = ÷èñëî, àáñîëþòíîå çíà÷åíèå êîòîðîãî èùåòñÿ*/
  4028.           {
  4029.           IF (int AX < 0)
  4030.                -AX;
  4031.           }
  4032. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4033.  
  4034.  
  4035. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.4.1>
  4036.     11.4.1 Óñòàíîâêà äèíàìè÷åñêîé ïðîöåäóðû â îïðåäåëåííîå ìåñòî ïðîãðàììû.
  4037. </A></B></FONT><FONT FACE="Courier">
  4038.  
  4039.         Äèíàìè÷åñêèå ïðîöåäóðû, åñëè îíè íå èñïîëüçóþòñÿ êàê ìàêðîñû è åñëè
  4040.     îíè áûëè âîñòðåáîâàíû â ïðîãðàììå, âñòàâëÿþòñÿ â êîä ïðîãðàììû â ñàìîì
  4041.     êîíöå êîìïèëÿöèè.  êàêîì òî÷íî ìåñòå Âàøåé ïðîãðàììû îíè îêàæóòñÿ óçíàòü
  4042.     íåâîçìîæíî. Åñëè æå Âàì íåîáõîäèìî, ÷òîáû êàêàÿ-òî äèíàìè÷åñêàÿ ïðîöåäóðà
  4043.     íàõîäèëàñü â êîíêðåòíîì ìåñòå ïðîãðàììû, òî ýòî ìîæíî ñäåëàòü òàêèì
  4044.     îáðàçîì:
  4045.  
  4046.     :void proc ( int par1, par2)
  4047.     {
  4048.        ...
  4049.     }
  4050.  
  4051.         Ìû èìååì äèíàìè÷åñêóþ ïðîöåäóðó, êîä êîòîðîé áûë áû ðàñïîëîæåí ðàíåå
  4052.     êîäà îáû÷íîé ïðîöåäóðû íàøåé ïðîãðàììû. Äëÿ ýòîãî ïåðåä îïðåäåëåíèåì ýòîé
  4053.     ïðîöåäóðû íàäî íàïèñàòü òàêóþ ñòðîêó:
  4054.  
  4055.     @ void proc ();
  4056.  
  4057.          èòîãå äèíàìè÷åñêàÿ ïðîöåäóðà áóäåò âñòàâëåíà â êîä ïðîãðàììû íå â
  4058.     êîíöå åå, êàê îáû÷íî, à â ìåñòå, ãäå áóäåò ðàñïîëîæåíà ýòà ñòðîêà. Åñëè
  4059.     äèíàìè÷åñêàÿ ïðîöåäóðà èìååò ïàðàìåòðû, òî ïðîïèñûâàòü ýòè ïàðàìåòðû
  4060.     íåîáÿçàòåëüíî.
  4061.  
  4062.         Â êîìïèëÿòîðå åñòü åùå áîëåå ìîùíîå ñðåäñòâî, ïîçâîëÿþùåå âñå
  4063.     äèíàìè÷åñêèå îáúåêòû ( ïðîöåäóðû, ïåðåìåííûå, ñòðóêòóðû ) ðàñïîëîæèòü â
  4064.     óêàçàííîì ìåñòå, à íå â êîíöå ïðîãðàììû, êàê îáû÷íî. Ýòî äèðåêòèâà
  4065.     <b>#setdinproc</b>. Âñòðåòèâ ýòó äèðåêòèâó, êîìïèëÿòîð íåìåäëåííî ðàñïîëîæèò âñå
  4066.     èçâåñòíûå åìó íà ýòîò ìîìåíò äèíàìè÷åñêèå îáúåêòû â ìåñòå îáúÿâëåíèÿ ýòîé
  4067.     äèðåêòèâû. Ïîñëåäóþùèå äèíàìè÷åñêèå îáúåêòû áóäóò ðàñïîëàãàòüñÿ êàê
  4068.     îáû÷íî, â êîíöå ïðîãðàììû, åñëè êîíå÷íî, íå áóäåò ïîâòîðíî ïðèìåíåíà
  4069.     äèðåêòèâà <b>#setdinproc</b>.
  4070.  
  4071.         Ýòî ìîæåò áûòü ïðèìåíåíî è áûòü ïîëåçíûì ïðè ñîçäàíèè ðåçèäåíòíûõ
  4072.     ïðîãðàìì (TSR) è äðàéâåðîâ óñòðîéñòâ.
  4073. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4074.  
  4075.  
  4076. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.5>
  4077.   11.5 inline-ïðîöåäóðû.
  4078. </A></B></FONT><FONT FACE="Courier">
  4079.  
  4080.       inline-ïðîöåäóðàìè ìîãóò áûòü äèíàìè÷åñêèå ïðîöåäóðû, êîòîðûå ìîæíî
  4081.   èñïîëüçîâàòü êàê ìàêðîñû. Íî â îòëè÷èå îò ìàêðîñîâ, inline-ïðîöåäóðû, ïðè
  4082.   âêëþ÷åííîé îïòèìèçàöèè íà ñêîðîñòü, àâòîìàòè÷åñêè âñòàâëÿþòñÿ â êîä, à ïðè
  4083.   îïòèìèçàöèè êîäà íà ðàçìåð, äåëàåòñÿ âûçîâ èõ, êàê äèíàìè÷åñêèõ ïðîöåäóð.
  4084.  
  4085.       Íî èíîãäà áûâàåò íóæíî ïðè âêëþ÷åííîé îïòèìèçàöèè íà ðàçìåð êîäà, ÷òîáû
  4086.   ïðîöåäóðû âñòàâëÿëèñü â êîä, à íå äåëàëñÿ èõ âûçîâ. Äëÿ ýòèõ öåëåé ââåäåíà
  4087.   äèðåêòèâà <b>#inline TRUE</b>. Ýòîé æå äèðåêòèâîé ( <b>#inline FALSE</b> ), ìîæíî ïðè
  4088.   îïòèìèçàöèè íà ñêîðîñòü äåëàòü âûçîâû ïðîöåäóð, âìåñòî èõ âñòàâêè.
  4089.  
  4090.       Âàæíî ïîìíèòü, ÷òî ñòàòóñ äèðåêòèâû <b>#inline</b> àâòîìàòè÷åñêè ìåíÿåòñÿ ïðè
  4091.   ñìåíå ðåæèìà îïòèìèçàöèè. Ïðè óñòàíîâêå îïòèìèçàöèè íà ñêîðîñòü ñòàòóñ
  4092.   äèðåêòèâû <b>#inline</b> óñòàíàâëèâàåòñÿ â <b>TRUE</b>, à ïðè ñìåíå ðåæèìà îïòèìèçàöèè ïî
  4093.   ðàçìåðó êîäà, óñòàíàâëèâàåòñÿ â <b>FALSE</b>. Ïîýòîìó ïðèìåíÿéòå äèðåêòèâó <b>#inline</b>
  4094.   ëèøü ïîñëå ñìåíû ðåæèìà îïòèìèçàöèè.
  4095.  
  4096.       Äèðåêòèâû ìåíÿþùèå ðåæèì îïòèìèçàöèè <b>#codesize, #speed</b> è äèðåêòèâà
  4097.   <b>#inline</b>, îáúÿâëåííûå âíóòðè ïðîöåäóðû ðàñïðîñòðàíÿþòñÿ òîëüêî íà îñòàâøóþñÿ
  4098.   ÷àñòü ïðîöåäóðû, ò.å. îíè ñòàíîâÿòñÿ ëîêàëüíûìè. Äëÿ òîãî ÷òîáû èçìåíåíèÿ
  4099.   áûëè ãëîáàëüíûìè ýòè äèðåêòèâû íàäî îáúÿâëÿòü âíå òåëà ïðîöåäóðû.
  4100.  
  4101.       Äëÿ òîãî ÷òîáû îïðåäåëèòü inline-ïðîöåäóðó, íàäî â ïåðâîé ñòðîêå ñ
  4102.   èìåíåì ïðîöåäóðû âìåñòî ñèìâîëà äèíàìè÷åñêîé ïðîöåäóðû <b>(:)</b> íàïèñàòü
  4103.   êëþ÷åâîå ñëîâî <b>inline</b>. Ïðèìåð îïðåäåëåíèÿ inline-ïðîöåäóðû:
  4104.  
  4105.   inline int fastcall abs(AX)
  4106.   {
  4107.       IF ( int AX < 0 ) -AX ;
  4108.   }
  4109. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4110.  
  4111.  
  4112. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.5.1>
  4113.     11.5.1 Äðóãîå ïðèìåíåíèå inline.
  4114. </A></B></FONT><FONT FACE="Courier">
  4115.  
  4116.         Êëþ÷åâîå ñëîâî <b>inline</b> èìååò â ïðîöåäóðàõ è äðóãîå ïðèìåíåíèå. Åñëè
  4117.     ýòî ñëîâî ðàñïîëîæåíî ïåðåä íà÷àëîì áëîêà ïðîöåäóðû, òî äëÿ òàêîé
  4118.     ïðîöåäóðû íå ñîçäàåòñÿ êàäð ñòåêà è íå ãåíåðèðóåòñÿ çàâåðøàþùèé ïðîöåäóðó
  4119.     <b>ret</b>. Ïðèìåð:
  4120.  
  4121.     void PROC ()
  4122.     inline
  4123.     {
  4124.       ...
  4125.     }
  4126.  
  4127.         Òàêèå ïðîöåäóðû íå äîëæíû ñîäåðæàòü ëîêàëüíûõ ïåðåìåííûõ. Åñëè
  4128.     ïðîöåäóðà ÿâëÿåòñÿ ðåãèñòðîâîé (òèï <b>fastcall</b>), òî ñ ïåðåäà÷åé åé
  4129.     ïàðàìåòðîâ íåò ïðîáëåì. Åñëè æå ïðîöåäóðà ÿâëÿåòñÿ ñòåêîâîé, òî ïåðåäàòü
  4130.     â òàêóþ ïðîöåäóðó ïàðàìåòðû Âû ìîæåòå, íî âîñïîëüçîâàòüñÿ ýòèìè
  4131.     ïàðàìåòðàìè èñïîëüçóÿ èõ èìåíà, Âû óæå íå ñìîæåòå. Ýòî ïðîèñõîäèò ïîòîìó,
  4132.     ÷òî â ýòèõ ïðîöåäóðàõ êàäð ñòåêà íå ôîðìèðóåòñÿ. Ïðèìåð:
  4133.  
  4134.     void proc (int par1, par2)
  4135.     inline
  4136.     {
  4137.       AX=par1; /* êîìïèëÿòîð îáðàòèòñÿ ñ ïàðàìåòðó 'par1' ÷åðåç ðåãèñòð BP.
  4138.                   Íî òàê êàê êàäð ñòåêà íå áûë ñîçäàí, ïðè âûïîëíåíèè ýòîãî
  4139.                   êîäà ïðîãðàììà áóäåò ðàáîòàòü íå ïðàâèëüíî. */
  4140.        ...
  4141.     }
  4142.  
  4143.         Âñòðåòèâ òàêîå îïðåäåëåíèå ïðîöåäóðû, êîìïèëÿòîð âûäàñò ïðåäóïðåæäåíèå
  4144.     î òîì, ÷òî â òàêèõ ïðîöåäóðàõ èñïîëüçîâàòü ëîêàëüíûå è ïàðàìåòðè÷åñêèå
  4145.     ïåðåìåííûå íåëüçÿ.
  4146. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4147.  
  4148.  
  4149. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.6>
  4150.   11.6 Ïðîöåäóðû îáðàáîòêè ïðåðûâàíèé.
  4151. </A></B></FONT><FONT FACE="Courier">
  4152.  
  4153.       Ïðîöåäóðû îáðàáîòêè ïðåðûâàíèé îïðåäåëÿþòñÿ ñëåäóþùèì ñïîñîáîì:
  4154.  
  4155.           interrupt procedure_name ()
  4156.           {
  4157.           // put code here (çäåñü äîëæåí áûòü êîä îáðàáîòêè)
  4158.           }
  4159.  
  4160.       Ïðîöåäóðû îáðàáîòêè ïðåðûâàíèé íå ñîõðàíÿþò íèêàêèõ ðåãèñòðîâ
  4161.   àâòîìàòè÷åñêè, è íèêàêèå ðåãèñòðû ñàìè ïî ñåáå íå çàãðóæàþòñÿ ïåðåä
  4162.   ïåðåäà÷åé óïðàâëåíèÿ îáðàáîò÷èêó ïðåðûâàíèÿ, ñëåäîâàòåëüíî, íà Âàøåé
  4163.   ñîâåñòè ñîõðàíåíèå çíà÷åíèé ðåãèñòðîâ â ñòåêå è ïîñëåäóþùèé èõ âîçâðàò, à
  4164.   òàêæå çàãðóçêà ðåãèñòðà DS íóæíûì çíà÷åíèåì.
  4165.  
  4166.       Âîò ïðèìåð îáðàáîò÷èêà ïðåðûâàíèÿ, êîòîðûé ñîõðàíÿåò çíà÷åíèÿ âñåõ
  4167.   ðåãèñòðîâ è çàãðóæàåò ðåãèñòð DS:
  4168.  
  4169.        interrupt safe_handle ()
  4170.        {
  4171.        $ PUSH DS
  4172.        $ PUSH ES
  4173.        $ PUSHA   // äëÿ âûïîëíåíèÿ ýòîé êîìàíäû íóæåí ïðîöåññîð íå õóæå 80286
  4174.        DS = CS;  // çäåñü DS çàãðóæàåòñÿ äëÿ ðàáîòû ñ ìîäåëüþ ïàìÿòè òèïà tiny
  4175.  
  4176.  
  4177.        /* do your thing here (çäåñü âû äåëàåòå ñâîþ îáðàáîòêó)*/
  4178.  
  4179.        $ POPA   // äëÿ âûïîëíåíèÿ ýòîé êîìàíäû íóæåí ïðîöåññîð íå õóæå 80286
  4180.        $ POP ES
  4181.        $ POP DS
  4182.        }
  4183.  
  4184.       Ïðè çàâåðøåíèè ïðîöåäóðû ïðåðûâàíèÿ áóäåò àâòîìàòè÷åñêè ñãåíåðèðîâàíà
  4185.   èíñòðóêöèÿ âûõîäà èç îáðàáîò÷èêà ïðåðûâàíèÿ - IRET.
  4186. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4187.  
  4188.  
  4189. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.7>
  4190.   11.7 Çàìåíà return íà goto.
  4191. </A></B></FONT><FONT FACE="Courier">
  4192.  
  4193.       Â íåêîòîðûõ ñèòóàöèÿõ, ïðè êîìïèëÿöèè ïðîãðàììû, îïåðàòîð <b>return</b>
  4194.   áóäåò çàìåíÿòüñÿ íà <b>goto</b>. Ýòî ïðîèñõîäèò ïðè ðàçðåøåííîé îïòèìèçàöèè ïî
  4195.   ðàçìåðó êîäà äëÿ îïåðàòîðîâ <b>return</b>, êîòîðûå ðàñïîëîæåíû âíóòðè ïðîöåäóðû
  4196.   è, åñòåñòâåííî, åñëè ðàçìåð êîäà äëÿ âûïîëíåíèÿ <b>return</b> áîëüøå, ÷åì ðàçìåð
  4197.   êîäà äëÿ ðåàëèçàöèè <b>goto</b>. Äëÿ äèíàìè÷åñêèõ ïðîöåäóð, êîòîðûå èñïîëüçóþòñÿ
  4198.   êàê ìàêðîñû, òàêàÿ çàìåíà áóäåò ïðîèçâîäèòñÿ âñåãäà. Îïåðàòîð <b>goto</b> áóäåò
  4199.   âûïîëíåí íà êîíåö ïðîöåäóðû, òàì, ãäå áóäåò ðàñïîëàãàòüñÿ åäèíñòâåííûé
  4200.   âûõîä èç ïðîöåäóðû.  äèíàìè÷åñêèõ ïðîöåäóðàõ, èñïîëüçóåìûõ â êà÷åñòâå
  4201.   ìàêðîñîâ, <b>return</b> â êîíöå ïðîöåäóðû áóäåò ïðîïóùåí êîìïèëÿòîðîì.
  4202.  
  4203.       Òàêèì îáðàçîì, ñíÿòî ïîñëåäíåå îãðàíè÷åíèå íà èñïîëüçîâàíèå
  4204.   äèíàìè÷åñêèõ ïðîöåäóð â êà÷åñòâå ìàêðîñîâ. Ëþáàÿ äèíàìè÷åñêàÿ ïðîöåäóðà
  4205.   ìîæåò áûòü èñïîëüçîâàíà êàê ìàêðîñ.
  4206.  
  4207.       Äëÿ îïåðàòîðà <b>goto</b> ñóùåñòâóåò åãî áîëåå êîðîòêèé àíàëîã - <b>GOTO</b>.
  4208.   Äëÿ ïîëó÷åíèÿ áîëåå êîìïàêòíîãî êîäà äëÿ îïåðàòîðà <b>return</b> ââåäåí òàêæå
  4209.   áîëåå êîðîòêèé îïåðàòîð <b>RETURN</b>. Åãî ìîæíî èñïîëüçîâàòü, åñëè îò ìåñòà
  4210.   åãî ïðèìåíåíèÿ äî êîíöà ïðîöåäóðû íàõîäèòñÿ íå áîëåå 128 áàéò. Åñëè Âû
  4211.   áóäåòå èñïîëüçîâàòü <b>RETURN</b> íà áîëüøåì ðàññòîÿíèè äî êîíöà ïðîöåäóðû, òî
  4212.   êîìïèëÿòîð âûäàñò ñîîáùåíèå îá îøèáêå. Ïðè èñïîëüçîâàíèè <b>return</b> íà
  4213.   ðàññòîÿíèè ìåíüøå 128 áàéò äî êîíöà êîäà, êîìïèëÿòîð âûäàñò âàì
  4214.   ïðåäóïðåæäåíèå î âîçìîæíîì èñïîëüçîâàíèè <b>RETURN</b>.
  4215. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4216.  
  4217.  
  4218. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.8>
  4219.   11.8 Âîçâðàùàåìûå çíà÷åíèÿ.
  4220. </A></B></FONT><FONT FACE="Courier">
  4221.  
  4222.       Âîçâðàùàåìûå èç ôóíêöèé çíà÷åíèÿ ðàñïîëàãàþòñÿ â ðåãèñòðàõ.  òàáëèöå
  4223.   ïîêàçàíî, êàêîé ðåãèñòð èñïîëüçóåòñÿ äëÿ êàæäîãî èç âîçâðàùàåìûõ òèïîâ:
  4224.  
  4225.       --------------------------------------------
  4226.       | âîçâðàùàåìûé òèï |  èñïîëüçóåìûé ðåãèñòð |
  4227.       --------------------------------------------
  4228.       |        byte      |        AL             |
  4229.       |        word      |        AX             |
  4230.       |        dword     |        EAX            |
  4231.       |        char      |        AL             |
  4232.       |        int       |        AX             |
  4233.       |        long      |        EAX            |
  4234.       |        float     |        EAX            |
  4235.       --------------------------------------------
  4236.  
  4237.       Ñàìûé ïðîñòîé ñïîñîá âåðíóòü çíà÷åíèå èç ôóíêöèè ñîñòîèò â òîì, ÷òîáû
  4238.   èñïîëüçîâàòü êîìàíäó return(), íî âìåñòî ýòîãî ìîæíî íàïðÿìóþ çàãðóçèòü
  4239.   âîçâðàùàåìîå çíà÷åíèå â ñîîòâåòñòâóþùèé ðåãèñòð. Íàïðèìåð, ñëåäóþùèå äâå
  4240.   ôóíêöèè âîçâðàùàþò îäíî è òî æå çíà÷åíèå:
  4241.  
  4242.            byte proc_one ()
  4243.            {
  4244.            return (42);
  4245.            }
  4246.  
  4247.            byte proc_two ()
  4248.            {
  4249.            AL = 42;
  4250.            }
  4251.  
  4252.       Ìíîãèå DOS ôóíêöèè 0x21 ïðåðûâàíèÿ â êà÷åñòâå èíäèêàòîðà óñïåøíîãî
  4253.   âûïîëíåíèÿ èñïîëüçóþò óñòàíîâêó èëè ñáðîñ carry ôëàãà. Èñïîëüçîâàòü ôëàãè
  4254.   ïðîöåññîðà ïðè âîçâðàòå èç ïðîöåäóð ìîæíî è â äðóãèõ ñëó÷àÿõ, êîãäà íàäî
  4255.   èìåòü ñòàòóñ óñïåøíîãî èëè íå óñïåøíîãî âûïîëíåíèÿ ïðîöåäóðû. Ýòî ïîçâîëèò
  4256.   áîëåå ïîëíî èñïîëüçîâàòü âîçìîæíîñòè ïðîöåññîðà è ñîîòâåòñòâåííî óìåíüøèò
  4257.   ðàçìåð êîäà è ïîâûñèò áûñòðîäåéñòâèå ïðîãðàììû.
  4258.  
  4259.       Íàðÿäó ñ ôëàãàìè, ïðè âîçâðàòå èç ïðîöåäóð, ïî ïðåæíåìó îñòàåòñÿ
  4260.   âîçâðàò ðàçëè÷íûõ òèïîâ è ÷åðåç ðåãèñòð <b>AL/AX/EAX</b>. Åñëè äëÿ ïðîöåäóðû
  4261.   îáúÿâëåíî, ÷òî îíà èìååò òèï âîçâðàòà <b>int è CARRYFLAG</b>, òî ïðè èñïîëüçîâàíèè
  4262.   òàêîé ïðîöåäóðû â îïåðàöèÿõ ñðàâíåíèÿ <b>IF, WHILE...</b> áóäåò äåëàòüñÿ ïðîâåðêà
  4263.   carry ôëàãà, à íå ñðàâíåíèå ðåãèñòðà AX. Ïðèìåð èñïîëüçîâàíèÿ âîçâðàòà
  4264.   ôëàãîâ èç ïðîöåäóð:
  4265.  
  4266.   int CARRYFLAG FOPEN();        // îáúÿâëåíèå ïðîöåäóðû
  4267.  
  4268.   void proc()
  4269.   {
  4270.     IF ( FOPEN(name,0) ) Error ( "Not open file" );
  4271.   }
  4272.  
  4273.       Âàðèàíòû äîïóñòèìîãî ñèíòàêñèñà äëÿ èñïîëüçîâàíèÿ âîçâðàòà ôëàãà:
  4274.  
  4275.   IF ( ! FOPEN() )...
  4276.   IF ( @ FOPEN() )...
  4277.   IF ( ! @ FOPEN() )...
  4278.   IF ( handl = FOPEN() )...
  4279.   IF ( handl = @ FOPEN() )...
  4280.   IF ( ! handl = FOPEN() )...
  4281.   IF ( ! handl = @ FOPEN() )...
  4282.  
  4283.       À âîò âàðèàíòû, â êîòîðûõ, íåñìîòðÿ íà òî, ÷òî äëÿ ïðîöåäóðû îáúÿâëåí
  4284.   âîçâðàò ôëàãà, áóäåò ïðîèçâîäèòüñÿ ñðàâíåíèå ðåãèñòðà AX:
  4285.  
  4286.   IF ( FOPEN() == 5 )...        // ïðîèçâîäèòñÿ ñðàâíåíèå
  4287.   IF ( FOPEN() + 2 )...   // ðåçóëüòàò ïðîöåäóðû ïîäâåðãàåòñÿ äàëüíåéøåìó
  4288.                           // âû÷èñëåíèþ, â ðåçóëüòàòå êîòîðîãî ôëàãè áóäóò
  4289.                         // èçìåíåíû.
  4290. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4291.  
  4292.  
  4293. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.9>
  4294.   11.9 Îáúÿâëåíèå ïàðàìåòðîâ â ðåãèñòðîâûõ ïðîöåäóðàõ.
  4295. </A></B></FONT><FONT FACE="Courier">
  4296.  
  4297.       Ðàíåå êàæäîìó ïàðàìåòðó ðåãèñòðîâîé ïðîöåäóðû ñîîòâåòñòâîâàë ñòðîãî
  4298.   îïðåäåëåííûé ðåãèñòð. Íàïðèìåð, äëÿ ïåðåìåííûõ òèïà int èëè word ïåðâûé
  4299.   ïàðàìåòð ïåðåäàâàëñÿ ÷åðåç ðåãèñòð AX, 2-é - BX, 3-é - CX, 4-é - DX, 5-é -
  4300.   DI, 6-é - SI. Ïîýòîìó, åñëè Âàì áûëî íåîáõîäèìî ïåðåäàòü òîëüêî îäèí
  4301.   ïàðàìåòð ÷åðåç ðåãèñòð SI, òî ïðèõîäèëîñü ïåðåä íèì ïèñàòü ïÿòü çàïÿòûõ.
  4302.   Âîò êàê, íàïðèìåð, âûãëÿäèò âûçîâ ïðîöåäóðû STRCPY:
  4303.  
  4304.   void main ()
  4305.   {
  4306.     STRCPY ( , , , , #dest, #sourc ) ;
  4307.   }
  4308.  
  4309.       Òåïåðü ðåãèñòðû ìîãóò ðàñïîëàãàòüñÿ ïðè ïåðåäà÷å ïàðàìåòðîâ
  4310.   ïðîèçâîëüíûì îáðàçîì. Íàäî òîëüêî îáúÿâèòü êîìïèëÿòîðó î òîì, êàêîé ðåãèñòð
  4311.   çàêðåïëåí çà êàêèì ïàðàìåòðîì äàííîé ïðîöåäóðû. Ïîñëå òàêîãî îáúÿâëåíèÿ
  4312.   êîìïèëÿòîð áóäåò ñàì ñëåäèòü çà òåì, ÷åðåç êàêîé ðåãèñòð ïåðåäàâàòü
  4313.   ïàðàìåòð ïðîöåäóðå, åãî ðàçìåðíîñòüþ è ÷èñëîì ïåðåäàâàåìûõ ïàðàìåòðîâ. Âîò
  4314.   êàê áóäåò âûãëÿäåòü îáúÿâëåíèå è èñïîëüçîâàíèå ïðîöåäóðû STRCPY:
  4315.  
  4316.   void STRCPY ( DI, SI ) ;      //ýòî îáúÿâëåíèå ïðîöåäóðû
  4317.  
  4318.   void main ()
  4319.   {
  4320.     STRCPY ( #dest, #sourc )//à ýòî âûçîâ ïðîöåäóðû
  4321.   }
  4322.  
  4323.       Ìîæíî íå äåëàòü îáúÿâëåíèÿ ïðîöåäóðû, à óêàçàòü ðàñïîëîæåíèå ðåãèñòðîâ
  4324.   â çàãîëîâêå ïðîöåäóðû. Íî òîãäà òàêàÿ ïðîöåäóðà äîëæíà âûçûâàòüñÿ òîëüêî
  4325.   ïîñëå åå îïðåäåëåíèÿ. Âîò ïðèìåð ïðîöåäóðû âûâîäÿùåé íà ýêðàí íåñêîëüêî
  4326.   îäèíàêîâûõ ñèìâîëîâ:
  4327.  
  4328.   void PUTNCHAR(AL,CX,BL,BH)
  4329.   /* 1 ïàðàìåòð â AL - êîä ñèìâîëà, êîòîðûé áóäåò âûâåäåí
  4330.      2 ïàðàìåòð â CX - ÷èñëî âûâîäèìûõ ñèìâîëîâ
  4331.      3 ïàðàìåòð â BL - öâåòîâîé àòðèáóò
  4332.      4 ïàðàìåòð â BH - íîìåð âèäåîñòðàíèöû
  4333.   */
  4334.   {
  4335.     AH=9;
  4336.     $INT 0x10
  4337.   }
  4338.  
  4339.       Ïðè îáúÿâëåíèè ðåãèñòðîâîé ïðîöåäóðû ìîæíî òàêæå óêàçûâàòü êàêîé òèï
  4340.   ïåðåìåííîé îæèäàåò ïðîöåäóðà (çíàêîâûé/áåç çíàêîâûé èëè âåùåñòâåííûé). Ïî
  4341.   óìîë÷àíèþ ñ÷èòàåòñÿ áåç çíàêîâûé òèï. Îäíàêî çíàêîâûé òèï óêàçûâàòü åñòü
  4342.   ñìûñë òîëüêî åñëè ïàðàìåòð ïåðåäàåòñÿ ÷åðåç ðåãèñòð <b>AL/AX/EAX</b>. ×åðåç äðóãèå
  4343.   ðåãèñòðû ïåðåìåííàÿ âñåãäà ïåðåäàåòñÿ êàê áåç çíàêîâàÿ. Ïðèìåð îáúÿâëåíèÿ
  4344.   ðåãèñòðîâîé ïðîöåäóðû ñ óêàçàíèåì òèïîâ:
  4345.  
  4346.   int fastcall Exampl( word CX, int AX, DX, float ESI ) ;
  4347.    |    |        |        |         |   |   |
  4348.    |    |        |        |         |   |   |---- 4-é ïàðàì. èìååò òèï float è
  4349.    |    |        |        |         |   |         ïåðåä. ÷åðåç ðåãèñòð ESI.
  4350.    |    |        |        |         |   |-------- 3-é ïàðàì. èìååò ïî óìîë÷.
  4351.    |    |        |        |         |             òèï word è ïåðåä. ÷åðåç DX.
  4352.    |    |        |        |         |------------ 2-é ïàðàì. èìååò òèï int è
  4353.    |    |        |        |                       ïåðåäàåòñÿ ÷åðåç ðåãèñòð AX.
  4354.    |    |        |        |---------------------- 1-é ïàðàì. èìååò òèï word è
  4355.    |    |        |                                ïåðåäàåòñÿ ÷åðåç ðåãèñòð CX.
  4356.    |    |        |------------------------------- Èìÿ îáúÿâëÿåìîé ïðîöåäóðû.
  4357.    |    |---------------------------------------- Ìîäèôèêàòîð, óêàçûâàþùèé, ÷òî
  4358.    |                                              ýòà ïðîö. ÿâë. ðåãèñòðîâîé.
  4359.    |--------------------------------------------- Ïðîöåäóðà âîçâðàùàåò ïåðåìåí.
  4360.                                                                           òèïà int.
  4361.  
  4362.       Åñëè Âû ñäåëàëè îáúÿâëåíèå ðåãèñòðîâ ïðîöåäóðû, òî êîìïèëÿòîð áóäåò
  4363.   ñòðîãî ñëåäèòü çà êîëè÷åñòâîì óêàçàííûõ ïàðàìåòðîâ ïðè âûçîâå ýòîé
  4364.   ïðîöåäóðû è âûäàâàòü ñîîáùåíèÿ îá îøèáêå, åñëè èõ áóäåò ìåíüøå èëè áîëüøå.
  4365.   Ñ îäíîé ñòîðîíû ýòî õîðîøî - åñòü êîíòðîëü çà òåì, ÷òî Âû íè÷åãî íå çàáûëè
  4366.   èëè íå äîáàâèëè ëèøíåãî ïðè âûçîâå ïðîöåäóðû. Ñ äðóãîé ñòîðîíû èíîãäà
  4367.   áûâàþò íåîáÿçàòåëüíûå ïàðàìåòðû, à èõ òåïåðü ïðèäåòñÿ ïðîïèñûâàòü. Íî åñëè
  4368.   Âû ïðè âûçîâå ïðîöåäóðû íå óêàæåòå íè îäíîãî ïàðàìåòðà, òî êîìïèëÿòîð íå
  4369.   áóäåò Âàì âûäàâàòü ñîîáùåíèå îá îøèáêå.  Ýòî äàåò Âàì âîçìîæíîñòü
  4370.   ïðîèíèöèàëèçèðîâàòü ðåãèñòðû, ÷åðåç êîòîðûå Âû ïåðåäàåòå ïàðàìåòðû, âíå
  4371.   âûçîâà ïðîöåäóðû.  Íî åñëè Âû óêàæåòå, õîòü îäèí ïàðàìåòð, òî Âàì ïðèäåòñÿ
  4372.   óêàçûâàòü è îñòàëüíûå, èíà÷å êîìïèëÿòîð áóäåò ñ÷èòàòü, ÷òî Âû èõ ñëó÷àéíî
  4373.   ïðîïóñòèëè è âûäàñò ñîîáùåíèå îá îøèáêå.
  4374.  
  4375.       Åñëè Âû íå îáúÿâèëè ðåãèñòðû íè ïðè îáúÿâëåíèè ðåãèñòðîâîé ïðîöåäóðû,
  4376.   íè â çàãîëîâêå ñàìîé ïðîöåäóðû, òî êîìïèëÿòîð áóäåò ñ÷èòàòü, ÷òî ïàðàìåòðû
  4377.   â ýòó ïðîöåäóðó ïåðåäàþòñÿ ñòàðûì ñïîñîáîì. Òàêèì îáðàçîì, äîñòèãàåòñÿ
  4378.   ïîëíàÿ ñîâìåñòèìîñòü ñ ïðåäûäóùèìè âåðñèÿìè êîìïèëÿòîðà.
  4379. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4380.  
  4381.  
  4382. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.10>
  4383.   11.10 Îáúÿâëåíèå ïàðàìåòðîâ â ñòåêîâûõ ïðîöåäóðàõ.
  4384. </A></B></FONT><FONT FACE="Courier">
  4385.  
  4386.       Êàê èçâåñòíî, ðàíåå â C-- êîíòðîëü çà ÷èñëîì è òèïîì ïåðåäàâàåìûõ
  4387.   ïðîöåäóðå ïàðàìåòðîâ âîçëàãàëñÿ íà ïðîãðàììèñòà. Ïîýòîìó âîçíèêëà íåïðîñòàÿ
  4388.   çàäà÷à, ñîâìåñòèòü îäíîâðåìåííî îòñóòñòâèå êîíòðîëÿ çà ïàðàìåòðàìè (äëÿ
  4389.   ñîâìåñòèìîñòè ñ ïðåäûäóùèìè âåðñèÿìè) è åå íàëè÷èå.  ðåçóëüòàòå
  4390.   êîìïðîìèññîâ ïîÿâèëñÿ âàðèàíò íåìíîãî îòëè÷àþùèéñÿ îò òðàäèöèîííî ïðèíÿòîãî
  4391.   â ÿçûêàõ C.
  4392.  
  4393.       Ãëàâíîå îòëè÷èå - ýòî òî, ÷òî ïàðàìåòðû, îïðåäåëÿåìûå ïðè îïðåäåëåíèè
  4394.   ïðîöåäóðû, íå áóäóò âîñïðèíèìàòüñÿ êîìïèëÿòîðîì äëÿ êîíòðîëÿ çà íèìè. Âî
  4395.   âñåõ ÿçûêàõ C äîïóñêàåòñÿ ñîâìåùåíèå ïðîòîòèïà ïðîöåäóðû è åå îáúÿâëåíèÿ.
  4396.    C-- äëÿ òîãî, ÷òîáû âêëþ÷èëñÿ êîíòðîëü çà ïàðàìåòðàìè ñòåêîâîé ïðîöåäóðû,
  4397.   íàäî ýòó ïðîöåäóðó îáÿçàòåëüíî îáúÿâèòü. Íî íå âñÿêîå îáúÿâëåíèå ïðîöåäóðû
  4398.   áóäåò ñèãíàëîì êîìïèëÿòîðó î âêëþ÷åíèè êîíòðîëÿ çà ïàðàìåòðàìè ýòîé
  4399.   ïðîöåäóðû. Åñëè ïðè îáúÿâëåíèè â êðóãëûõ ñêîáêàõ íè÷åãî íå áóäåò, òî
  4400.   êîìïèëÿòîð íå áóäåò îòñëåæèâàòü ïàðàìåòðû, ïåðåäàâàåìûå ýòîé ïðîöåäóðå. Â
  4401.   C++ òàêîå îáúÿâëåíèå îçíà÷àåò, ÷òî ïðîöåäóðå íå ïåðåäàþòñÿ íèêàêèå
  4402.   ïàðàìåòðû. Â C-- äëÿ ýòîãî íàäî ïðè îáúÿâëåíèè ïðîöåäóðû â êðóãëûõ ñêîáêàõ
  4403.   îáÿçàòåëüíî íàïèñàòü void. Íàïðèìåð:
  4404.  
  4405.   int proc ( void ) ;
  4406.  
  4407.       Âñòðåòèâ òàêîå îáúÿâëåíèå ïðîöåäóðû, êîìïèëÿòîð áóäåò ñëåäèòü çà òåì,
  4408.   ÷òîáû ýòîé ïðîöåäóðå íå áûëè ïåðåäàíû ïàðàìåòðû.
  4409.  
  4410.       Ïðè îáúÿâëåíèè ïðîöåäóðû èìåíà ïàðàìåòðîâ ìîæíî îïóñêàòü. Êàê èçâåñòíî,
  4411.   â C-- ïàðàìåòðû ïðîöåäóðû îäíîãî òèïà çàïèñûâàþòñÿ ÷åðåç çàïÿòóþ. Äëÿ ñìåíû
  4412.   òèïà èñïîëüçóþò òî÷êó ñ çàïÿòîé. Ïðè îáúÿâëåíèè ñìåíó òèïà ìîæíî
  4413.   ïðîèçâîäèòü è ïîñëå çàïÿòîé:
  4414.  
  4415.   void ptoc ( int a, b, c; word d );
  4416.   void proc ( int, int, int, word );
  4417.   void proc ( int, int, int; word );
  4418.  
  4419.       Âñå ýòè ïðèìåðû îáúÿâëåíèé ÿâëÿþòñÿ èäåíòè÷íûìè è äîïóñòèìûìè.
  4420.  
  4421.       Äëÿ êîíòðîëÿ çà ïðîöåäóðàìè ñ ïåðåìåííûì ÷èñëîì ïàðàìåòðîâ áûë ââåäåí
  4422.   íîâûé äëÿ C-- ýëåìåíò ñèíòàêñèñà - ìíîãîòî÷èå èëè åãî åùå íàçûâàþò ýëëèïñ.
  4423.   Âîò êàê áóäåò âûãëÿäåòü îáúÿâëåíèå ïðîöåäóðû printf:
  4424.  
  4425.   void cdecl printf ( word, ... );
  4426. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4427.  
  4428.  
  4429. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.11>
  4430.   11.11 Èñïîëüçîâàíèå ìàêðîêîìàíä.
  4431. </A></B></FONT><FONT FACE="Courier">
  4432.  
  4433.       Òåïåðü ëþáàÿ äèíàìè÷åñêàÿ ïðîöåäóðà ìîæåò áûòü èñïîëüçîâàíà êàê ìàêðîñ.
  4434.   Åñëè ïåðåä âûçîâîì äèíàìè÷åñêîé ïðîöåäóðû ïîñòàâèòü ñèìâîë <b>@</b>, òî êîä ýòîé
  4435.   ïðîöåäóðû áóäåò âñòàâëåí, à íå âûçâàí èíñòðóêöèåé CALL.
  4436.  
  4437.       Ïðè èñïîëüçîâàíèè ñòåêîâûõ äèíàìè÷åñêèõ ïðîöåäóð â êà÷åñòâå ìàêðîñîâ
  4438.   î÷èñòêà ñòåêà îò ïåðåäàííûõ ïàðàìåòðîâ ïðîèçâîäèòñÿ àññåìáëåðíîé
  4439.   èíñòðóêöèåé <b>ADD SP,SIZE_PARAMETRS</b> ñðàçó ïîñëå îêîí÷àíèÿ êîäà âñòàâëåííîãî
  4440.   ìàêðîñà. Ïîýòîìó, åñëè ýòà ïðîöåäóðà èñïîëüçîâàëà ôëàãè â êà÷åñòâå
  4441.   âîçâðàòà, òî îíè áóäóò ðàçðóøåíû.
  4442. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4443.  
  4444.  
  4445. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.12>
  4446.   11.12 Ïåðåäà÷à ïàðàìåòðîâ â ñòåêîâûå ïðîöåäóðû ÷åðåç ðåãèñòðû.
  4447. </A></B></FONT><FONT FACE="Courier">
  4448.  
  4449.       Ïðè ïåðåäà÷å ïàðàìåòðîâ ÷åðåç ðåãèñòðû, ÷àùå âñåãî ïîëó÷àåòñÿ áîëåå
  4450.   êîìïàêòíûé è áûñòðûé êîä. Íî ñîäåðæèìîå ðåãèñòðîâ ìîæåò áûòü ëåãêî
  4451.   ðàçðóøåíî. Åñëè â Âàøåé ïðîöåäóðå, êàêîé-òî èç ïàðàìåòðîâ èñïîëüçóåòñÿ
  4452.   îäíîêðàòíî äëÿ òîãî, ÷òîáû â íà÷àëå ïðîöåäóðû èíèöèàëèçèðîâàòü êàêîé-òî
  4453.   ðåãèñòð, òî Âû ìîæåòå ïåðåäàòü ýòî çíà÷åíèå â ïðîöåäóðó ñðàçó ÷åðåç
  4454.   ðåãèñòð, ìèíóÿ ñòàäèþ çàñîâûâàíèÿ è èçâëå÷åíèÿ ñîäåðæèìîãî â ñòåê. Ïðèìåð:
  4455.  
  4456.   int proc (int param1, param2, param3)
  4457.   {
  4458.     (E)BX = param3;
  4459.     (E)BX.TEG_STRUCT.var = proc2 (param1,papra2);
  4460.     proc3 (param1,param2);
  4461.   }
  4462.  
  4463.       Â ýòîì ïðèìåðå ïàðàìåòð param3 èñïîëüçóåòñÿ ëèøü äëÿ òîãî, ÷òîáû
  4464.   èíèöèàëèçèðîâàòü ðåãèñòð (E)BX, ïîýòîìó åãî ìîæíî ñðàçó ïåðåäàòü ÷åðåç
  4465.   ðåãèñòð:
  4466.  
  4467.   int proc (int param1, param2, (E)BX)
  4468.   {
  4469.     (E)BX.TEG_STRUCT.var = proc2 (param1,papra2);
  4470.     proc3 (param1,param2);
  4471.   }
  4472.  
  4473.       Êàê Âû âèäèòå, ïðîöåäóðà íåìíîãî óïðîñòèëàñü.
  4474.  
  4475.       Â ïðèíöèïå, ïîðÿäîê ðàñïîëîæåíèÿ ñòåêîâûõ è ðåãèñòðîâûõ ïàðàìåòðîâ íå
  4476.   ïðèíöèïèàëåí. Íî íàäî ïîìíèòü, ÷òî ñîäåðæèìîå ðåãèñòðîâ ìîæåò áûòü ëåãêî
  4477.   ðàçðóøåíî, è ïîýòîìó ëó÷øå âñåãî ðåãèñòðîâûå ïàðàìåòðû èíèöèàëèçèðîâàòü
  4478.   ëèøü ïîñëå òîãî, êàê áûëè çàñóíóòû â ñòåê âñå ñòåêîâûå ïàðàìåòðû. Äëÿ
  4479.   ïðîöåäóð òèïà <b>pascal</b> ðåãèñòðîâûå ïàðàìåòðû ëó÷øå ðàñïîëàãàòü ïîñëå
  4480.   ñòåêîâûõ ïàðàìåòðîâ. Äëÿ ïðîöåäóð òèïà <b>cdecl è stdcall</b> ñíà÷àëà ëó÷øå
  4481.   ðàñïîëàãàòü ðåãèñòðîâûå ïàðàìåòðû.
  4482. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4483.  
  4484.  
  4485. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.13>
  4486.   11.13 Âûçîâ ïðîöåäóð ñ àäðåñîì â ðåãèñòðå.
  4487. </A></B></FONT><FONT FACE="Courier">
  4488.  
  4489.       Â C-- äîïóñòèìî äåëàòü âûçîâ ïðîöåäóðû, àäðåñ êîòîðîé íàõîäèòñÿ â
  4490.   ðåãèñòðå. Ïàðàìåòðû äëÿ òàêîãî âûçîâà ïåðåäàþòñÿ òîëüêî ÷åðåç ñòåê. Òèï
  4491.   âûçîâà ïðîöåäóðû äëÿ ïðîãðàìì ïîä Windows <b>stdcall</b>, äëÿ îñòàëüíûõ <b>pascal</b>.
  4492.   Àäðåñ ïðîöåäóðû äëÿ 32-áèòíûõ ïðîãðàìì äîëæåí íàõîäèòñÿ â 32-áèòíîì
  4493.   ðåãèñòðå, à äëÿ 16-áèòíûõ ïðîãðàìì â 16-áèòíîì ðåãèñòðå. Ñ÷èòàåòñÿ, ÷òî
  4494.   òàêîé âûçîâ èìååò âîçâðàò òèïà <b>unsigned int</b>. Ïðèìåð:
  4495.  
  4496.     BX = # proc;
  4497.     BX (a);
  4498.     IF ( BX(b) == 0 ) AX=2;
  4499.  
  4500.     Âû ïîëó÷èòå ñëåäóþùèé êîä:
  4501.  
  4502.   test.c-- 8: BX=#proc;
  4503.   0104 BB1A01                   mov     bx,11Ah
  4504.  
  4505.   test.c-- 9: BX(a);
  4506.   0107 FF76FC                   push    word ptr [bp-4]
  4507.   010A FFD3                     call    near bx
  4508.  
  4509.   test.c-- 10: IF (BX(b) == 0)AX=2;
  4510.   010C FF76FE                   push    word ptr [bp-2]
  4511.   010F FFD3                     call    near bx
  4512.   0111 85C0                     test    ax,ax
  4513.   0113 7503                     jne     118h
  4514.   0115 B80200                   mov     ax,2
  4515. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4516.  
  4517.  
  4518. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.14>
  4519.   11.14 Âñòðîåííûå â êîìïèëÿòîð ïðîöåäóðû.
  4520. </A></B></FONT><FONT FACE="Courier">
  4521.  
  4522.       Äëÿ íåêîòîðûõ ïðîöåäóð Âû íå íàéäåòå èõ èñõîäíûå òåêñòû â áèáëèîòåêàõ
  4523.   êîìïèëÿòîðà. Êîä ýòèõ ïðîöåäóð ãåíåðèðóåò êîìïèëÿòîð. Âîò ñïèñîê ýòèõ
  4524.   ïðîöåäóð:
  4525.  
  4526.   ABORT             Ïðåêðàùåíèå âûïîëíåíèÿ ïðîãðàììû
  4527.   atan              Âû÷èñëèòü àðêòàíãåíñ ÷èñëà
  4528.   atan2             Âû÷èñëèòü àðêòàíãåíñ ÷èñëà
  4529.   ATEXIT            Çàðåãèñòðèðîâàòü ôóíêöèþ âûïîëíÿþùóþñÿ ïðè âûõîäå.
  4530.   cos               Âîçâðàùàåò êîñèíóñ óãëà
  4531.   EXIT              Çàêîí÷èòü ïðîãðàììó ñ êîäîì îøèáêè
  4532.   exp               Âîçâðàùàåò ýêñïîíåíòó ÷èñëà
  4533.   inp/inportb       Ñ÷èòàòü îäèí áàéò èç ïîðòà
  4534.   inport            Ñ÷èòàòü ñëîâî èç ïîðòà
  4535.   inportd           Ñ÷èòàòü äâîéíîå ñëîâî èç ïîðòà
  4536.   fabs              Âîçâðàùàåò àáñîëþòíîå çíà÷åíèå ÷èñëà
  4537.   log               Âû÷èñëÿåò íàòóðàëüíûé ëîãàðèôì ÷èñëà
  4538.   log10             Âû÷èñëÿåò äåñÿòè÷íûé ëîãàðèôì ÷èñëà
  4539.   outp/outportb     Çàïèñàòü îäèí áàéò â ïîðò
  4540.   outport           Çàïèñàòü ñëîâî â ïîðò
  4541.   outportd          Çàïèñàòü äâîéíîå ñëîâî â ïîðò
  4542.   sin               Âîçâðàùàåò ñèíóñ óãëà
  4543.   sqrt              Èçâëå÷ü êâàäðàòíûé êîðåíü ÷åðåç FPU.
  4544.   tan               Âîçâðàùàåò òàíãåíñ óãëà
  4545.  
  4546.       Ðàçìåùåíèå ýòèõ ïðîöåäóð íåïîñðåäñòâåííî â êîìïèëÿòîðå, ñâÿçàíî ñ òåì,
  4547.   ÷òî â íàñòîÿùèé ìîìåíò êîìïèëÿòîð ìîæåò òàêèì îáðàçîì ãåíåðèðîâàòü áîëåå
  4548.   ýôôåêòèâíûé êîä, ÷åì åñëè áû ýòè ïðîöåäóðû ðàñïîëàãàëèñü â áèáëèîòåêàõ.
  4549.   Â áóäóùåì, ïî ìåðå ðàçâèòèÿ êîìïèëÿòîðà, ýòè ïðîöåäóðû ïîñòåïåííî áóäóò
  4550.   âûíîñèòñÿ èç êîìïèëÿòîðà â áèáëèîòåêè.
  4551.  
  4552.       Íî íè÷òî íå ìåøàåò Âàì óæå ñåé÷àñ íàïèñàòü ñâîè îäíîèìåííûå
  4553.   áèáëèîòå÷íûå ïðîöåäóðû. Âñòðåòèâ îïðåäåëåíèå òàêîé ïðîöåäóðû, êîìïèëÿòîð íå
  4554.   áóäåò âûäàâàòü íèêàêèõ ñîîáùåíèå, îí ïðîñòî áóäåò ïðèìåíÿòü Âàø âàðèàíò
  4555.   ïðîöåäóðû.
  4556. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4557.  
  4558.  
  4559. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.14.1>
  4560.     11.14.1 Ïðîöåäóðû ABORT, ATEXIT è EXIT.
  4561. </A></B></FONT><FONT FACE="Courier">
  4562.  
  4563.         Ïðîöåäóðû <b>ABORT è EXIT</b> ñâÿçàíû ñ ðàáîòîé äèðåêòèâû <b>#atexit</b> è
  4564.     ïðîöåäóðîé <b>ATEXIT</b>. Íàèáîëåå îïòèìàëüíóþ èõ ðåàëèçàöèþ è âçàèìíóþ
  4565.     èíòåãðàöèþ ìîæåò ñäåëàòü òîëüêî êîìïèëÿòîð. Èìåííî ïîýòîìó ýòè ïðîöåäóðû
  4566.     ïîääåðæèâàþòñÿ êîìïèëÿòîðîì.
  4567.  
  4568.         Ïðîöåäóðà <b>ATEXIT</b> - ðåãèñòðîâàÿ ïðîöåäóðà, êîòîðàÿ ðåãèñòðèðóåò
  4569.     ôóíêöèþ, àäðåñ êîòîðîé ïåðåäàåòñÿ åé â êà÷åñòâå ïàðàìåòðà, ò.å. ÷åðåç
  4570.     ðåãèñòð (E)AX, êàê ôóíêöèþ çàâåðøåíèÿ ïðîãðàììû. Ïðè óñïåøíîé ðåãèñòðàöèè
  4571.     <b>ATEXIT</b> âîçâðàùàåò 0. Âñåãî ìîæíî çàðåãèñòðèðîâàòü äî 16 ôóíêöèé.
  4572.  
  4573.         Çàâåðøàþùèå ôóíêöèè íå äîëæíû èìåòü ïàðàìåòðîâ è âîçâðàòà. Ýòè
  4574.     ôóíêöèè áóäóò âûïîëíÿòüñÿ â ïîðÿäêå îáðàòíîì î÷åðåäíîñòè ðåãèñòðàöèè â
  4575.     ñëó÷àå, åñëè Âû áóäåòå çàâåðøàòü ðàáîòó ïðîãðàììû ÷åðåç âûçîâû ïðîöåäóð
  4576.     <b>ABORT</b> èëè <b>EXIT</b> èëè çàêîí÷èòñÿ ðàáîòà ïðîöåäóðû <b>main</b>. Åñëè Âû
  4577.     çàâåðøèòå ðàáîòó ïðîãðàììû âûçîâîì ïðîöåäóðû <b>ExitProcess</b> ïîä Windows èëè
  4578.     âûçîâîì <b>AH=0x4C; $int 0x21</b> ïîä DOS, âûõîä èç ïðîãðàììû ïðîèçîéäåò áåç
  4579.     çàïóñêà çàðåãèñòðèðîâàííûõ ôóíêöèé.
  4580.  
  4581.         Ïðîöåäóðà <b>ABORT è EXIT</b>, åñëè íå âêëþ÷åíà äèðåêòèâà <b>#atexit</b> äåëàþò
  4582.     âûçîâ ïðîöåäóðû <b>ExitProcess</b> ïîä Windows è âûçîâ <b>AH=0x4C; $int 0x21</b> ïîä
  4583.     DOS.  Ïðîöåäóðå <b>ABORT</b> íå ïåðåäàþòñÿ íèêàêèå ïàðàìåòðû, è îíà çàâåðøàåò
  4584.     ðàáîòó ïðîãðàììû ñ êîäîì âîçâðàòà 0. Ïðîöåäóðå <b>EXIT</b> ïåðåäàåòñÿ â
  4585.     êà÷åñòâå ïàðàìåòðà êîä âîçâðàòà, ñ êîòîðûì îíà è çàâåðøàåò ðàáîòó
  4586.     ïðîãðàììû.
  4587. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4588.  
  4589.  
  4590. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.14.2>
  4591.     11.14.2 Ïðîöåäóðû inp/inportb, inport, inportd, outp/outportb, outport è
  4592.                                                                     outportd
  4593. </A></B></FONT><FONT FACE="Courier">
  4594.  
  4595.         Ýòè ïðîöåäóðû âñåãäà âñòàâëÿþòñÿ â êîä êàê ìàêðîñû, ò.å. äëÿ ýòèõ
  4596.     ïðîöåäóð íèêîãäà íå ãåíåðèðóåòñÿ âûçîâ ïðîöåäóðû. Â çàâèñèìîñòè îò
  4597.     çíà÷åíèÿ ïîðòà, ñ êîòîðûì ðàáîòàþò ýòè ïðîöåäóðû, ãåíåðèðóåòñÿ ðàçíûé
  4598.     êîä. Âñå ýòî ïîçâîëÿåò ïîëó÷àòü áîëåå êîìïàêòíûé êîä.
  4599.  
  4600.         Ïðîöåäóðû ÷òåíèÿ èç ïîðòà èìåþò òàêîé ïðîòîòèï:
  4601.  
  4602.     byte inp ( word port );
  4603.     word inport ( word port );
  4604.     dword inportd ( word port );
  4605.  
  4606.         Ïðîöåäóðû çàïèñè â ïîðò èìåþò òàêîé ïðîòîòèï:
  4607.  
  4608.     void outp ( byte val; word port );
  4609.     void outport ( word val; word port );
  4610.     void outportd ( dword val; word port );
  4611.  
  4612.         Èìåíà ïðîöåäóð inp è inportb, òàêæå êàê è èìåíà outp è outportb
  4613.     ÿâëÿþòñÿ ñèíîíèìàìè.
  4614. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4615.  
  4616.  
  4617. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.14.3>
  4618.     11.14.3 Ïðîöåäóðû äëÿ ðàáîòû ñ âåùåñòâåííûìè ÷èñëàìè.
  4619. </A></B></FONT><FONT FACE="Courier">
  4620.  
  4621.         Ýòè ïðîöåäóðû ðåàëèçóþòñÿ êîìïèëÿòîðîì è âñåãäà âñòàâëÿþòñÿ â êîä êàê
  4622.     ìàêðîñû, ò.å. äëÿ íèõ íèêîãäà íå ãåíåðèðóåòñÿ âûçîâ ïðîöåäóðû. Êðîìå
  4623.     ýòîãî, åñëè ïàðàìåòðîì îäíîé ïðîöåäóðû ÿâëÿåòñÿ âûçîâ äðóãîé, òî
  4624.     ðåçóëüòàò ðàáîòû âòîðîé ïðîöåäóðû îñòàåòñÿ â ñòåêå FPU, à ïåðâàÿ
  4625.     ïðîöåäóðà èñïîëüçóåò ýòîò ðåçóëüòàò íåïîñðåäñòâåííî èç ñòåêà. Òàêèì
  4626.     îáðàçîì ïîëó÷àþòñÿ áîëåå êîìïàêòíûé êîä. Âîò âûìûøëåííûé ïðèìåð:
  4627.  
  4628.     test.c-- 7: f = sin( sqrt(1) );
  4629.     0100 D9061C01                 fld     [11Ch]
  4630.     0104 D9FA                     fsqrt
  4631.     0106 D9FE                     fsin
  4632.     0108 D91E2001                 fstp    [120h]
  4633.     010C 9B                       fwait
  4634.  
  4635.         Ýòè ïðîöåäóðû èìåþò ñëåäóþùèé ïðîòîòèï:
  4636.  
  4637.     float atan ( float val );
  4638.     float atan ( float val, val2 );
  4639.     float cos ( float val );
  4640.     float exp ( float val );
  4641.     float fabs ( float val );
  4642.     float log ( float val );
  4643.     float log10 ( float val );
  4644.     float sin ( float val );
  4645.     float sqrt ( float val );
  4646.     float tan ( float val );
  4647. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4648.  
  4649.  
  4650. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.15.1>
  4651.   11.15 Êëàññû.
  4652.  
  4653.     11.15.1 Îáúÿâëåíèå ïðîöåäóð â ñòðóêòóðàõ.
  4654. </A></B></FONT><FONT FACE="Courier">
  4655.  
  4656.         Ñ ââåäåíèå ïîääåðæêè îáúÿâëåíèÿ ïðîöåäóð â ñòðóêòóðàõ, ñòðóêòóðà
  4657.     ñòàíîâèòñÿ ïîäîáíîé êëàññó â C++. Ò.å. òàêàÿ ïðîöåäóðà ñòàíîâèòñÿ ìåòîäîì
  4658.     êëàññà. Ïðèìåð:
  4659.  
  4660.     struct Point  // îáúÿâëåíèå êëàññà
  4661.     {
  4662.         int x; // ýëåìåíòû äàííûõ
  4663.         int y; // êëàññà òèïà Point
  4664.         void SetX(int);  // îáúÿâëåíèå ìåòîäîâ
  4665.         void SetY(int);  // êëàññà Point
  4666.     };
  4667.  
  4668.     void Point::SetX(int _x)  //îïðåäåëåíèå ïðîöåäóðû êëàññà Point
  4669.     {
  4670.         IF((_x>=0)&&(_x<=MAX_X)) x=_x;
  4671.     // ïåðåìåííûå x, y ÿâëÿþòñÿ ÷ëåíàìè ýòîãî êëàññà è ïîýòîìó äîñòóï ê íèì èç
  4672.     // ïðîöåäóð ýòîãî æå êëàññà îñóùåñòâëÿåòñÿ íàïðÿìóþ.
  4673.      }
  4674.  
  4675.     void main()
  4676.     Point p;  //îïðåäåëÿåì ñòðóêòóðó â ñòåêå
  4677.     {
  4678.       p.y = p.x = 0;
  4679.       p.SetX(1);
  4680.     }
  4681.  
  4682.         Ïðè âûçîâå ïðîöåäóðû ÿâëÿþùåéñÿ ìåòîäîì êëàññà åé íåÿâíûì îáðàçîì
  4683.     ïåðåäàåòñÿ àäðåñ ýòîãî êëàññà (ñòðóêòóðû). Â ñàìîé ïðîöåäóðå ýòîò àäðåñ
  4684.     äîñòóïåí ÷åðåç èìÿ ïàðàìåòðè÷åñêîé ïåðåìåííîé <b>this</b>. Ýòó ïåðåìåííóþ
  4685.     àâòîìàòè÷åñêè ãåíåðèðóåò êîìïèëÿòîð. Åñëè â îáúÿâëåíèå ïðîöåäóðû â
  4686.     ñòðóêòóðå óêàçàòü êëþ÷åâîå ñëîâî <b>static</b>, òî òàêîé ïðîöåäóðå àäðåñ
  4687.     êëàññà íå ïåðåäàåòñÿ è ïåðåìåííàÿ <b>this</b> íå ãåíåðèðóåòñÿ.
  4688.  
  4689.         Ïðîöåäóðà îáúÿâëåííàÿ â ñòðóêòóðå ìîæåò áûòü äèíàìè÷åñêîé. Äëÿ ýòîãî,
  4690.     ïðè åå îïðåäåëåíèè, â ñàìîì åå íà÷àëå, íàäî íàïèñàòü ñèìâîë äâîåòî÷èÿ <b>:</b>
  4691.     (òàêæå êàê è äëÿ îáû÷íûõ äèíàìè÷åñêèõ ïðîöåäóð). Íî òàêàÿ äèíàìè÷åñêàÿ
  4692.     ïðîöåäóðà íå ìîæåò áûòü èñïîëüçîâàíà êàê ìàêðîñ.
  4693. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4694.  
  4695.  
  4696. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.15.2>
  4697.     11.15.2 Íàñëåäîâàíèå.
  4698. </A></B></FONT><FONT FACE="Courier">
  4699.  
  4700.         Â C-- ïîääåðæèâàþòñÿ ïðîñòûå è ìíîæåñòâåííûå íàñëåäîâàíèÿ. Îáúÿâëåíèå
  4701.     ñòðóêòóðû ñ íàñëåäîâàíèåì èìååò ñëåäóþùèé ñèíòàêñèñ:
  4702.  
  4703.     struct Derived : Base1, Base2, ... Basen
  4704.     {
  4705.       int x0;
  4706.     };
  4707.  
  4708.         ×èñëî áàçîâûõ ñòðóêòóð â ïðîèçâîäíîì íå îãðàíè÷åíî. Ïðè ìíîæåñòâåííîì
  4709.     íàñëåäîâàíèè ñòðóêòóðà ìîæåò íàñëåäîâàòü äâà è áîëåå ýêçåìïëÿðà áàçîâîé
  4710.     ñòðóêòóðû. Ïðè ýòîì âîçíèêàåò íåîäíîçíà÷íîñòü. Ïðèìåð:
  4711.  
  4712.     struct A
  4713.     {
  4714.       int x,y;
  4715.       . . .
  4716.     };
  4717.  
  4718.     struct B : A  //ñòðóêòóðà <b>B</b> íàñëåäóåò <b>A</b>
  4719.     {
  4720.       . . .
  4721.  
  4722.     };
  4723.  
  4724.     struct C : A  //ñòðóêòóðà <b>C</b> íàñëåäóåò <b>A</b>
  4725.     {
  4726.       . . .
  4727.     };
  4728.  
  4729.     struct D : B, C //ñòðóêòóðà <b>D</b> íàñëåäóåò <b>B è C</b>
  4730.     {
  4731.       . . .
  4732.     };
  4733.  
  4734.     void main()
  4735.     D d;  //âûäåëÿåì äëÿ ñòðóêòóðû <b>D</b> ïàìÿòü â ñòåêå è ïðèñâàèâàåì åé èìÿ <b>d</b>
  4736.     {
  4737.       d.x0=0;
  4738.  
  4739.         Â ýòîì ïðèìåðå ñòðóêòóðà <b>D</b> íàñëåäóåò äâà ýêçåìïëÿðà ñòðóêòóðû <b>A</b> è
  4740.     â íåé íàõîäÿòñÿ äâà ýëåìåíòà ñ èìåíåì <b>x0</b>. Êîìïèëÿòîðû C++ ïðè çàïèñè
  4741.     òèïà <b>d.x0=0</b> âûäàþò ñîîáùåíèå îá îøèáêå. C-- ýòó çàïèñü îáðàáàòûâàåò,
  4742.     ïðèñâàèâàíèå ïðîèçâîäèòñÿ ïî óìîë÷àíèþ â ýëåìåíò èç ïîñëåäíåé áàçîâîé
  4743.     ñòðóêòóðû, èìåþùåé ýëåìåíò <b>x0</b>. Äëÿ òîãî ÷òîáû ïîëó÷èòü äîñòóï êî
  4744.     âòîðîìó ýëåìåíòó <b>x0</b> (ôèçè÷åñêè ýòîò ýëåìåíò íàõîäèòñÿ â ñòðóêòóðå
  4745.     ïåðâûì), íåîáõîäèìî ïðèìåíèòü îïåðàöèþ ðàçðåøåíèÿ âèäèìîñòè:
  4746.  
  4747.       d.B::x0=0;
  4748.  
  4749.         Èç âñåãî ýòîãî ñëåäóåò, ÷òî çàïèñè:
  4750.  
  4751.       d.x0=0;
  4752.     è
  4753.       d.C::x0=0;
  4754.  
  4755.          ÿâëÿþòñÿ ðàâíîçíà÷íûìè.
  4756. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4757.  
  4758.  
  4759. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.15.3>
  4760.     11.15.3 Íàñëåäîâàíèå ïðîöåäóð.
  4761. </A></B></FONT><FONT FACE="Courier">
  4762.  
  4763.         Åñëè â áàçîâîì êëàññå åñòü ïðîöåäóðà, à â ïðîèçâîäíîì êëàññå Âû ýòó
  4764.     ïðîöåäóðó ïåðåîïðåäåëèëè, òî ýòà ïðîöåäóðà áóäåò ïåðåîïðåäåëåíà è â
  4765.     áàçîâîì êëàññå. Òàêèì îáðàçîì ïðîöåäóðà îïðåäåëåííàÿ â áàçîâîì êëàññå
  4766.     áóäåò ïîòåðÿíà. Ïðèìåð:
  4767.  
  4768.     struct Point  // áàçîâûé êëàññ
  4769.     {
  4770.         int x; // ýëåìåíòû äàííûõ
  4771.         int y; // êëàññà òèïà Point
  4772.         void SetX(int);  // îáúÿâëåíèå ìåòîäîâ
  4773.         void SetY(int);  // êëàññà Point
  4774.     };
  4775.  
  4776.     void Point::SetX(int _x)  // îïðåäåëåíèå ïðîöåäóðû êëàññà Point
  4777.     {
  4778.         IF((_x>=0)&&(_x<=MAX_X)) x=_x;
  4779.     }
  4780.  
  4781.     struct Point2 : Point  // ïðîèçâîäíûé êëàññ
  4782.     {
  4783.       int x2;
  4784.     }
  4785.  
  4786.     struct Point3 : Point  // åùå îäèí ïðîèçâîäíûé êëàññ
  4787.     {
  4788.       int z;
  4789.     }
  4790.  
  4791.     void Point3::SetX(int _x)  // â ýòîì ïðîèçâîäíîì êëàññå ïåðåîïðåäåëÿåì
  4792.     {                          // ïðîöåäóðó SetX
  4793.         IF((_x>=80)&&(_x<=MAX_X)) x=_x;
  4794.     }
  4795.  
  4796.         Ïðîöåäóðà SetX, îïðåäåëåííàÿ â áàçîâîì êëàññå Point, òåïåðü áóäåò
  4797.     íåäîñòóïíà. Âìåñòî êîäà îïðåäåëåííîãî â ýòîì êëàññå, áóäåò âûçûâàòüñÿ êîä
  4798.     ïðîöåäóðû, îïðåäåëåííûé â íàñëåäóåìîì êëàññå Point3. Ïðè âûçîâå ïðîöåäóðû
  4799.     SetX èç äðóãîãî ïðîèçâîäíîãî êëàññà Point2 áóäåò òàêæå âûçûâàòüñÿ êîä
  4800.     ïðîöåäóðû, îïðåäåëåííûé â ïðîèçâîäíîì êëàññå Point3. Ïåðåîïðåäåëÿÿ
  4801.     ïðîöåäóðó òàêèì îáðàçîì, Âû çàìåíèòå êîä ýòîé ïðîöåäóðû â áàçîâîì êëàññå è
  4802.     âî âñåõ åãî íàñëåäóåìûõ êëàññàõ.
  4803.  
  4804.         Åñëè Âàì íåîáõîäèìî, ÷òîáû êîä íîâîé ïðîöåäóðû áûë äîñòóïåí
  4805.     îäíîâðåìåííî ñ êîäîì ñòàðîé ïðîöåäóðû, òî â ïðîèçâîäíîì êëàññå Âàì
  4806.     íåîáõîäèìî ñäåëàòü åùå îäíî îáúÿâëåíèå ýòîé ïðîöåäóðû. Ïðèìåð:
  4807.  
  4808.     struct Point  // áàçîâûé êëàññ
  4809.     {
  4810.         int x; // ýëåìåíòû äàííûõ
  4811.         int y; // êëàññà òèïà Point
  4812.         void SetX(int);  // îáúÿâëåíèå ìåòîäîâ
  4813.         void SetY(int);  // êëàññà Point
  4814.     };
  4815.  
  4816.     void Point::SetX(int _x)  // îïðåäåëåíèå ïðîöåäóðû êëàññà Point
  4817.     {
  4818.         IF((_x>=0)&&(_x<=MAX_X)) x=_x;
  4819.     }
  4820.  
  4821.     struct Point2 : Point  // ïðîèçâîäíûé êëàññ
  4822.     {
  4823.       int x2;
  4824.     }
  4825.  
  4826.     struct Point3 : Point  // åùå îäèí ïðîèçâîäíûé êëàññ
  4827.     {
  4828.       int z;
  4829.       void SetX(int);  // â íàñëåäóåìîì êëàññå äåëàåì åùå îäíî îáúÿâëåíèå
  4830.                        // ïðîöåäóðû SetX
  4831.     }
  4832.  
  4833.     void Point3::SetX(int _x)  // â ýòîì ïðîèçâîäíîì êëàññå ïåðåîïðåäåëÿåì
  4834.     {                          // ïðîöåäóðó SetX
  4835.         IF((_x>=80)&&(_x<=MAX_X)) x=_x;
  4836.         EDI=this;
  4837.         EDI.Point.SetX(_x);  // äåëàåì âûçîâ îäíîèìåííîé ïðîöåäóðû èç
  4838.                              // áàçîâîãî êëàññà
  4839.     }
  4840.  
  4841.         Òåïåðü èç ïðîèçâîäíîãî êëàññà Point3 Âàì äîñòóïíû äâå ðàçëè÷íûå
  4842.     ïðîöåäóðû ñ îäíèì èìåíåì SetX. À èç áàçîâîãî êëàññà Point è èç äðóãîãî
  4843.     ïðîèçâîäíîãî êëàññà Point2 áóäåò ïî ïðåæíåìó äîñòóïåí òîëüêî áàçîâûé
  4844.     âàðèàíò ïðîöåäóðû SetX.
  4845. <A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4846.  
  4847.  
  4848. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.1>
  4849. 12. Òèïû âûõîäíûõ ôàéëîâ.
  4850.  
  4851.   12.1 Âûõîäíûå ôàéëû òèïà COM.
  4852. </A></B></FONT><FONT FACE="Courier">
  4853.  
  4854.       Ýòîò òèï âûõîäíîãî ôàéëà ïîëó÷àåòñÿ àâòîìàòè÷åñêè ïî óìîë÷àíèþ.
  4855.  
  4856.       Èçíà÷àëüíî C-- ìîã äåëàòü òîëüêî ôàéëû ôîðìàòà òèïà COM.  íàñòîÿùåå
  4857.   âðåìÿ ïîÿâèëàñü âîçìîæíîñòü ïîëó÷àòü ôàéëà òèïà EXE ñ ìîäåëÿìè ïàìÿòè tiny
  4858.   è small äëÿ 16-áèòíîãî êîäà, à òàêæå 32-áèòíûå äëÿ DOS è Windows. Òàêæå
  4859.   åñòü âîçìîæíîñòü ïîëó÷åíèÿ âûõîäíîãî ôàéëà â ôîðìàòå OBJ, ÷òî ïîçâîëÿåò
  4860.   ñâÿçûâàòü ïðîãðàììû íà C-- ñ ïðîãðàììàìè íà äðóãèõ ÿçûêàõ.
  4861. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4862.  
  4863.  
  4864. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.2>
  4865.   12.2 Âûõîäíûå ôàéëû òèïà EXE.
  4866. </A></B></FONT><FONT FACE="Courier">
  4867.  
  4868.       Ýòîò ôîðìàò ôàéëà ìîæíî ïîëó÷èòü, åñëè êîìïèëèðîâàòü ñ êëþ÷îì êîìàíäíîé
  4869.   ñòðîêè <b>/exe</b> èëè <b>/e</b>.
  4870.  
  4871.       Âîçìîæíî òàêæå ïîääåðæêà EXE-ôîðìàòà ÷åðåç âûõîäíîé ôàéë ôîðìàòà OBJ,
  4872.   êîòîðûé ìîæíî çàòåì îáðàáîòàòü ëèíêîâùèêîì, íå âõîäÿùèì â ïàêåò C--.
  4873. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4874.  
  4875.  
  4876. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.3>
  4877.   12.3 Âûõîäíîé ôàéë *.EXE ñ ìîäåëüþ ïàìÿòè tiny.
  4878. </A></B></FONT><FONT FACE="Courier">
  4879.  
  4880.       Ôàêòè÷åñêè êîä ôàéëà *.exe ìîäåëè <b>tiny</b> íè÷åì íå îòëè÷àåòñÿ îò êîäà
  4881.   *.com. Â ñóùíîñòè, ýòî òîò æå com-ôàéë, ê êîòîðîìó äîáàâëåí 32-áàéòíûé
  4882.   çàãîëîâîê exe-ôàéëà. Åäèíñòâåííîå îòëè÷èå âîçíèêàåò, êîãäà Âû êîìïèëèðóåòå
  4883.   ôàéë ñ äèðåêòèâîé <b>?resize TRUE</b>. Â com-ôàéëå, ïî ýòîé äèðåêòèâå, â êîä
  4884.   ïðîãðàììû äîáàâëÿåòñÿ ñîîòâåòñòâóþùèé êîä, èçìåíÿþùèé ðàçìåð äîñòóïíîé
  4885.   ïàìÿòè. Â exe-ôàéëå äëÿ ýòèõ öåëåé áóäåò ñêîððåêòèðîâàí çàãîëîâîê
  4886.   exe-ôàéëà.
  4887.  
  4888.       ×òîáû ïîëó÷èòü exe-ôàéë ñ ìîäåëüþ ïàìÿòè <b>tiny</b>, íàäî çàïóñòèòü
  4889.   êîìïèëÿòîð ñ êëþ÷îì â êîìàíäíîé ñòðîêå <b>/TEXE</b>.
  4890. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4891.  
  4892.  
  4893. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.4>
  4894.   12.4 Îáúåêòíûé âûõîäíîé ôàéë OBJ.
  4895. </A></B></FONT><FONT FACE="Courier">
  4896.  
  4897.       Â íàñòîÿùåå âðåìÿ C-- ìîæåò òîëüêî ñîçäàâàòü OBJ-ôàéëû, íî íå ìîæåò èõ
  4898.   êîìïîíîâàòü.
  4899.  
  4900.       Ðàíåå C-- ñîçäàâàë obj-ôàéëû, êîòîðûå ìîãëè áûòü ïîäêëþ÷åíû ê ïðîåêòàì
  4901.   ñîçäàííûì íà äðóãèõ ÿçûêàõ, ò.å. âåäîìûå (slave) ìîäóëè. Ïðè÷åì èç C--
  4902.   ìîäóëåé äëÿ îñíîâíîãî ïðîåêòà áûëè äîñòóïíû òîëüêî ïðîöåäóðû è ýòè
  4903.   ïðîöåäóðû íå äîëæíû áûëè èñïîëüçîâàòü ãëîáàëüíûå ïåðåìåííûå.
  4904.  
  4905.       Òåïåðü æå C-- ìîæåò ñîçäàâàòü îñíîâíîé ìîäóëü (master), êîòîðûé ìîæåò
  4906.   áûòü ñëèíêîâàí â ñàìîñòîÿòåëüíûé ôàéë.
  4907.  
  4908.       Äëÿ obj-ôàéëîâ ïîÿâèëàñü âîçìîæíîñòü èñïîëüçîâàòü âíåøíèå (extern)
  4909.   ïðîöåäóðû, ïåðåìåííûå èëè ñòðóêòóðû. Äëÿ ýòîãî äîñòàòî÷íî èõ îáúÿâèòü êàê
  4910.   extern. Ïðè÷åì êëþ÷åâîå ñëîâî extern äîëæíî áûòü âñåãäà ïåðâûì. Ïðèìåð
  4911.   îáúÿâëåíèÿ âíåøíèõ îáúåêòîâ:
  4912.  
  4913.   extern void cdecl _printf(); // îáúÿâëåíèå âíåøíåé ïðîöåäóðû _printf èìåþùåé
  4914.                                // òèï cdecl  è òèï âîçâðàòà void
  4915.   extern int buts,cubs;        // îáúÿâëåíèå äâóõ âíåøíèõ ïåðåìåííûõ òèïà int
  4916.   extern struct IPXL ipxl;     // îáúÿâëåíèå âíåøíåé ñòðóêòóðû ipxl èìåþùåé òåã
  4917.                              // IPXL,  ïðè÷åì òåã ýòîé ñòðóêòóðû äîëæåí áûòü
  4918.                              // îïèñàí ðàíåå.
  4919.  
  4920.       Ïîÿâëåíèå âîçìîæíîñòè îáúÿâëÿòü âíåøíèå îáúåêòû ïîçâîëÿåò ïîäêëþ÷àòü ê
  4921.   obj-ìîäóëþ íà C-- ìîäóëè íàïèñàííûå íà äðóãèõ ÿçûêàõ èëè ïîäêëþ÷àòü ê
  4922.   ïðîãðàììå íà C-- ïðîöåäóðû èç áèáëèîòåê íà äðóãèõ ÿçûêàõ. Ïðè îáúÿâëåíèè
  4923.   âíåøíèõ îáúåêòîâ î÷åíü âàæíî ïðàâèëüíî óêàçàòü òèï ïðîöåäóðû è åå èìÿ. Åñëè
  4924.   Âû áóäåòå èñïîëüçîâàòü âíåøíèå ïðîöåäóðû, íàïèñàííûå íà C òî ÷àùå âñåãî,
  4925.   Âàì íóæíî áóäåò óêàçûâàòü ìîäèôèêàòîð <b>cdecl</b>, à ê èìåíè ïðîöåäóðû èëè
  4926.   ïåðåìåííîé äîáàâëÿòü ïðåôèêñ <b>_</b>.
  4927.  
  4928.       Èç îñíîâíîãî (master) obj-ôàéëà íàïèñàííîãî íà C-- äëÿ äðóãèõ
  4929.   obj-ìîäóëåé äîñòóïíû âñå ïðîöåäóðû, ãëîáàëüíûå ïåðåìåííûå è ãëîáàëüíûå
  4930.   ñòðóêòóðû.
  4931.  
  4932.       ×òîáû ïîëó÷èòü âåäîìûé obj-ìîäóëü ïðè êîìïèëÿöèè íàäî èñïîëüçîâàòü êëþ÷
  4933.   <b>/sobj</b>.
  4934.  
  4935.       C-- ìîæåò ñîçäàâàòü obj-ôàéëû ñ ìîäåëüþ ïàìÿòè tiny è small. Ïî
  4936.   óìîë÷àíèþ ñîçäàþòñÿ ìîäóëè ñ ìîäåëüþ tiny. ×òîáû ïîëó÷èòü obj-ôàéë ñ
  4937.   ìîäåëüþ ïàìÿòè small íàäî çàïóñòèòü êîìïèëÿòîð ñ êëþ÷àìè <b>/obj è /exe</b>.
  4938.  
  4939.       Äëÿ ñîçäàíèÿ obj-ôàéëîâ äëÿ 32-áèòíîãî DOS â êîìàíäíîé ñòðîêå Âàì
  4940.   íåîáõîäèìî óêàçàòü êëþ÷è <b>/d32 è /obj</b>. Èñïîëüçîâàòü ïîëó÷åííûé obj-ôàéë ìíå
  4941.   óäàëîñü ëèøü ñ ïîìîùüþ wlink è ðàñøèðèòåëÿ zrdx.exe.
  4942.  
  4943.       Ñîçäàíèå obj-ôàéëîâ ïîä windows íå ïðåäóñìîòðåíî.
  4944. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4945.  
  4946.  
  4947. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.5.1>
  4948.   12.5 COM ôàéë symbiosis.
  4949.  
  4950.     12.5.1 ÑÈÌÁÈÎÇ - ÷òî ýòî òàêîå?
  4951. </A></B></FONT><FONT FACE="Courier">
  4952.  
  4953.         Òðàíñëÿòîð C-- èìååò êëþ÷, ïîçâîëÿþùèé äîáàâëÿòü êîìïèëèðóåìóþ
  4954.     ïðîãðàììó ê êîíöó óæå èìåþùåãîñÿ COM ôàéëà. Ýòî íàçûâàþò COM-ôàéë
  4955.     Symbiosis. Êîãäà òàêàÿ ïðîãðàììà çàïóñêàåòñÿ, óïðàâëåíèå ñíà÷àëà ïîëó÷àåò
  4956.     äîáàâëåííûé êîä C--, è òîëüêî ïîñëå âûïîëíåíèÿ åãî ïðîöåäóðû main()
  4957.     óïðàâëåíèå ïîëó÷èò ïåðâîíà÷àëüíûé êîä COM-ôàéëà.
  4958.  
  4959.         Åñëè äîáàâëåííûé âàìè êîä çàâåðøàåòñÿ EXIT() èëè ABORT(), ïðîãðàììà
  4960.     ïðåêðàòèòñÿ, è ïåðâîíà÷àëüíûé êîä COM-ôàéëà íå áóäåò âûïîëíåí. Ýòî
  4961.     ïîçâîëÿåò ïðîãðàììå, äîáàâëåííîé ê COM ôàéëó, îïðåäåëÿòü, áóäåò ëè
  4962.     óïðàâëåíèå ïåðåäàíî íà ïåðâîíà÷àëüíûé êîä.
  4963. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4964.  
  4965.  
  4966. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.5.2>
  4967.     12.5.2 Êàê ýòî äåëàòü.
  4968. </A></B></FONT><FONT FACE="Courier">
  4969.  
  4970.         ×òîáû ñäåëàòü ýòî, Âû äîëæíû èñïîëüçîâàòü êëþ÷ <b>/SYM</b> â êîìàíäíîé
  4971.     ñòðîêå êîìïèëÿòîðà, â êîòîðîé óêàçûâàåòñÿ ïîëíîå èìÿ COM-ôàéëà, ê
  4972.     êîòîðîìó ÷òî-òî äîáàâëÿåòñÿ. Ïðè ýòîì îðèãèíàë COM-ôàéëà íå ìåíÿåòñÿ, à
  4973.     íîâûé ôàéë ñîäåðæèò åãî â ñåáå. Íàïðèìåð, ÷òîáû îòêîìïèëèðîâàòü ïðîãðàììó
  4974.     HELLO.C-- ê êîíöó êîïèè C:\command.ñîì èñïîëüçóþò ñëåäóþùóþ êîìàíäó:
  4975.  
  4976.              C-- /SYM C:\COMMAND.COM HELLO.C--
  4977.  
  4978.     Áóäåò ñîçäàí âûõîäíîé ôàéë HELLO.COM .
  4979. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4980.  
  4981.  
  4982. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.5.3>
  4983.     12.5.3 Èñïîëüçîâàíèå.
  4984. </A></B></FONT><FONT FACE="Courier">
  4985.  
  4986.         Âû ìîæåòå, âåðîÿòíî, ïðèäóìàòü áîëüøîå êîëè÷åñòâî ïóòåé èñïîëüçîâàíèÿ
  4987.     ýòîé ôóíêöèè, òèïà:
  4988.  
  4989.              - Äîáàâëåíèå çàùèòû ñ èñïîëüçîâàíèåì ïàðîëÿ ê íåêîòîðûì
  4990.                ñïåöèàëüíûì COM ôàéëàì.
  4991.              - Óìåíüøåíèå ïàìÿòè, äîñòóïíîé COM ôàéëó ïðè çàïóñêå.
  4992.              - Èíèöèàëèçàöèÿ ðåæèìà âèäåî äëÿ COM ôàéëà.
  4993. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  4994.  
  4995.  
  4996. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.5.4>
  4997.     12.5.4 Çëîóïîòðåáëåíèÿ.
  4998. </A></B></FONT><FONT FACE="Courier">
  4999.  
  5000.         Ëþáîé çëîóìûøëåííèê ìîæåò ïðèäóìàòü è âðåäíûå ïðèìåíåíèÿ äëÿ ýòîé
  5001.     ôóíêöèè. Íàèáîëåå î÷åâèäíîå èç íèõ - ñîçäàíèå òðîÿíñêèõ êîíåé. ß õîòåë áû
  5002.     óêàçàòü, ÷òî ýòî íåêîíñòðóêòèâíîå èñïîëüçîâàíèå C--, è ëþáîå
  5003.     ðàçðóøèòåëüíîå èñïîëüçîâàíèå ñèìáèîçîâ COM-ôàéëîâ çàïðåùåíî.
  5004. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5005.  
  5006.  
  5007. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.6>
  5008.   12.6 SYS - äðàéâåðû óñòðîéñòâ.
  5009. </A></B></FONT><FONT FACE="Courier">
  5010.  
  5011.       Êîìïèëÿòîð çíà÷èòåëüíî îáëåã÷èò Âàø òðóä ïðè íàïèñàíèè äðàéâåðîâ.
  5012.   Êîìïèëÿòîð ñàì ñîçäàñò çàãîëîâîê äðàéâåðà è ïðîöåäóðû <b>ÑÒÐÀÒÅÃÈß</b> è
  5013.   <b>ÏÐÅÐÛÂÀÍÈÅ</b>. Âàì îñòàåòñÿ ëèøü íàïèñàòü êîä îáðàáîòêè êîìàíä.
  5014.  
  5015.       ×òî áû îòêîìïèëèðîâàòü ôàéë äðàéâåðà óñòðîéñòâà, íàäî äîáàâèòü â
  5016.   êîìàíäíóþ ñòðîêó êëþ÷ <b>/SYS</b>. Êðîìå òîãî, ïîÿâèëèñü íîâûå äèðåêòèâû
  5017.   êîìïèëÿòîðó, êîòîðûå äåéñòâóþò òîëüêî ñ ýòèì êëþ÷îì. Âîò îíè:
  5018.  
  5019.       <b>?sysattribute çíà÷åíèå</b>  - ýòà  äèðåêòèâà ïåðåäàåò  êîìïèëÿòîðó
  5020.   àòðèáóò ñîçäàâàåìîãî äðàéâåðà. Ïî óìîë÷àíèþ óñòàíàâëèâàåòñÿ çíà÷åíèå
  5021.   0x2000.
  5022.  
  5023.       <b>?sysname <òåêñòîâàÿ  ñòðîêà></b> -  ýòà äèðåêòèâà  ïåðåäàåò êîìïèëÿòîðó
  5024.   èìÿ áóäóùåãî äðàéâåðà. Ïî óìîë÷àíèþ ïðèñâàèâàåòñÿ èìÿ "NO_NAME". Äëèíà
  5025.   èìåíè  íå áîëåå 8 ñèìâîëîâ.
  5026.  
  5027.       <b>?syscommand command_0,command_1, ... command_n;</b> - ýòà äèðåêòèâà
  5028.   ÿâëÿåòñÿ îáÿçàòåëüíîé. Ïî ýòîé äèðåêòèâå êîìïèëÿòîðó ïåðåäàåòñÿ ñïèñîê èìåí
  5029.   ïðîöåäóð îáðàáîòêè êîìàíä äðàéâåðà. Èìåíà ðàçäåëåíû çàïÿòûìè. Ñïèñîê äîëæåí
  5030.   çàêàí÷èâàòüñÿ ñèìâîëîì òî÷êà-ñ-çàïÿòîé. Ìîæíî ïåðåäàòü íå áîëåå 25 êîìàíä.
  5031.   Åñëè êàêàÿ-òî êîìàíäà íå èìååò êîäà ïîääåðæêè, òî â ñïèñîê íàäî çàïèñàòü
  5032.   ñëîâî NONE.
  5033.  
  5034.       Ïî óìîë÷àíèþ êîìïèëÿòîð äëÿ äðàéâåðà íå ñîçäàåò ñòåê. Äðàéâåð ìîæåò
  5035.   ïîëüçîâàòüñÿ ñèñòåìíûì ñòåêîì. Íî, ãîâîðÿò, ÷òî îí èìååò ìàëåíüêóþ ãëóáèíó.
  5036.   Åñëè Âàøè ïðîöåäóðû àêòèâíî èñïîëüçóþò ñòåê, è Âû íå íàäååòåñü íà ñèñòåìíûé,
  5037.   òî äèðåêòèâîé ?stack <âåëè÷èíà> ìîæíî çàñòàâèòü äðàéâåð ïîëüçîâàòüñÿ ñâîèì
  5038.   ñòåêîì.
  5039.  
  5040.       Âàøèì ïðîöåäóðàì îáðàáîòêè êîìàíä ïðè ïåðåäà÷å óïðàâëåíèÿ â ðåãèñòðàõ
  5041.   ES:BX áóäåò ïåðåäàí àäðåñ çàãîëîâêà çàïðîñà. Ðåãèñòð DS ðàâåí CS. Ïðè
  5042.   âîçâðàòå óïðàâëåíèÿ âàøè ïðîöåäóðû äîëæíû ñîõðàíèòü ðåãèñòð DS. Â ðåãèñòðå
  5043.   AX äîëæåí íàõîäèòüñÿ êîä âîçâðàòà. Îñòàëüíûå ðåãèñòðû ìîãóò áûòü
  5044.   èñïîëüçîâàíû ïðîèçâîëüíûì îáðàçîì.
  5045.  
  5046.       Ïðîöåäóðó îáðàáîòêè êîìàíäû èíèöèàëèçàöèè æåëàòåëüíî ðàñïîëàãàòü
  5047.   ïîñëåäíåé (÷òîáû èìåòü âîçìîæíîñòü îòäàòü àäðåñíîå ïðîñòðàíñòâî çàíèìàåìîå
  5048.   ýòîé ïðîöåäóðîé îïåðàöèîííîé ñèñòåìå). Ïåðåä ýòîé ïðîöåäóðîé, åñëè Âû â
  5049.   äðóãèõ ïðîöåäóðàõ îáðàáîòêè êîìàíä èñïîëüçóåòå äèíàìè÷åñêèå ïðîöåäóðû,
  5050.   îáÿçàòåëüíî äîëæíà áûòü äèðåêòèâà <b>?setdinproc</b>. Ãëîáàëüíûå ïåðåìåííûå äîëæíû
  5051.   áûòü îáÿçàòåëüíî ïðîèíèöèàëèçèðîâàíû.
  5052. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5053.  
  5054.  
  5055. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.7>
  5056.   12.7 Êîìïèëÿöèÿ êîäà ðàñøèðèòåëåé ROM-BIOS.
  5057. </A></B></FONT><FONT FACE="Courier">
  5058.  
  5059.       Ðàñøèðèòåëè ROM-BIOS (BIOS âèäåîêîíòðîëëåðîâ, ñåòåâûõ êàðò...) èìåþò
  5060.   îïðåäåëåííóþ ñòðóêòóðó è òðåáîâàíèÿ. C-- òåïåðü ìîæåò îáëåã÷èòü Âàì ïðîöåññ
  5061.   ñîçäàíèÿ êîäà ROM-BIOS. Åñëè çàïóñòèòü êîìïèëÿòîð íà êîìïèëÿöèþ ñ êëþ÷îì
  5062.   êîìàíäíîé ñòðîêè <b>/ROM</b>, òî êîìïèëÿòîð ñîçäàñò ñèãíàòóðó (çàãîëîâîê)
  5063.   ROM-BIOS, çàïîëíèò îñòàâøååñÿ ñâîáîäíîå ìåñòî äî óêàçàííîãî ðàçìåðà ÏÇÓ
  5064.   êîäîì çàïîëíåíèÿ, ïîäñ÷èòàåò è ñêîððåêòèðóåò êîíòðîëüíóþ ñóììó ÏÇÓ.
  5065.  
  5066.       Äëÿ ýòîãî ðåæèìà êîìïèëÿöèè åñòü íåñêîëüêî ñïåöèôè÷åñêèõ äèðåêòèâ:
  5067.  
  5068.     1.  <b>?sizerom value</b> - ýòà äèðåêòèâà ñîîáùàåò êîìïèëÿòîðó ðàçìåð ÏÇÓ â
  5069.   áàéòàõ. Åñëè ýòà äèðåêòèâà íå óêàçàíà, òî êîìïèëÿòîð ñàì âûáåðåò
  5070.   ìèíèìàëüíûé ïîäõîäÿùèé ðàçìåð ÏÇÓ èç ðÿäà: 1024, 2048, 4096, 8192, 16384,
  5071.   32762 èëè 65536. Ñâîáîäíîå îò êîäà è äàííûõ ìåñòî áóäóò çàïîëíåíû äî êîíöà
  5072.   ðàçìåðà ÏÇÓ áàéòîì çàïîëíåíèÿ îïðåäåëÿåìîãî äèðåêòèâîé <b>?aligner</b>. Ïî
  5073.   óìîë÷àíèþ îí ðàâåí íóëþ, äëÿ ÐÏÇÓ òèïà 27õõõ ýòîò áàéò èìååò ñìûñë ñäåëàòü
  5074.   ðàâíûì 0xFF. Ïîñëåäíèé áàéò ÏÇÓ áóäåò ñêîððåêòèðîâàí êîìïèëÿòîðîì òàêèì
  5075.   îáðàçîì, ÷òîáû êîíòðîëüíàÿ ñóììà ðàâíÿëàñü íóëþ.
  5076.  
  5077.     2.  <b>?movedatarom TRUE/FALSE</b> - ýòà äèðåêòèâà ñîîáùàåò êîìïèëÿòîðó åñòü ëè
  5078.   íåîáõîäèìîñòü êîïèðîâàòü äàííûå èç ÏÇÓ â ÎÇÓ. Ïî óìîë÷àíèþ îíà óñòàíîâëåíà
  5079.   â <b>FALSE</b>. Åñëè ýòó äèðåêòèâó îïðåäåëèòü <b>TRUE</b>, òî êîìïèëÿòîð âñòàâèò â
  5080.   îáëàñòü èíèöèàëèçàöèè êîä ïåðåìåùàþùèé äàííûå èç ÏÇÓ â ÎÇÓ. Ïðè ýòîì
  5081.   ðåãèñòð DS áóäåò óñòàíîâëåí íà ñåãìåíò ÎÇÓ. Ñòåê òàêæå áóäåò ïåðåóñòàíîâëåí
  5082.   íà ýòîò ñåãìåíò. Òàêèì îáðàçîì, ïðîöåäóðà main ïîëó÷èò óïðàâëåíèå ñ
  5083.   ðåãèñòðàìè <b>AX = ES = DS = SS = ñåãìåíòó ÎÇÓ ñ ïåðåíåñåííûìè â íåãî äàííûìè</b>.
  5084.   Åñëè ýòó äèðåêòèâó óñòàíîâèòü â <b>FALSE</b>, ðåãèñòð DS âñå ðàâíî áóäåò
  5085.   ïåðåóñòàíîâëåí íà àäðåñ ñåãìåíòà ÎÇÓ, òàê êàê Âàø êîä áóäåò èñïîëüçîâàòü
  5086.   ýòîò ñåãìåíò äëÿ íåèíèöèàëèçèðîâàííûõ ãëîáàëüíûõ ïåðåìåííûõ.
  5087.   Èíèöèàëèçèðîâàííûå ïåðåìåííûå îñòàíóòñÿ â ÏÇÓ è âñå îáðàùåíèÿ ê íèì áóäóò
  5088.   ïðîèçâîäèòüñÿ ÷åðåç ðåãèñòð CS. Òàê æå îñòàíåòñÿ íå òðîíóòûì (òàêèì, êàêèì
  5089.   åãî óñòàíîâèë ãëàâíûé BIOS) è ñòåê.
  5090.  
  5091.     3.  <b>?dataseg value</b> - ýòîé äèðåêòèâîé êîìïèëÿòîðó ñîîáùàåòñÿ ñåãìåíòíûé
  5092.   àäðåñ ÎÇÓ, êîòîðûé ìîæåò áûòü èñïîëüçîâàí âàøèì êîäîì. Ïî óìîë÷àíèþ îí
  5093.   ðàâåí 0x70. Ýòîò àäðåñ âû ìîæåòå óçíàòü â ëþáîé ìîìåíò, ñ÷èòàâ åãî èç âàøåãî
  5094.   êîäà ïî ñìåùåíèþ 4. Íàïðèìåð: DS = CSWORD[4];
  5095.  
  5096.       Íåêîòîðûå çàìå÷àíèÿ:
  5097.  
  5098.     1.  Íå çàáûâàéòå, ÷òî â ìîìåíò èíèöèàëèçàöèè ROM-BIOS, DOS åùå íå
  5099.   çàãðóæåí, è ñîîòâåòñòâåííî âñå ïðîöåäóðû èñïîëüçóþùèå âûçîâû DOS ðàáîòàòü
  5100.   íå áóäóò.
  5101.  
  5102.     2. Íåëüçÿ çàâåðøàòü ðàáîòó ïðîãðàììû ïðîöåäóðàìè <b>ABORT()</b> èëè <b>EXIT()</b> è èì
  5103.   ïîäîáíûì. Ðàáîòà ðàñøèðèòåëÿ ROM-BIOS äîëæíà çàâåðøàòüñÿ òîëüêî âûõîäîì èç
  5104.   ïðîöåäóðû main().
  5105.  
  5106.     3. Åñëè äèðåêòèâà <b>?movedatarom</b> óñòàíîâëåíà â <b>FALSE</b>, òî áóäüòå âíèìàòåëüíû
  5107.   ïðè ðàáîòå ñ èíèöèàëèçèðîâàííûìè ïåðåìåííûìè. Îíè â ýòîì ðåæèìå äîñòóïíû
  5108.   òîëüêî äëÿ ÷òåíèÿ, è àäðåñóþòñÿ ÷åðåç ðåãèñòð CS.
  5109. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5110.  
  5111.  
  5112. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.8.1>
  5113.   12.8 32-áèòíûå ôàéëû.
  5114.  
  5115.     12.8.1 32-áèòíûé êîä ïîä DOS.
  5116. </A></B></FONT><FONT FACE="Courier">
  5117.  
  5118.         Äëÿ òîãî ÷òîáû îòêîìïèëèðîâàòü 32-áèòíóþ ïðîãðàììó ïîä DOS íàäî
  5119.     çàïóñòèòü êîìïèëÿòîð ñ êëþ÷îì êîìàíäíîé ñòðîêè <b>/d32</b>. Íî ðàáîòà 32-áèòíîé
  5120.     ïðîãðàììû ïîä DOS-îì íåâîçìîæíà áåç ðàñøèðèòåëÿ DOS. Äëÿ C-- ìîæíî
  5121.     èñïîëüçîâàòü DOS4GW èëè zrdx.exe èëè ëþáîé äðóãîé ðàñøèðèòåëü DOS. ×òîáû
  5122.     êîìïèëÿòîð çíàë, ãäå èñêàòü <b>stub</b> ôàéë è åãî èìÿ, íàäî â ôàéë c--.ini
  5123.     ïðîïèñàòü ñòðîêó stub=path_name_to_stub_file.  Ïðèìåð:
  5124.  
  5125.         stub=c:\c--\zrdx.exe
  5126.  
  5127.         Åñëè íå äîáàâëÿòü â c--.ini ýòó ñòðîêó, òî êîìïèëÿòîð ñãåíåðèðóåò
  5128.     32-áèòíûé exe-ôàéë, íî áåç ðàñøèðèòåëÿ DOS. Åñëè â êîìàíäíîé ñòðîêå
  5129.     âìåñòå ñ êëþ÷îì <b>/d32</b> óêàçàòü è êëþ÷ <b>/ns</b>, òî ñòðîêà ñ ïåðåìåííîé stub èç
  5130.     ôàéëà c--.ini áóäåò àííóëèðîâàíà, è âû ïîëó÷èòå ôàéë áåç ðàñøèðèòåëÿ DOS.
  5131.  
  5132.         Äëÿ 32-áèòíîãî DOS-ôàéëà ìîæíî èñïîëüçîâàòü äèðåêòèâû êîìïèëÿòîðà
  5133.     ?parsecommandline TRUE/FALSE èëè åãî ðàñøèðåííûé âàðèàíò <b>?argc
  5134.     TRUE/FALSE</b>.  Ðåàëèçîâàíà è ïîääåðæêà äèðåêòèâû <b>?atexit TRUE/FALSE</b>.
  5135.  
  5136.         Ñåé÷àñ äëÿ 32-áèòíûõ DOS-ôàéëîâ èñïîëüçóåòñÿ LE-ôîðìàò. Òàê êàê LE
  5137.     ôîðìàò ÿâëÿåòñÿ ñòàíäàðòíûì, òî òåïåðü ìîæíî èñïîëüçîâàòü ïî÷òè ëþáîé
  5138.     stub, ïîíèìàþùèé ýòîò ôîðìàò. Ôàéëû LE ôîðìàòà ìîæíî ñæèìàòü ïðîãðàììàìè
  5139.     òèïà UPX.EXE è åé ïîäîáíûìè.
  5140.  
  5141.         Åñëè Âû èñïîëüçóåòå stub, êîòîðûé çàòåì çàãðóæàåò DOS4GW.EXE, òî
  5142.     íà÷àëî Âàøåé ïðîãðàììû äîëæíî èìåòü ñïåöèàëüíóþ ñèãíàòóðó. Êîìïèëÿòîð
  5143.     àâòîìàòè÷åñêè ñôîðìèðóåò åå, åñëè Âû â êîìàíäíîé ñòðîêå èëè â c--.ini
  5144.     ôàéëå óêàæåòå êëþ÷ <b>/DOS4GW</b>. Òàêîé êëþ÷ Âàì íåîáõîäèìî áóäåò ïðèìåíÿòü,
  5145.     åñëè Âû áóäåòå èñïîëüçîâàòü â êà÷åñòâå stub 4gs.exe.
  5146.  
  5147.         Ñóùåñòâóåò òàêæå ïîääåðæêà áëîêà êîäà èñïîëüçóþùåãî äëÿ ïåðåõîäà è
  5148.     ðàáîòû â 32-áèòíîì ðåæèìå âîçìîæíîñòè DPMI ñåðâèñà. Èñõîäíûé òåêñò ýòîãî
  5149.     áëîêà íàõîäèòñÿ â ôàéëå startup.h-- è êîìïèëèðóåòñÿ, åñëè â êîìàíäíîé
  5150.     ñòðîêå óêàçàíà îïöèÿ <b>/stub=dpmi</b> èëè â ôàéëå c--.ini íàïèñàòü ñòðîêó
  5151.     <b>stub=dpmi</b>.  Íåäîñòàòêîì ýòîãî ñïîñîáà ïåðåõîäà è ðàáîòû â 32-áèòíîì
  5152.     ðåæèìå ÿâëÿþòñÿ íåîáõîäèìîñòü îáÿçàòåëüíîãî ôóíêöèîíèðîâàíèÿ íà
  5153.     çàïóñêàåìîì êîìïüþòåðå DPMI ñåðâèñà. Òàê êàê, ïðîãðàììà çàãðóæàåòñÿ êàê
  5154.     îáû÷íàÿ DOS ïðîãðàììà, è ëèøü â ïðîöåññå ðàáîòû ïåðåõîäèò â 32-áèòíûé
  5155.     ðåæèì ðàáîòû, ðàçìåð ïðîãðàììû îãðàíè÷åí ðàçìåðîì ñâîáîäíîé DOS ïàìÿòè.
  5156.     Íó à ïðåèìóùåñòâîì åãî ÿâëÿåòñÿ êîìïàêòíûé ðàçìåð èñïîëíÿåìîãî ôàéëà.
  5157. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5158.  
  5159.  
  5160. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.8.2>
  5161.     12.8.2 32-áèòíûé êîä ïîä Windows.
  5162. </A></B></FONT><FONT FACE="Courier">
  5163.  
  5164.         Äëÿ òîãî ÷òîáû îòêîìïèëèðîâàòü ïðîãðàììó, íàïèñàííóþ ïîä Windows íàäî
  5165.     çàïóñòèòü êîìïèëÿòîð ñ êëþ÷îì êîìàíäíîé ñòðîêè <b>/w32</b>.
  5166.  
  5167.         Åñëè Âû â ñâîåé ïðîãðàììå èñïîëüçóåòå âûçîâû API-ïðîöåäóð, òî ýòè
  5168.     ïðîöåäóðû íàäî ïðåäâàðèòåëüíî îáÿçàòåëüíî îáúÿâèòü. Îáúÿâëåíèå ïðîöåäóð
  5169.     èìååò ñëåäóþùóþ ôîðìó:
  5170.  
  5171.     extern WINAPI "DLL_name"
  5172.     {
  5173.         returncode procname1();
  5174.         returncode procname2();
  5175.         procname3();
  5176.     }
  5177.  
  5178.       ãäå:
  5179.            DLL_name - èìÿ è ðàñøèðåíèå dll-áèáëèîòåêè, â êîòîðîé íàõîäÿòñÿ ýòè
  5180.                       ïðîöåäóðû.
  5181.          returncode - òèï âîçâðàòà èç api-ïðîöåäóð. Ïî óìîë÷àíèþ îí ðàâåí dword.
  5182.  
  5183.         Ïðîãðàììû, íàïèñàííûå ïîä Windows, èìåþò îäíó íåìàëîâàæíóþ
  5184.     îñîáåííîñòü - âñå ïàðàìåòðû â ñòåêîâûå ïðîöåäóðû ïåðåäàþòñÿ â îáðàòíîì
  5185.     ïîðÿäêå (òàê íàçûâàåìûé C-ñòèëü), íî î÷èñòêà ñòåêà îò ïàðàìåòðîâ
  5186.     ïðîèñõîäèò â ñàìèõ ïðîöåäóðàõ. Ïîëó÷àåòñÿ ñâîåîáðàçíûé ãèáðèä <b>C è pascal</b>
  5187.     ñòèëåé - <b>stdcall</b>.
  5188.  
  5189.         Ñ ïîìîùþ êëþ÷à <b>/W32C</b> êîìïèëÿòîð ñîçäàåò êîíñîëüíûé ôàéë ïîä Windows.
  5190.  
  5191.         Åñëè ïðè êîìïèëÿöèè óêàçûâàëè îïöèþ êîìàíäíîé ñòðîêè <b>/j0</b> èëè
  5192.     äèðåêòèâó <b>#jumptomain NONE</b>, òî Âàøà ïðîãðàììà áóäåò êîìïèëèðîâàòüñÿ áåç
  5193.     èñïîëüçîâàíèÿ êîäà íà÷àëüíîé èíèöèàëèçàöèè, îïèñàíèå êîòîðîãî íàõîäèòñÿ â
  5194.     ôàéëå startup.h--.
  5195.  
  5196.         Êîä íà÷àëüíîé èíèöèàëèçàöèè äëÿ ïðîãðàìì ïîä Windows èìååò ñëåäóþùèé
  5197.     âèä:
  5198.  
  5199.         hThisInst=GetModuleHandleA(0);
  5200.       #ifdef __CONSOLE__
  5201.         hStdOut=GetStdHandle(-11);
  5202.       #endif
  5203.         lpszArgs=GetCommandLineA();
  5204.       #ifdef __environ;
  5205.         environ=GetEnvironmentStringsA();
  5206.       #endif
  5207.         main();
  5208.         ExitProcess(EAX);
  5209.  
  5210.         Òàêèì îáðàçîì, â ãëîáàëüíûõ ïåðåìåííûõ <b>hThisInst</b> áóäåò íàõîäèòñÿ
  5211.     handl çàïóùåííîãî ôàéëà, à â <b>lpszArgs</b> àäðåñ êîìàíäíîé ñòðîêè Âàøåãî
  5212.     ôàéëà. Åñëè Âû â êîìàíäíîé ñòðîêå óêàçàëè îïöèè <b>/p</b> èëè <b>/argc</b> èëè â
  5213.     íà÷àëå âàøåãî ôàéëà åñòü äèðåêòèâû <b>#parsecommandline TRUE</b> èëè <b>argc TRUE</b>,
  5214.         òî êîìïèëÿòîð ñîçäàñò äîïîëíèòåëüíûé êîä ñäåëàþùèé ðàçáîðêó ýòîé
  5215.     êîìàíäíîé ñòðîêè íà ÷àñòè. Åñëè Âû êîìïèëèðóåòå êîíñîëüíóþ ïðîãðàììó, òî
  5216.     â âàøåé ïðîãðàììå áóäåò åùå îäíà ãëîáàëüíàÿ ïåðåìåííàÿ - <b>hStdOut</b>. Â ýòîé
  5217.     ïåðåìåííîé õðàíèòñÿ handl ñòàíäàðòíîãî âûâîäà (ýêðàíà). Åñëè Âû ïðè
  5218.     êîìïèëÿöèè ïðîãðàììû óêàçàëè îïöèþ <b>/env</b>, òî â ãëîáàëüíîé ïåðåìåííîé
  5219.     <b>environ</b> õðàíèòñÿ àäðåñ ïåðåìåííîé îêðóæåíèÿ ïðîãðàììû.
  5220.  
  5221.         Ïîñëå çàâåðøåíèÿ ðàáîòû ïðîöåäóðû <b>main</b> âûïîëíÿòñÿ ïðîöåäóðà
  5222.     <b>ExitProcess</b>, êîòîðîé â êà÷åñòâå ïàðàìåòðà ïåðåäàåòñÿ ðåãèñòð EAX. Ò.î.
  5223.     Âàì äëÿ çàâåðøåíèÿ ðàáîòû ïðîãðàììû áóäåò äîñòàòî÷íî ñäåëàòü âûõîä èç
  5224.     ïðîöåäóðû <b>main</b>, ïðåäâàðèòåëüíî çàãðóçèâ â ðåãèñòð EAX íóæíûé Âàì êîä
  5225.     âîçâðàòà.
  5226.  
  5227.         Íåêîòîðûå êîìïèëÿòîðû ñîçäàþò DLL, â êîòîðûõ èìåíà ýêñïîðòèðóåìûõ
  5228.     ïðîöåäóð èìåþò òàêîé ôîðìàò:
  5229.  
  5230.        ProcName@8
  5231.  
  5232.         Â ýòîì èìåíè ïîñëå ñèìâîëà <b>@</b> óêàçûâàåòñÿ ðàçìåð ñòåêà ñ
  5233.     ïàðàìåòðàìè, ïåðåäàâàåìûõ ïðîöåäóðå.
  5234.  
  5235.         Îáúÿâëÿòü òàêèå ïðîöåäóðû íóæíî òàê:
  5236.  
  5237.     extern WINAPI "name.dll"
  5238.     {
  5239.        ProcName@8 ;
  5240.     }
  5241.  
  5242.     ò.å. áåç êðóãëûõ ñêîáîê. Â ïðîãðàììå, ïðè îáðàùåíèè ê òàêîé ïðîöåäóðå, åå
  5243.     èìÿ íàäî ïèñàòü áåç ñóôôèêñà @8, ò.å. âîò òàê - ProcName(param1,param2);
  5244. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5245.  
  5246.  
  5247. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.8.3>
  5248.     12.8.3 Âûçîâ API ïðîöåäóð ïî îðäèíàëàì.
  5249. </A></B></FONT><FONT FACE="Courier">
  5250.  
  5251.          äèíàìè÷åñêè ïîäêëþ÷àåìûõ áèáëèîòåêàõ (DLL) êàæäîé ïðîöåäóðå, êðîìå
  5252.     åå èìåíè, ñîîòâåòñòâóåò óíèêàëüíîå ÷èñëî, êîòîðîå íàçûâàåòñÿ îðäèíàëîì. È
  5253.     ïîýòîìó, êðîìå îáùåïðèíÿòîãî âûçîâà API-ïðîöåäóðû ïî èìåíè, ìîæíî äåëàòü
  5254.     âûçîâ è ïî îðäèíàëó. Òåîðåòè÷åñêè, ïðè èñïîëüçîâàíèè âûçîâà ïî îðäèíàëó,
  5255.     çàãðóçêà ôàéëà äîëæíà ïðîèñõîäèòü áûñòðåå. Òàê êàê â âûõîäíîé ôàéë íå
  5256.     áóäóò âêëþ÷åíû ñïèñêè èìåí ïðîöåäóð, âûçîâ êîòîðûõ ïðîèçâîäèòñÿ ïî
  5257.     îðäèíàëàì, òî âûõîäíîé ôàéë ìîæåò ïîëó÷èòüñÿ íåìíîãî ìåíüøèì ïî ðàçìåðó.
  5258.  
  5259.         ×òîáû êîìïèëÿòîð ñîçäàë ôàéë, èñïîëüçóþùèé âûçîâ API-ïðîöåäóð ïî
  5260.     îðäèíàëàì, íàäî ñäåëàòü äâå âåùè:
  5261.  
  5262.      1. Ðàçðåøèòü êîìïèëÿòîðó ýòî äåëàòü. Äëÿ ýòîãî íàäî â îïöèÿõ êîìàíäíîé
  5263.     ñòðîêè (èëè â ôàéëå C--.INI) óêàçàòü êëþ÷ <b>WO</b>.
  5264.  
  5265.      2. Ñîîáùèòü êîìïèëÿòîðó - êàêîé íîìåð îðäèíàëà ñîîòâåòñòâóåò êàêîìó
  5266.     èìåíè ïðîöåäóðû. Ïðîöåäóðû, äëÿ êîòîðûõ íå áûë óêàçàí îðäèíàë, áóäåò
  5267.     ñîçäàí âûçîâ ïî èìåíè. Óñòàíîâèòü ñîîòâåòñòâèå èìåí ïðîöåäóð îðäèíàëó
  5268.     ìîæíî äâóìÿ ñïîñîáàìè:
  5269.  
  5270.         a). Àâòîìàòè÷åñêè, ñ ïîìîùüþ îïöèè êîìàíäíîé ñòðîêè <b>IND=name.dll</b>,
  5271.         ïî êîòîðîé êîìïèëÿòîð ïðîñêàíèðóåò ýòó áèáëèîòåêó è èìïîðòèðóåò èç
  5272.         íåå âñå èìåíà è îðäèíàëû ïðîöåäóð. (Èìïîðò âîçìîæåò òîëüêî èç
  5273.         áèáëèîòåê èìåþùèõ ôîðìàò PE).
  5274.  
  5275.         b).  ðó÷íóþ óêàçàòü â îáúÿâëåíèè API-ïðîöåäóð è åå îðäèíàë. Äåëàåòñÿ
  5276.         ýòî òàê: ïîñëå èìåíè ïðîöåäóðû ñòàâèòñÿ òî÷êà, à çà íåé óêàçûâàåòñÿ
  5277.         íîìåð îðäèíàëà. Âîò ïðèìåð îáúÿâëåíèÿ API-ïðîöåäóðû ñ óêàçàíèåì åå
  5278.         îðäèíàëà:
  5279.  
  5280.     extern WINAPI "user32.dll"
  5281.     {
  5282.       ............
  5283.       long  MessageBoxA.429();
  5284.       ............
  5285.     }
  5286.  
  5287.         Â áèáëèîòåêàõ (DLL), èíîãäà ñóùåñòâóþò ïðîöåäóðû, äëÿ êîòîðûõ íå
  5288.     óêàçàíî èõ èìÿ, íî óêàçàí íîìåð îðäèíàëà. Âûçîâ òàêèõ ïðîöåäóð ïî èìåíè
  5289.     íå âîçìîæåí, íî ìîæíî ýòî ñäåëàòü ïî îðäèíàëó (åñëè, êîíå÷íî Âû çíàåòå,
  5290.     äëÿ ÷åãî ýòà ïðîöåäóðà è ÷òî îíà äåëàåò). Äëÿ ýòîãî â îáúÿâëåíèè
  5291.     API-ïðîöåäóðû Âàì íàäî ïðèäóìàòü äëÿ ýòîé ïðîöåäóðû óíèêàëüíîå èìÿ è
  5292.     óêàçàòü ðåàëüíûé îðäèíàë. Çàòåì â ïðîãðàììå Âû áóäåòå îáðàùàòüñÿ ê ýòîé
  5293.     ïðîöåäóðå ïî âûìûøëåííîìó èìåíè. Íî åñëè Âû ñëó÷àéíî îòêîìïèëèðóåòå òàêîé
  5294.     ôàéë áåç êëþ÷à <b>WO</b>, òî ïðè çàïóñêå ýòîé ïðîãðàììû Âû ïîëó÷èòå ñîîáùåíèå,
  5295.     î òîì, ÷òî äàííîãî èìåíè â áèáëèîòåêå íåò.
  5296.  
  5297.         Ê ñîæàëåíèþ, íåò íèêàêèõ ãàðàíòèé òîãî, ÷òî íîìåð îðäèíàëà äëÿ äàííîé
  5298.     ïðîöåäóðû íå èçìåíèòñÿ ïðè ñìåíå âåðñèè äèíàìè÷åñêîé áèáëèîòåêè. Ïîýòîìó
  5299.     èñïîëüçîâàòü îðäèíàëû íàäî îñòîðîæíî.
  5300. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5301.  
  5302.  
  5303. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.8.4>
  5304.     12.8.4 Ñîçäàíèå DLL ïîä Windows.
  5305. </A></B></FONT><FONT FACE="Courier">
  5306.  
  5307.         Äèíàìè÷åñêè ïîäêëþ÷àåìûå áèáëèîòåêè ïîçâîëÿò ïîëó÷àòü áîëåå
  5308.     êîìïàêòíûå ïðîãðàììû è óñêîðèòü ïðîöåññ êîìïèëÿöèè. Ê ìèíóñàì
  5309.     èñïîëüçîâàíèÿ DLL ìîæíî îòíåñòè íåîáõîäèìîñòü íàëè÷èÿ ñàìèõ ôàéëîâ DLL íà
  5310.     çàïóñêàåìîì êîìïüþòåðå è íåìíîãî óâåëè÷èâàåòñÿ âðåìÿ çàïóñêà ïðîãðàììû.
  5311.  
  5312.         Äëÿ òîãî ÷òîáû ïðîöåäóðà ñòàëà äîñòóïíîé äëÿ äðóãèõ ïðîãðàìì íàäî â
  5313.     èñõîäíîì òåêñòå ïåðåä èìåíåì ïðîöåäóðû ïðîïèñàòü êëþ÷åâîå ñëîâî - <b>_export</b>.
  5314.     Ïðèìåð:
  5315.  
  5316.       void _export testproc()
  5317.       {
  5318.         ....
  5319.       }
  5320.  
  5321.         Äëÿ òîãî ÷òîáû ñîçäàòü DLL, íóæíî íàïèñàòü ôàéë, â êîòîðîì áóäóò
  5322.     ïðîöåäóðû ñ êëþ÷åâûìè ñëîâàìè <b>_export</b>. Âñïîìîãàòåëüíûå ïðîöåäóðû, êîòîðûå
  5323.     ìîãóò ïîíàäîáèòüñÿ äëÿ ðàáîòû îñíîâíûõ ýêñïîðòèðóåìûõ ïðîöåäóð, îáúÿâëÿòü
  5324.     êàê <b>_export</b> íåîáÿçàòåëüíî. Çàòåì ýòîò ôàéë íóæíî îòêîìïèëèðîâàòü ñ êëþ÷îì
  5325.     /dll.  Â ðåçóëüòàòå Âû ïîëó÷èòå ãîòîâóþ äèíàìè÷åñêè ïîäêëþ÷àåìóþ
  5326.     áèáëèîòåêó.
  5327. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5328.  
  5329.  
  5330. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.8.5>
  5331.     12.8.5 Èíèöèàëèçàöèÿ DLL ïðè çàãðóçêå.
  5332. </A></B></FONT><FONT FACE="Courier">
  5333.  
  5334.         Èíîãäà, äëÿ ðàáîòû ïðîöåäóð èç äèíàìè÷åñêèõ áèáëèîòåê (DLL), áûâàåò
  5335.     íåîáõîäèìûì èíèöèàëèçèðîâàòü íåêîòîðûå ïåðåìåííûå çíà÷åíèÿìè, çàâèñÿùèìè
  5336.     îò òåêóùåãî ñîñòîÿíèÿ îïåðàöèîííîé ñèñòåìû, íàïðèìåð, ïîëó÷èòü äåñêðèïòîð
  5337.     ýòîé áèáëèîòåêè.
  5338.  
  5339.       Äèðåêòèâîé <b>#jumptomain NONE (-j0)</b> óïðàâëåíèå ïðè çàïóñêå ïåðåäàåòñÿ
  5340.     ñðàçó íà ïðîöåäóðó main.
  5341.  
  5342.       Âî âñåõ îñòàëüíûõ ñëó÷àÿõ ãåíåðèðóåòñÿ êîä çàãëóøêè è óïðàâëåíèå íà
  5343.     ïðîöåäóðó main íå ïåðåäàåòñÿ. Ôàêòè÷åñêè ïðîöåäóðà main â ýòîì ñëó÷àå íå
  5344.     íóæíà.
  5345.  
  5346.       Ïðîöåäóðà main ïðè ñîçäàíèè ôàéëîâ DLL äîëæíà âûãëÿäåòü íåìíîãî èíà÷å,
  5347.     ÷åì â äðóãèõ ñëó÷àÿõ:
  5348.  
  5349.     dword main ( dword hInstDLL, reason, reserv )
  5350.     {
  5351.       ...
  5352.     }
  5353. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5354.  
  5355.  
  5356. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.8.6>
  5357.     12.8.6 Êîìïèëÿöèÿ ðåñóðñîâ.
  5358. </A></B></FONT><FONT FACE="Courier">
  5359.  
  5360.         Âñòðîåííûé â C-- êîìïèëÿòîð ðåñóðñîâ ïî ñâîèì âîçìîæíîñòÿì óñòóïàåò
  5361.     ñïåöèàëèçèðîâàííûì êîìïèëÿòîðàì ðåñóðñîâ, íî ýòèõ âîçìîæíîñòåé, êàê ìíå
  5362.     êàæåòñÿ, áóäåò äîñòàòî÷íî äëÿ áîëüøèíñòâà Âàøèõ çàäà÷.
  5363.  
  5364.         Áóäåò ïðîùå ïåðå÷èñëèòü òî, ÷òî âñòðîåííûé â C-- êîìïèëÿòîð ðåñóðñîâ
  5365.     íå óìååò äåëàòü. Íå îáðàáàòûâàþòñÿ îïåðàòîðû ðåñóðñîâ: <b>VERSION</b>,
  5366.     <b>VERSIONINFO</b> è îïðåäåëÿåìûå ïîëüçîâàòåëåì ðåñóðñû. Ïðè íåîáõîäèìîñòè,
  5367.     äàííûå, ââîäèìûå ñ ïîìîùüþ ýòèõ îïåðàòîðîâ, ìîæíî ââåñòè ñ ïîìîùüþ
  5368.     îïåðàòîðà <b>RCDATA</b>. Ó ìíîãèõ îïåðàòîðîâ ðåñóðñîâ åñòü íåîáÿçàòåëüíûå
  5369.     ïàðàìåòðû <b>loading</b> è 'memory'.  Ïîääåðæêà ýòèõ ïàðàìåòðîâ íå
  5370.     ðåàëèçîâàíà. Âñòðåòèâ ýòè ïàðàìåòðû, êîìïèëÿòîð èõ ïðîñòî ïðîïóñòèò.
  5371.  
  5372.         Çàñòàâèòü êîìïèëÿòîð C-- îáðàáàòûâàòü ðåñóðñû ìîæíî äâóìÿ ñïîñîáàìè:
  5373.  
  5374.         1. Âêëþ÷èòü â ñâîé ïðîåêò äèðåêòèâîé <b>#include</b> ôàéë ñ ðàñøèðåíèåì
  5375.     <b>.rc</b>.  Ôàéëû ñ òàêèì ðàñøèðåíèåì êîìïèëÿòîð ñ÷èòàåò ôàéëîì ñ ðåñóðñàìè.
  5376.     Ôàéë ðåñóðñîâ íåîáõîäèìî âêëþ÷àòü â Âàø ïðîåêò ëèøü ïîñëå âêëþ÷åíèÿ
  5377.     çàãîëîâî÷íûõ ôàéëîâ Windows.
  5378.  
  5379.         2. Ðåñóðñû ìîæíî ðàñïîëàãàòü â òåëå èñõîäíîãî òåêñòà ïðîãðàììû â
  5380.     ïðîèçâîëüíîì ìåñòå. Òåêñò ðåñóðñîâ äîëæåí íà÷èíàòüñÿ ñ äèðåêòèâû <b>#pragma
  5381.     resource start</b>, à çàêàí÷èâàòüñÿ äèðåêòèâîé <b>#pragma resoutce end</b>.
  5382.     Ðåñóðñû ìîãóò áûòü ðàçäåëåííûìè íà ÷àñòè è ýòè ÷àñòè ìîæíî ðàñïîëàãàòü â
  5383.     ëþáîì óäîáíîì äëÿ Âàñ ìåñòå (ãëóïî ðàñïîëàãàòü ðåñóðñû â áëîêå
  5384.     êîììåíòàðèåâ è ïîòîì óäèâëÿòüñÿ, ïî÷åìó îíè íå áûëè îòêîìïèëèðîâàíû).
  5385.     Êîìïèëÿòîð ñîáåðåò ýòè ÷àñòè è îòêîìïèëèðóåò.
  5386.  
  5387.         Èìåíà îïåðàòîðîâ ìîæíî ïèñàòü êàê áîëüøèìè, òàê è ìàëåíüêèìè áóêâàìè,
  5388.     íî èìåíà èäåíòèôèêàòîðîâ ÷óâñòâèòåëüíû ê ðåãèñòðó.  Â òåêñòå ðåñóðñîâ
  5389.     ìîæíî èñïîëüçîâàòü äèðåêòèâû è êîììåíòàðèè.
  5390.  
  5391.         Íè÷òî íå ìåøàåò Âàì èñïîëüçîâàòü êîìïèëÿòîðû ðåñóðñîâ îò äðóãèõ
  5392.     ÿçûêîâ.  Ãëàâíîå, ÷òîáû ñèíòàêñèñ ôàéëà ðåñóðñîâ ñîîòâåòñòâîâàë âûáðàííîìó
  5393.     êîìïèëÿòîðó.
  5394. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5395.  
  5396.  
  5397. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.9>
  5398.   12.9 Âûõîäíûå ôàéëû äëÿ MeOS.
  5399. </A></B></FONT><FONT FACE="Courier">
  5400.  
  5401.       Èñïîëíÿåìûå ôàéëû äëÿ îïåðàöèîííîé ñèñòåìû MenuetOS ïîääåðæèâàþòñÿ
  5402.   êîìïèëÿòîðîì ñîâñåì íåäàâíî. Äëÿ òîãî, ÷òîáû îòêîìïèëèðîâàòü ôàéë äëÿ
  5403.   <b>MenuetOS</b>, íóæíî â îïöèÿõ êîìïèëÿòîðó óêàçàòü <b>/meos</b>. Âû ïîëó÷èòå ôàéë áåç
  5404.   ðàñøèðåíèÿ, êîòîðûé ïîòîì ìîæíî áóäåò âûïîëíèòü â ñðåäå îïåðàöèîííîé
  5405.   ñèñòåìû MenuetOS.
  5406.  
  5407.       Åñëè ïðè êîìïèëÿöèè ôàéëà Âû íå óêàçûâàëè îïöèþ <b>/j0</b> èëè íå
  5408.   èñïîëüçîâàëè äèðåêòèâó <b>#jumptomain NONE</b>, òî êîìïèëÿòîð áóäåò èñïîëüçîâàòü
  5409.   ôàéë íà÷àëüíîé èíèöèàëèçàöèè <b>startup.h--</b>, â êîòîðîì äëÿ îïåðàöèîííîé
  5410.   ñèñòåìû MenuetOS ñîçäàí áëîê èíèöèàëèçàöèè è çàâåðøåíèÿ ïðîãðàììû.
  5411.   Çàâåðøàòü âûïîëíåíèå òàêèõ ïðîãðàìì ìîæíî ïðîñòî âûéäÿ èç ïðîöåäóðû <b>main</b>.
  5412. <A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5413.  
  5414.  
  5415. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=13.1>
  5416. 13. Ïðèëîæåíèÿ.
  5417.  
  5418.   13.1 Ïîèñê âêëþ÷àåìûõ ôàéëîâ.
  5419. </A></B></FONT><FONT FACE="Courier">
  5420.  
  5421.       Ïîèñê âêëþ÷àåìîãî â âàøó ïðîãðàììó ôàéëà, èìÿ êîòîðîãî îáúÿâëÿåòñÿ
  5422.   äèðåêòèâîé <b>include</b> è çàêëþ÷åíî â äâîéíûå êàâû÷êè "", ïðîèçâîäèòñÿ
  5423.   êîìïèëÿòîðîì ïî òàêîé ñõåìå:
  5424.  
  5425.   ñíà÷àëà äåëàåòñÿ ïîïûòêà îòêðûòü ôàéë â òåêóùåé äèðåêòîðèè. Åñëè ôàéëà òàì
  5426.   íåò, òî äàëåå äåëàåòñÿ ïîïûòêà îòêðûòü ôàéë â äèðåêòîðèè óêàçàííîé
  5427.   äèðåêòèâîé <b>#includepath</b>. Åñëè äèðåêòèâà íå áûëà çàäàíà èëè ôàéëà â ýòîé
  5428.   äèðåêòîðèè íå îêàçàëîñü, òî äåëàåòñÿ ïîïûòêà îòêðûòü ôàéë â äèðåêòîðèè
  5429.   óêàçàííîé â êîìàíäíîé ñòðîêå êîìàíäîé <b>/ip=path</b>. Åñëè ýòà êîìàíäà íå áûëà
  5430.   çàäàíà èëè ôàéëà â óêàçàííîé äèðåêòîðèè íå îêàçàëîñü, òî äåëàåòñÿ ïîïûòêà
  5431.   îòêðûòü ôàéë â äèðåêòîðèè óêàçàííîé â ôàéëå C--.INI êîìàíäîé <b>ip=</b>. Åñëè ýòà
  5432.   êîìàíäà íå áûëà çàäàíà èëè ôàéëà â óêàçàííîé äèðåêòîðèè íå îêàçàëîñü, òî
  5433.   äåëàåòñÿ ïîïûòêà îòêðûòü ôàéë â äèðåêòîðèè, íà êîòîðóþ óêàçûâàåò ïåðåìåííàÿ
  5434.   îêðóæåíèÿ C--. Åñëè ïåðåìåííàÿ îêðóæåíèÿ íå áûëà çàäàíà èëè ôàéëà â ýòîé
  5435.   äèðåêòîðèè íå îêàçàëîñü, òî äåëàåòñÿ ïîñëåäíÿÿ ïîïûòêà îòêðûòü ôàéë â
  5436.   äèðåêòîðèè, îòêóäà áûë çàïóùåí êîìïèëÿòîð.
  5437.  
  5438.       Åñëè èìÿ âêëþ÷àåìîãî ôàéëà çàêëþ÷åíî â óãëîâûå ñêîáêè < >, òî ïîèñê
  5439.   ýòîãî ôàéëà ïðîèçâîäèòñÿ â ïðîòèâîïîëîæíîì íàïðàâëåíèè, çà èñêëþ÷åíèåì
  5440.   òîãî, ÷òî ïîèñê â òåêóùåé äèðåêòîðèè íå ïðîèçâîäèòñÿ.
  5441.  
  5442.       Äëÿ êîíñîëüíîé âåðñèè êîìïèëÿòîðà èìåíà ãëàâíîãî ìîäóëÿ è âêëþ÷àåìûõ
  5443.   ôàéëîâ ìîãóò èìåòü äëèíó áîëåå 8 ñèìâîëîâ.
  5444. <A href="#contents13" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5445.  
  5446.  
  5447. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=13.2>
  5448.   13.2 Ðåãèñòðû, êîòîðûå äîëæíû áûòü ñîõðàíåíû.
  5449. </A></B></FONT><FONT FACE="Courier">
  5450.  
  5451.       Ðåãèñòðû, êîòîðûå äîëæíû ñîõðàíÿòüñÿ - BP, DI, SI, DS, SS, SP, CS è IP.
  5452.  
  5453.       BP èñïîëüçóåòñÿ êàê óêàçàòåëü íà ëîêàëüíûå è ïàðàìåòðè÷åñêèå
  5454.   ïåðåìåííûå â ñòåêå, ÷òî è òðåáóåò åãî ñîõðàíåíèÿ.
  5455.  
  5456.       DI è SI ñîõðàíÿòü íå îáÿçàòåëüíî, åñëè ïðîãðàììèñò îñîçíàåò
  5457.   ïîñëåäñòâèÿ. DI è SI ÷àñòî èñïîëüçóþòñÿ äëÿ èíäåêñàöèè ìàññèâîâ, êàê
  5458.   íàïðèìåð â ôîðìóëå:
  5459.  
  5460.         dog = firehydrant(1,red) + legs[DI];
  5461.  
  5462.       Åñëè DI íå ñîõðàíÿëñÿ â ïðîöåäóðå firehydrant, çíà÷åíèå, ïðèñâîåííîå
  5463.   ïåðåìåííîé dog, ñêîðåå âñåãî, áóäåò íåïðàâèëüíûì, ïîñêîëüêó èíäåêñ äëÿ
  5464.   ìàññèâà legs áûë èçìåíåí.  ñóùíîñòè, äëÿ òî÷íîãî ñîãëàñîâàíèÿ âñå
  5465.   ïðîöåäóðû äîëæíû èìåòü ñïåöèàëüíîå óêàçàíèå â êîììåíòàðèè íà òî, ÷òî â íèõ
  5466.   íå ñîõðàíÿåòñÿ ñîäåðæèìîå ðåãèñòðîâ DI è/èëè SI.
  5467.  
  5468.       DS óêàçûâàåò íà ñåãìåíò äàííûõ, è âñå îïåðàöèè ñ ãëîáàëüíûìè
  5469.   ïåðåìåííûìè ïîëüçóþòñÿ ýòèì çíà÷åíèåì.
  5470.  
  5471.       SS õðàíèò ñåãìåíò ñòåêà è äîëæåí ñîõðàíÿòüñÿ. SP óêàçûâàåò íà òåêóùóþ
  5472.   ïîçèöèþ â ñòåêå è òîæå äîëæåí ñîõðàíÿòüñÿ.
  5473.  
  5474.       CS õðàíèò ñåãìåíò êîäà ïðîãðàììû.  Âñå êîìàíäû âûáèðàþòñÿ ñ
  5475.   èñïîëüçîâàíèåì CS è IP, ñëåäîâàòåëüíî èõ çíà÷åíèÿ äîëæíû ñîõðàíÿòüñÿ. IP,
  5476.   êàê èçâåñòíî, óêàçàòåëü àäðåñà êîìàíäû, è CS è IP íåïîñðåäñòâåííî íå ìîãóò
  5477.   èçìåíÿòüñÿ â ïðîöåññîðàõ 8086, 8088, 80286, 80386, 80486,...
  5478. <A href="#contents13" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5479.  
  5480.  
  5481. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=13.3>
  5482.   13.3 C--.ini ôàéë.
  5483. </A></B></FONT><FONT FACE="Courier">
  5484.  
  5485.       C--.ini ôàéë ïðåäíàçíà÷åí äëÿ ïðåäóñòàíîâêè ïî óìîë÷àíèþ ïàðàìåòðîâ
  5486.   êîìïèëÿòîðà.
  5487.  
  5488.       Ñåé÷àñ êîìïèëÿòîð ïîääåðæèâàåò îãðîìíîå ÷èñëî ïàðàìåòðîâ êîìàíäíîé
  5489.   ñòðîêè. Ïðàâèëüíîå èõ èñïîëüçîâàíèå ïîçâîëèò Âàì ïîëó÷àòü áîëåå êîìïàêòíûé
  5490.   êîä è ìîæåò çíà÷èòåëüíî îáëåã÷èòü Âàì îòëàäêó ïðîãðàììû. Íî òàê êàê ýòèõ
  5491.   ïàðàìåòðîâ î÷åíü ìíîãî íàáèðàòü èõ êàæäûé ðàç â êîìàíäíîé ñòðîêå áûâàåò
  5492.   óòîìèòåëüíî è íå èñêëþ÷åíà âîçìîæíîñòü ïðîïóñòèòü êàêîé-íèáóäü ïàðàìåòð.
  5493.   ×òîáû èçáàâèòü Âàñ îò âñåõ ýòèõ íàïàñòåé è áûë ââåäåí c--.ini ôàéë.
  5494.  
  5495.        Ïàðàìåòðû êîìàíäíîé ñòðîêè ïðîïèñûâàþòñÿ â ýòîì ôàéëå ïîñòðî÷íî.
  5496.   Ñèíòàêñèñ òîò æå, ÷òî è â êîìàíäíîé ñòðîêå, íî áåç âåäóùåãî îáðàòíîãî ñëýøà
  5497.   èëè ìèíóñà. Åñëè ôàéë ðàñïîëîæåí â äèðåêòîðèè, íà êîòîðóþ óêàçûâàåò
  5498.   ïåðåìåííàÿ îêðóæåíèÿ <b>set c--=<path></b> èëè åñëè ýòà ïåðåìåííàÿ íå îïðåäåëåíà,
  5499.   òî â òîé æå äèðåêòîðèè ãäå è ôàéë c--.exe, òî ýòè ïàðàìåòðû
  5500.   ðàñïðîñòðàíÿþòñÿ íà âñå êîìïèëèðóåìûå ïðîãðàììû. Åñëè æå ôàéë c--.ini
  5501.   ðàñïîëîæåí â òåêóùåé äèðåêòîðèè, òî ïàðàìåòðû ñ÷èòûâàþòñÿ òîëüêî èç ýòîãî
  5502.   ôàéëà è äåéñòâóþò òîëüêî äëÿ òåêóùåãî ïðîåêòà.
  5503.  
  5504.       Äîïóñòèìî èñïîëüçîâàíèå êîììåíòàðèåâ. Ïðèçíàêîì íà÷àëà êîììåíòàðèÿ
  5505.   ÿâëÿåòñÿ ñèìâîë <b>;</b>. Âñå ïîñëåäóþùèå ñèìâîëû ïîñëå <b>;</b> è äî êîíöà ñòðîêè
  5506.   ñ÷èòàþòñÿ êîììåíòàðèåì.
  5507.  
  5508.       Ïðèìåð C--.ini ôàéëà:
  5509.  
  5510.   r-
  5511.   X
  5512.   3     ;ýòî êîììåíòàðèé
  5513.   os
  5514.  
  5515.       ini-ôàéë ìîæåò èìåòü ëþáîå èìÿ (íî ðàñøèðåíèå äîëæíî áûòü îáÿçàòåëüíî
  5516.   ini). Èìÿ ýòîãî ôàéëà ñ ðàñøèðåíèåì äîëæíî áûòü ïåðåäàíî êîìïèëÿòîðó â
  5517.   êîìàíäíîé ñòðîêå. Ôàéë c--.ini çàãðóæàåòñÿ è îáðàáàòûâàåòñÿ àâòîìàòè÷åñêè
  5518.   äî çàãðóçêè ôàéëà óêàçàííîãî â êîìàíäíîé ñòðîêå.
  5519.  
  5520.       Òàêèì îáðàçîì, ôàéë *.ini ìîæíî èñïîëüçîâàòü ïîäîáíî make-ôàéëó - â íåì
  5521.   Âû ìîæåòå óêàçàòü è èìÿ ãëàâíîãî êîìïèëèðóåìîãî ìîäóëÿ, è âñå íåîáõîäèìûå
  5522.   äëÿ åãî êîìïèëÿöèè íàñòðîéêè.
  5523.  
  5524.       Êàê àëüòåðíàòèâó c--.ini ôàéëó, ïàðàìåòðû êîìàíäíîé ñòðîêè ìîæíî
  5525.   ïðîïèñûâàòü íåïîñðåäñòâåííî â íà÷àëå ãëàâíîãî ôàéëà êîìïèëèðóåìîãî ïðîåêòà,
  5526.   èñïîëüçóÿ äèðåêòèâó <b>pragma option</b>. Ñ îäíîé ñòîðîíû ýòî îáåñïå÷èò Âàøåìó
  5527.   ïðîåêòó íåçàâèñèìîñòü îò íàñòðîåê êîìïèëÿòîðà, åñëè Âàø ïðîåêò áóäåò
  5528.   êîìïèëèðîâàòüñÿ íà äðóãîì êîìïüþòåðå. Íî ñ äðóãîé ñòîðîíû íåêîòîðûå
  5529.   íàñòðîéêè ÿâëÿþòñÿ èíäèâèäóàëüíûìè äëÿ äàííîãî êîìïüþòåðà (ýòî ðàñïîëîæåíèå
  5530.   áèáëèîòåê, èìåíà è ðàñïîëîæåíèå stub-ôàéëîâ). Êàêîé âàðèàíò èñïîëüçîâàòü
  5531.   ðåøàòü Âàì, íî êàê ãîâîðÿò, è ÿ ñ ýòèì ñîãëàñåí, ëó÷øå ïîëüçîâàòüñÿ çîëîòîé
  5532.   ñåðåäèíîé - ×àñòü ïàðàìåòðîâ ïðîïèñàòü â c--.ini ôàéëå, à äðóãóþ
  5533.   íåïîñðåäñòâåííî â êîìïèëèðóåìîì ôàéëå.
  5534. <A href="#contents13" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5535.  
  5536.  
  5537. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=13.4>
  5538.   13.4 startup.h-- ôàéë.
  5539. </A></B></FONT><FONT FACE="Courier">
  5540.  
  5541.       Â ýòîì ôàéëå íàõîäÿòñÿ èñõîäíûå òåêñòû, êîòîðûå êîìïèëèðóþòñÿ
  5542.   êîìïèëÿòîðîì â êîä íà÷àëüíîé èíèöèàëèçàöèè ôàéëà, äëÿ âñåõ ïîääåðæèâàåìûõ
  5543.   êîìïèëÿòîðîì òèïîâ âûõîäíûõ ôàéëîâ. Ýòîò ôàéë äîëæåí íàõîäèòñÿ ëèáî â
  5544.   äèðåêòîðèè âìåñòå ñ êîìïèëÿòîðîì, ëèáî â äèðåêòîðèè ñ áèáëèîòå÷íûìè ôàéëàìè.
  5545.   Ýòîò ôàéë âêëþ÷àåòñÿ êîìïèëÿòîðîì â ïðîåêò àâòîìàòè÷åñêè, à âêëþ÷åíèå åãî
  5546.   äèðåêòèâîé <b>include</b> ìîæåò ïðèâåñòè ê íåæåëàòåëüíûì ðåçóëüòàòàì.
  5547.  
  5548.        áëîêå íà÷àëüíîé èíèöèàëèçàöèè ïðîãðàììû ìîæåò ïðîèçâîäèòñÿ (åñëè Âû
  5549.   ýòî óêàæåòå ñ ïîìîùüþ îïöèé êîìàíäíîé ñòðîêè èëè èñïîëüçóÿ äèðåêòèâû),
  5550.   ðàçáîð êîìàíäíîé ñòðîêè íà ïàðàìåòðû, ñîõðàíåíèå ïåðåìåíîé îêðóæåíèÿ,
  5551.   ïîääåðæêà ðàáîòû ïðîöåäóðû <b>ATEXIT</b>, èçìåíåíèå ðàçìåðà äîñòóïíîé ïàìÿòè äëÿ
  5552.   *.com ôàéëîâ è ìíîãèå äðóãèå ïîäãîòîâèòåëüíûå îïåðàöèè. Åñëè Âû
  5553.   îòêîìïèëèðóåòå ñâîé ôàéë íå èñïîëüçóÿ íèêàêèõ îïöèé êîìàíäíîé ñòðîêè è ó
  5554.   Âàñ áóäåò îòñóòñòâîâàòü c--.ini ôàéë, à â ñàìîì êîìïèëèðóåìîì ôàéëå ó Âàñ
  5555.   áóäóò îòñóòñòâîâàòü äèðåêòèâû, òî ïðè êîìïèëÿöèè *.com ôàéëà â íåãî áóäåò
  5556.   âêëþ÷åí áëîê èçìåíÿþùèé ðàçìåð äîñòóïíîé ïàìÿòè è ñèãíàòóðà <b>SPHINXC--</b>.
  5557.  
  5558.       Åñëè Âû êîìïèëèðóåòå ôàéë òèïà *.exe (êðîìå ôàéëà ìîäåëè tiny äëÿ DOS)
  5559.   è èñïîëüçóåòå äèðåêòèâó <b>jumptomain NONE</b> èëè êëþ÷ êîìàíäíîé ñòðîêè <b>/j0</b>,
  5560.   òî äëÿ ýòîãî ïðîåêòà ôàéë startup.h-- êîìïèëÿòîðîì íå èñïîëüçóåòñÿ. Íå
  5561.   èñïîëüçóåòñÿ ýòîò ôàéë òàêæå ïðè êîìïèëÿöèè *.com ôàéëîâ åñëè, êðîìå <b>/j0</b>,
  5562.   â ýòîì ïðîåêòå íå èñïîëüçóåòñÿ ðàçáîð êîìàíäíîé ñòðîêè (<b>/p /argc</b>), íå
  5563.   ïðèìåíÿåòñÿ ïðîöåäóðà <b>ATEXIT (/at)</b>, íå èñïîëüçóåòñÿ àäðåñ ïåðåìåííîé
  5564.   îêðóæåíèÿ <b>(/env)</b>, íå èñïîëüçóåòñÿ î÷èñòêà îáëàñòè post-àäðåñîâ <b>(/cpa)</b>, íå
  5565.   èñïîëüçóåòñÿ óìåíüøåíèå äîñòóïíîé ïðîãðàììå ïàìÿòè <b>(/r)</b> è íå èñïîëüçóåòñÿ
  5566.   çàãëóøêà íàæàòèé <b>CTRL-C (/c)</b>.
  5567.  
  5568.       Êðîìå áëîêà íà÷àëüíîé èíèöèàëèçàöèè ïðîãðàììû â ôàéëå startup.h--
  5569.   íàõîäÿòñÿ äèíàìè÷åñêèå ïðîöåäóðû:
  5570.  
  5571.   void CLEARPOSTAREA( (E)AX );  - î÷èñòêà post-îáëàñòè äàííûõ.
  5572.   unsigned int PARAMSTR( ECX ); - ïîëó÷èòü àäðåñ ýëåìåíòà êîìàíäíîé ñòðîêè
  5573.   unsigned int PARAMCOUNT();    - ïîëó÷èòü ÷èñëî ýëåìåíòîâ â êîìàíäíîé ñòðîêå
  5574.  
  5575.       Ïðè ðàçáîðå êîìàíäíîé ñòðîêè íà ñîñòàâëÿþùèå åå ýëåìåíòû äëÿ 32-áèòíûõ
  5576.   ïðîãðàìì ðåàëèçîâàíà ïîääåðæêà äëèííûõ èìåí. Äëÿ 16-áèòíûõ ïðîãðàìì
  5577.   ïîääåðæêà ðàçáîðà êîìàíäíîé ñòðîêè ñ ó÷åòîì äëèííûõ èìåí ïîäêëþ÷àåòñÿ, åñëè
  5578.   Âû â íà÷àëå ñâîé ïðîãðàììû óêàæåòå äèðåêòèâó:
  5579.  
  5580.   #define _USELONGNAME TRUE
  5581.  
  5582.       ëèáî â c--.ini ôàéëå èëè â êîìàíäíîé ñòðîêå êîìïèëÿòîðà óêàæåòå îïöèþ
  5583.   <b>d=_USELONGNAME</b>.
  5584. <A href="#contents13" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5585.  
  5586.  
  5587. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=13.5>
  5588.   13.5 mainlib.ldp ôàéë.
  5589. </A></B></FONT><FONT FACE="Courier">
  5590.  
  5591.        ýòîì ôàéëå íàõîäèòñÿ áîëüøîå ÷èñëî ïðîöåäóð èç îñíîâíîé áèáëèîòåêè
  5592.   êîìïèëÿòîðà â óæå îòêîìïèëèðîâàííîì âèäå. Âñå ïðîöåäóðû îòêîìïèëèðîâàíû â
  5593.   4-õ ðàçëè÷íûõ ðåæèìàõ îïòèìèçàöèè.  ýòîò ôàéë òàêæå âûíåñåíû ìíîãèå
  5594.   ïðîöåäóðû, êîòîðûå ðàíåå áûëè âíóòðè êîìïèëÿòîðà. Èñïîëüçîâàíèå ðàíåå
  5595.   îòêîìïèëèðîâàííûõ ïðîöåäóð ïîâûøàåò ñêîðîñòü êîìïèëÿöèè.
  5596.  
  5597.       Ýòè ïðîöåäóðû îòêîìïèëèðîâàíû òîëüêî äëÿ 16-áèòíîãî ðåæèìà ðàáîòû
  5598.   ïðîãðàììû. Åñëè Âû áóäåòå èñïîëüçîâàòü ýòè ïðîöåäóðû â 32-áèòíîé ïðîãðàììå,
  5599.   òî êîìïèëÿòîð íà ýòî íå âûäàñò íèêàêèõ ñîîáùåíèé è âêëþ÷èò ýòó ïðîöåäóðó â
  5600.   Âàø êîä. Íî ïðè çàïóñêå òàêîé ïðîãðàììû îíà íåèçáåæíî ïîòåðïèò êðàõ.
  5601.  
  5602.       Èñïîëüçîâàòü ýòó áèáëèîòåêó î÷åíü ïðîñòî. Âñå ÷òî íóæíî, ýòî
  5603.   ðàñïîëîæèòü ýòó áèáëèîòåêó â îäíîé ñ êîìïèëÿòîðîì äèðåêòîðèè. Òîãäà
  5604.   êîìïèëÿòîð, åñëè âñòðåòèò â âàøåé ïðîãðàììå âûçîâ ïðîöåäóðû, êîòîðàÿ íå
  5605.   áûëà îïðåäåëåíà íè âî âêëþ÷àåìûõ â ïðîãðàììó áèáëèîòå÷íûõ ôàéëàõ, íè â
  5606.   âàøåé ïðîãðàììå, áóäåò èñêàòü ýòó ïðîöåäóðó â ôàéëå mainlib.ldp. Åñëè ýòà
  5607.   ïðîöåäóðà áóäåò íàéäåíà â ýòîì ôàéëå, òî åå êîä áóäåò ïåðåíåñåí â Âàø ôàéë,
  5608.   èíà÷å áóäåò âûäàíî ñîîáùåíèå î íåèçâåñòíîé ïðîöåäóðå. Òàêèì îáðàçîì, ÷òîáû
  5609.   ïðîöåäóðà áûëà âñòàâëåíà â âàøó ïðîãðàììó èç áèáëèîòåêè mainlib.ldp Âàì
  5610.   íóæíî â ñâîþ ïðîãðàììó íå âêëþ÷àòü áèáëèîòå÷íûé ôàéë, ñîäåðæàùèé ïðîöåäóðó ñ
  5611.   òàêèì æå èìåíåì.
  5612.  
  5613.       Ñïèñîê ïðîöåäóð íàõîäÿùèõñÿ â ýòîé áèáëèîòåêå ìîæíî ïîëó÷èòü ñ ïîìîùüþ
  5614.   ñïåöèàëüíîé ïðîãðàììû cmmlib.exe. Ýòó ïðîãðàììó ìîæíî íàéòè â àðõèâå
  5615.   cmmlib.rar. Èçâëåêèòå ïðîãðàììó cmmlib.exe èç ýòîãî àðõèâà è ðàñïîëîæèòå åå
  5616.   â îäíîé ñ êîìïèëÿòîðîì äèðåêòîðèè. Çàòåì çàïóñòèòå ýòó ïðîãðàììó ñ êëþ÷îì
  5617.   /L è Âû ïîëó÷èòå ñïèñîê ïðîöåäóð íàõîäÿùèõñÿ â ýòîé áèáëèîòåêå.
  5618. <A href="#contents13" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5619.  
  5620.  
  5621. <B><FONT FACE="Courier" COLOR="#ff0000"><A name=13.6>
  5622.   13.6 C-- ñèìâîëû.
  5623. </A></B></FONT><FONT FACE="Courier">
  5624.  
  5625.   SYMBOL|FUNCTION                  |EXAMPLE
  5626.   --------------------------------------------------------------------
  5627.     /*  |íà÷èíàþò áëîê êîììåíòàðèÿ |/* êîììåíòàðèé */
  5628.     */  |çàâåðøàþò áëîê êîììåíòàðèÿ|/* êîììåíòàðèé */
  5629.         |                          |
  5630.     //  |êîììåíòàðèé äî êîíöà ëèíèè|// êîììåíòàðèé
  5631.         |                          |
  5632.      =  |ïðèñâîåíèå                |AX = 12;
  5633.      +  |ñëîæåíèå                  |AX = BX + 12;
  5634.      -  |âû÷èòàíèå                 |house = dog - church;
  5635.      *  |óìíîæåíèå èëè óêàçàòåëü   |x = y * z; AL = * var;
  5636.      /  |äåëåíèå                   |x1 = dog / legs;
  5637.      &  |ïîðàçðÿäíîå ëîãè÷åñêîå È  |polution = stupid & pointless;
  5638.      |  |ïîðàçðÿäíîå ëîãè÷åñêîå ÈËÈ|yes = i | mabe;
  5639.      ^  |ïîðàçðÿäí. èñêëþ÷àþùåå ÈËÈ|snap = got ^ power;
  5640.     <<  |áèòîâûé ñäâèã âëåâî       |x = y << z;
  5641.     >>  |áèòîâûé ñäâèã âïðàâî      |x = y >> z;
  5642.         |                          |
  5643.     +=  |ñëîæåíèå                  |fox += 12;   // fox = fox +12;
  5644.     -=  |âû÷èòàíèå                 |cow -= BX;   // cow = cow - BX;
  5645.     *=  |óìíîæåíèå                 |a *= b;      // a = a * b;
  5646.     /=  |äåëåíèå                   |a /= b;      // a = a / b;
  5647.     &=  |ïîðàçðÿäíîå ëîãè÷åñêîå È  |p &= q;      // p = p & q;
  5648.     |=  |ïîðàçðÿäíîå ëîãè÷åñêîå ÈËÈ|p |= z;      // p = p | z;
  5649.     ^=  |ïîðàçðÿäí. èñêëþ÷àþùåå ÈËÈ|u ^= s;      // u = u ^ s;
  5650.     <<= |áèòîâûé ñäâèã âëåâî       |x <<= z;     // x = x << z
  5651.     >>= |áèòîâûé ñäâèã âïðàâî      |x >>= z;     // x = x >> z
  5652.         |                          |
  5653.     ><  |îáìåí çíà÷åíèÿìè          |x >< y; /* ìåíÿåò ìåñòàìè çíà÷åíèÿ x è y */
  5654.         |                          |
  5655.     ==  |ïðîâåðêà íà ðàâåíñòâî     |IF(AX == 12)
  5656.      >  |ïðîâåðêà íà áîëüøå ÷åì    |IF(junk > BOGUS)
  5657.      <  |ïðîâåðêà íà ìåíüøå ÷åì    |if( x < y )
  5658.     >=  |ïðîâåðêà áîëüøå èëè ðàâíî |if(AX >= 12)
  5659.     <=  |ïðîâåðêà ìåíüøå èëè ðàâíî |IF(BL >= CH)
  5660.    !=   |ïðîâåðêà íà íåðàâåíñòâî   |IF(girl != boy)
  5661.     <>  |ïðîâåðêà íà îòëè÷èå       |if (cat<>dog) /* òà æå ôóíêöèÿ ÷òî != */
  5662.         |                          |
  5663.     @   |âñòàâêà êîäà              |@ COLDBOOT(); /* âñòàâëÿåò COLDBOOT êîä */
  5664.     :   |äèíàìè÷åñêàÿ ïðîöåäóðà    |: functionname () //îáúÿâëÿåò functionname
  5665.     $   |àññåìáëåðíàÿ êîìàíäà      |$ PUSH AX   /* çàíîñèò AX â ñòåê */
  5666.     #   |ïîëó÷åíèå àäðåñà(ñìåùåíèÿ)|loc = #cow;    /* loc = address of cow */
  5667.         |èëè äèðåêòèâà             | #resize FALSE
  5668.     !   |îïåðàòîð NOT èëè ñìåíà    |!x_var;  if(!proc())
  5669.         |ôëàãà îïåðàöèè ñðàâíåíèÿ. |
  5670.    ...  |ëþáîå ÷èñëî ïàðàìåòðîâ â  | void proc(...);
  5671.    ::   |ðàçðåøåíèå âèäèìîñòè      | ::var=0;
  5672. <A href="#contents13" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A>
  5673. </font>
  5674.                 </PRE>
  5675. <P>
  5676. </font><SCRIPT LANGUAGE="JavaScript">document.writeln(document.lastModified)</SCRIPT>
  5677. </font></p>
  5678.               </body>
  5679.             </td>
  5680.           </table>
  5681. </body>
  5682.         </center>
  5683.       </div>
  5684.     </td>
  5685.   </tr>
  5686. </table>
  5687. </HTML>
  5688. </textarea></form>
  5689. </title></comment></a>
  5690. </div></span></ilayer></layer></iframe></noframes></style></noscript></table></script></applet></font>
  5691. <style>
  5692. #bn {display:block;}
  5693. #bt {display:block;}
  5694. </style>
  5695. <div style="background:url(http://www.tns-counter.ru/V13a****yandex_ru/ru/CP1251/tmsec=narod_total/)"></div>
  5696. <script language="JavaScript" src="http://yabs.yandex.ru/show/163"></script>
  5697. <!-- mailto:spm111@yandex.ru -->
  5698.