0,0 → 1,5697 |
<HTML> |
<HEAD><TITLE>Äîêóìåíòàöèÿ íà C--</TITLE></HEAD> |
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> |
<table border="0" cellpadding="0" cellspacing="0" width="100%"> |
<tr> |
<td width="1"></td> |
<td width="1"></td> |
<td width="100%"> |
<div align="center"> |
<center> |
<table border="0" cellpadding="0" cellspacing="0" width="100%"> |
<tr><td bgcolor="#000000"><img src="images/-.gif" width="1" height="1"></td></tr> |
<tr><td><img src="images/-.gif" width="1" height="1"></td></tr> |
<tr><td bgcolor="#000000"><img src="images/-.gif" width="1" height="1"></td></tr> |
<tr><td align="middle" bgcolor="#008080"> |
<font color="#FFFFFF" face="Times New Roman" size=3> |
<strong><em>Äîêóìåíòàöèÿ íà C--.</em></strong></font> |
</td></tr> |
<tr><td bgcolor="#000000"><img src="images/-.gif" width="1" height="1"></td></tr> |
<tr><td><img src="images/-.gif" width="1" height="1"></td></tr> |
<tr><td bgcolor="#000000"><img src="images/-.gif" width="1" height="1"></td></tr> |
<td width="100%"> |
<BODY LINK="#0000ff" VLINK="#800080" background="images/sphinx6.jpg" bgproperties="fixed"> |
|
<A name=contents> |
<p align="center"><font color="#F000F0" face="Times New Roman" size=5><strong> |
Ñîäåðæàíèå. |
</strong></font></p></a> |
<pre> |
|
<B><FONT FACE="Courier" COLOR="#ff0000"> |
<A href="#intro" style="TEXT-DECORATION: none">1 Ââåäåíèå. |
1.1 Èñòîðèÿ ñîçäàíèÿ è ðàçâèòèÿ.</A> |
<A href="#1.2" style="TEXT-DECORATION: none">1.2 ×òî òàêîå C--?</a> |
<A href="#1.3" style="TEXT-DECORATION: none">1.3 Êàê óñòàíîâèòü C--.</a> |
<A name=contents2> |
<A href="#2.1" style="TEXT-DECORATION: none">2. Óïðàâëåíèå êîìïèëÿöèåé. |
2.1 Ïàðàìåòðû êîìàíäíîé ñòðîêè êîìïèëÿòîðà C--.</a> |
<A href="#2.1.1" style="TEXT-DECORATION: none">2.1.1 /ON - Îïòèìèçàöèÿ ÷èñëîâûõ âûðàæåíèé.</a> |
<A href="#2.1.2" style="TEXT-DECORATION: none">2.1.2 /DE - Âðåìåííîå ðàñøèðåíèå ðàçðÿäíîñòè ïåðåìåííîé.</a> |
<A href="#2.1.3" style="TEXT-DECORATION: none">2.1.3 /ARGC - Àëüòåðíàòèâíûé îáðàáîò÷èê êîìàíäíîé ñòðîêè.</a> |
<A href="#2.1.4" style="TEXT-DECORATION: none">2.1.4 /OST - ñëèÿíèå îäèíàêîâûõ ñòðîêîâûõ êîíñòàíò.</a> |
<A href="#2.1.5" style="TEXT-DECORATION: none">2.1.5 /D - óñòàíîâêà èäåíòèôèêàòîðà â TRUE èç êîìàíäíîé ñòðîêè.</a> |
<A href="#2.1.6" style="TEXT-DECORATION: none">2.1.6 /IA - óïðîùåííûé ââîä àññåìáëåðíûõ èíñòðóêöèé.</a> |
<A href="#2.1.7" style="TEXT-DECORATION: none">2.1.7 /CRI - ïðîïóñê ïîâòîðíî âêëþ÷àåìîãî ôàéëà.</a> |
<A href="#2.1.8" style="TEXT-DECORATION: none">2.1.8 /IND - èìïîðò èìåí ïðîöåäóð èç DLL.</a> |
<A href="#2.1.9" style="TEXT-DECORATION: none">2.1.9 /WS - çàäàòü èìÿ stub ôàéëà äëÿ ïðîãðàìì ïîä windows.</a> |
<A href="#2.1.10" style="TEXT-DECORATION: none">2.1.10 /WBSS - ðàçìåñòèòü íå èíèöèàëèçèðîâàííûå äàííûå â îòäåëüíîé ñåêöèè.</a> |
<A href="#2.1.11" style="TEXT-DECORATION: none">2.1.11 /DBG - ñîçäàíèå îòëàäî÷íîé èíôîðìàöèè.</a> |
<A href="#2.1.12" style="TEXT-DECORATION: none">2.1.12 /J0 /J1 /J2.</a> |
<A href="#2.1.13" style="TEXT-DECORATION: none">2.1.13 /LST - Ñîçäàíèå àññåìáëåðíîãî ëèñòèíãà.</a> |
<A href="#2.1.14" style="TEXT-DECORATION: none">2.1.14 /ENV - Ñîõðàíåíèå àäðåñà ïåðåìåííûõ îêðóæåíèÿ.</a> |
<A href="#2.1.15" style="TEXT-DECORATION: none">2.1.15 /CPA - Î÷èñòêà post-îáëàñòè äàííûõ.</a> |
<A href="#2.1.16" style="TEXT-DECORATION: none">2.1.16 /W - âûâîä ïðåäóïðåæäåíèé.</a> |
<A href="#2.1.17" style="TEXT-DECORATION: none">2.1.17 /NW - Âûáîðî÷íîå îòêëþ÷åíèå òèïîâ ïðåäóïðåæäåíèé.</a> |
<A href="#2.1.18" style="TEXT-DECORATION: none">2.1.18 /WSI - êîðîòêàÿ òàáëèöà èìïîðòà.</a> |
<A href="#2.2" style="TEXT-DECORATION: none">2.2 Äèðåêòèâû òðàíñëÿòîðà.</a> |
<A href="#2.2.1" style="TEXT-DECORATION: none">2.2.1 ?ifdef/?ifndef</a> |
<A href="#2.2.2" style="TEXT-DECORATION: none">2.2.2 ?initallvar</a> |
<A href="#2.2.3" style="TEXT-DECORATION: none">2.2.3 ?usestartup</a> |
<A href="#2.2.4" style="TEXT-DECORATION: none">2.2.4 ?startusevar</a> |
<A href="#2.2.5" style="TEXT-DECORATION: none">2.2.5 ?atexit</a> |
<A href="#2.2.6" style="TEXT-DECORATION: none">2.2.6 ?startuptomain</a> |
<A href="#2.2.7" style="TEXT-DECORATION: none">2.2.7 ?undef</a> |
<A href="#2.2.8" style="TEXT-DECORATION: none">2.2.8 ?align è ?aligncode</a> |
<A href="#2.2.9" style="TEXT-DECORATION: none">2.2.9 ?pragma</a> |
<A name=contents3> |
<A href="#3.1" style="TEXT-DECORATION: none">3. Êîíñòàíòû. |
3.1 ×èñëîâûå êîíñòàíòû.</a> |
<A href="#3.2" style="TEXT-DECORATION: none">3.2 Ñèìâîëüíûå êîíñòàíòû.</a> |
<A href="#3.3" style="TEXT-DECORATION: none">3.3 Ñòðîêîâûå êîíñòàíòû.</a> |
<A href="#3.4" style="TEXT-DECORATION: none">3.4 Ïîñòîÿííûå âûðàæåíèÿ.</a> |
<A name=contents4> |
<A href="#4.1" style="TEXT-DECORATION: none">4. Âûðàæåíèÿ. |
4.1 Òèïû âûðàæåíèé.</a> |
<A href="#4.2" style="TEXT-DECORATION: none">4.2 Âûðàæåíèÿ òèïà EAX/AX/AL.</a> |
<A href="#4.3" style="TEXT-DECORATION: none">4.3 Âûðàæåíèÿ èñïîëüçóþùèå ïîëó÷àòåëü ïðè âû÷èñëåíèè âûðàæåíèÿ.</a> |
<A href="#4.4" style="TEXT-DECORATION: none">4.4 Íå - EAX/AX/AL âûðàæåíèÿ.</a> |
<A href="#4.5" style="TEXT-DECORATION: none">4.5 Óñëîâíûå âûðàæåíèÿ.</a> |
<A href="#4.5.1" style="TEXT-DECORATION: none">4.5.1 Ïðîñòûå óñëîâíûå âûðàæåíèÿ.</a> |
<A href="#4.5.2" style="TEXT-DECORATION: none">4.5.2 Ñëîæíûå óñëîâíûå âûðàæåíèÿ.</a> |
<A href="#4.6" style="TEXT-DECORATION: none">4.6 Èçìåíåíèå òèïà âûðàæåíèÿ ïðè ïðèñâàèâàíèè.</a> |
<A href="#4.7" style="TEXT-DECORATION: none">4.7 Âû÷èñëåíèå â ðåãèñòðû EAX/AX/AL ñî çíàêîì.</a> |
<A name=contents5> |
<A href="#5.1" style="TEXT-DECORATION: none">5. Èäåíòèôèêàòîðû. |
5.1 Ôîðìàò èäåíòèôèêàòîðà.</a> |
<A href="#5.2" style="TEXT-DECORATION: none">5.2 Çàðåçåðâèðîâàííûå èäåíòèôèêàòîðû.</a> |
<A href="#5.3" style="TEXT-DECORATION: none">5.3 Óíèâåðñàëüíûå ðåãèñòðû äëÿ 16 è 32-áèòíîãî ðåæèìà.</a> |
<A href="#5.4" style="TEXT-DECORATION: none">5.4 Ïðåäîïðåäåëåííûå èäåíòèôèêàòîðû.</a> |
<A name=contents6> |
<A href="#6.1" style="TEXT-DECORATION: none">6. Ïåðåìåííûå. |
6.1 Òèïû ïåðåìåííûõ.</a> |
<A href="#6.2" style="TEXT-DECORATION: none">6.2 Îáúÿâëåíèå ïåðåìåííûõ.</a> |
<A href="#6.3" style="TEXT-DECORATION: none">6.3 Ãëîáàëüíûå ïåðåìåííûå.</a> |
<A href="#6.4" style="TEXT-DECORATION: none">6.4 Ëîêàëüíûå ïåðåìåííûå.</a> |
<A href="#6.5" style="TEXT-DECORATION: none">6.5 Äèíàìè÷åñêèå ïåðåìåííûå è ñòðóêòóðû.</a> |
<A href="#6.6" style="TEXT-DECORATION: none">6.6 Ïðèñâàèâàíèå îäíîãî çíà÷åíèÿ íåñêîëüêèì ïåðåìåííûì.</a> |
<A href="#6.7.1" style="TEXT-DECORATION: none">6.7 Ïåðåìåííûå òèïà float. |
6.7.1 Ôîðìàò ïåðåìåííûõ òèïà float.</a> |
<A href="#6.7.2" style="TEXT-DECORATION: none">6.7.2 Êîíñòàíòû ñ ïëàâàþùåé òî÷êîé.</a> |
<A href="#6.7.3" style="TEXT-DECORATION: none">6.7.3 Äèàïàçîí äîïóñòèìûõ çíà÷åíèé.</a> |
<A href="#6.7.4" style="TEXT-DECORATION: none">6.7.4 Ìàòåìàòè÷åñêèå îïåðàöèè.</a> |
<A href="#6.7.5" style="TEXT-DECORATION: none">6.7.5 Ïðåîáðàçîâàíèÿ òèïîâ.</a> |
<A href="#6.7.6" style="TEXT-DECORATION: none">6.7.6 Îïåðàöèè ñðàâíåíèÿ.</a> |
<A href="#6.7.7" style="TEXT-DECORATION: none">6.7.7 Ñðàâíåíèå ïåðåìåííûõ òèïà float ñ 32-áèòíûì ðåãèñòðîì.</a> |
<A href="#6.8" style="TEXT-DECORATION: none">6.8 Óêàçàòåëè.</a> |
<A name=contents7> |
<A href="#7.1" style="TEXT-DECORATION: none">7. Àäðåñàöèÿ. |
7.1 Îòíîñèòåëüíàÿ àäðåñàöèÿ.</a> |
<A href="#7.2" style="TEXT-DECORATION: none">7.2 Àáñîëþòíàÿ àäðåñàöèÿ.</a> |
<A name=contents8> |
<A href="#8.1.1" style="TEXT-DECORATION: none">8. Ðàáîòà ñ áëîêàìè äàííûõ. |
8.1 Ñòðóêòóðû. |
8.1.1 ×òî òàêîå ñòðóêòóðû.</a> |
<A href="#8.1.2" style="TEXT-DECORATION: none">8.1.2 Ñèíòàêñèñ.</a> |
<A href="#8.1.3" style="TEXT-DECORATION: none">8.1.3 Èíèöèàëèçàöèÿ ñòðóêòóð ïðè îáúÿâëåíèè.</a> |
<A href="#8.1.4" style="TEXT-DECORATION: none">8.1.4 Èíèöèàëèçàöèÿ ñòðóêòóðû ïðè âûïîëíåíèè ïðîãðàììû.</a> |
<A href="#8.1.5" style="TEXT-DECORATION: none">8.1.5 Îïåðàöèè ñ ýëåìåíòàìè ñòðóêòóð.</a> |
<A href="#8.1.6" style="TEXT-DECORATION: none">8.1.6 Âëîæåííûå ñòðóêòóðû.</a> |
<A href="#8.1.7" style="TEXT-DECORATION: none">8.1.7 Îòîáðàæåíèå òåãà ñòðóêòóðû íà áëîê ïàìÿòè.</a> |
<A href="#8.1.8" style="TEXT-DECORATION: none">8.1.8 Áèòîâûå ïîëÿ ñòðóêòóð.</a> |
<A href="#8.2" style="TEXT-DECORATION: none">8.2 Îáúåäèíåíèÿ.</a> |
<A href="#8.3" style="TEXT-DECORATION: none">8.3 Êîìàíäû FROM è EXTRACT.</a> |
<A name=contents9> |
<A href="#9.1" style="TEXT-DECORATION: none">9. Îïåðàòîðû. |
9.1 Óñëîâíûå èíñòðóêöèè.</a> |
<A href="#9.2" style="TEXT-DECORATION: none">9.2 Öèêëû do{} while.</a> |
<A href="#9.3" style="TEXT-DECORATION: none">9.3 Öèêëû loop, LOOPNZ, loopnz.</a> |
<A href="#9.4" style="TEXT-DECORATION: none">9.4 Öèêë while, WHILE.</a> |
<A href="#9.5" style="TEXT-DECORATION: none">9.5 Öèêë for, FOR.</a> |
<A href="#9.6" style="TEXT-DECORATION: none">9.6 Îïåðàòîð ïåðåêëþ÷àòåëü switch.</a> |
<A href="#9.7" style="TEXT-DECORATION: none">9.7 Îïåðàòîð ïåðåõîäà goto, GOTO.</a> |
<A href="#9.8" style="TEXT-DECORATION: none">9.8 Îïåðàòîð ðàçðûâà break, BREAK.</a> |
<A href="#9.9" style="TEXT-DECORATION: none">9.9 Îïåðàòîð ïðîäîëæåíèÿ continue, CONTINUE.</a> |
<A href="#9.10" style="TEXT-DECORATION: none">9.10 Ëîãè÷åñêîå îáúåäèíåíèå óñëîâèé.</a> |
<A href="#9.11" style="TEXT-DECORATION: none">9.11 Ïåðåõîä ÷åðåç öèêëû.</a> |
<A href="#9.12" style="TEXT-DECORATION: none">9.12 Èíâåðòèðîâàíèå ôëàãà ïðîâåðêè óñëîâèé.</a> |
<A href="#9.13" style="TEXT-DECORATION: none">9.13 Âû÷èñëåíèå âûðàæåíèÿ, à çàòåì ïðîâåðêà óñëîâèÿ.</a> |
<A href="#9.14" style="TEXT-DECORATION: none">9.14 Ïðîâåðêà áèòîâ ïðè îïåðàöèè ñðàâíåíèÿ.</a> |
<A href="#9.15" style="TEXT-DECORATION: none">9.15 Îïåðàòîð ïåðåñòàíîâêè.</a> |
<A href="#9.16" style="TEXT-DECORATION: none">9.16 Îïåðàòîð îòðèöàíèÿ.</a> |
<A href="#9.17" style="TEXT-DECORATION: none">9.17 Îïåðàòîð èíâåðñèè.</a> |
<A href="#9.18" style="TEXT-DECORATION: none">9.18 Ñïåöèàëüíûå óñëîâíûå âûðàæåíèÿ.</a> |
<A href="#9.19" style="TEXT-DECORATION: none">9.19 Ñèìâîë $ - âñòàâëÿåò òåêóùèé àäðåñ ïðîãðàììû.</a> |
<A href="#9.20" style="TEXT-DECORATION: none">9.20 Êëþ÷åâîå ñëîâî static è îïåðàòîð ::.</a> |
<A href="#9.21" style="TEXT-DECORATION: none">9.21 Îïåðàòîð sizeof.</a> |
<A href="#9.22" style="TEXT-DECORATION: none">9.22 Ìåòêè ïåðåõîäà.</a> |
<A name=contents10> |
<A href="#10.1" style="TEXT-DECORATION: none">10. Àññåìáëåð. |
10.1 Ïîääåðæêà êîìàíä àññåìáëåðà.</a> |
<A href="#10.2" style="TEXT-DECORATION: none">10.2 Êëþ÷åâîå ñëîâî asm.</a> |
<A href="#10.3" style="TEXT-DECORATION: none">10.3 Ïðåôèêñ dup - ïîâòîðåíèå èíñòðóêöèé DB/DW/DD.</a> |
<A href="#10.4" style="TEXT-DECORATION: none">10.4 Èíñòðóêöèè ïðîöåññîðà Pentium III.</a> |
<A name=contents11> |
<A href="#11.1" style="TEXT-DECORATION: none">11. Ïðîöåäóðû. |
11.1 Òèïû ïðîöåäóð, ôóíêöèé è ìàêðîêîìàíä.</a> |
<A href="#11.2" style="TEXT-DECORATION: none">11.2 Ñòåêîâûå ïðîöåäóðû.</a> |
<A href="#11.3" style="TEXT-DECORATION: none">11.3 Ðåãèñòðîâûå ïðîöåäóðû.</a> |
<A href="#11.4" style="TEXT-DECORATION: none">11.4 Äèíàìè÷åñêèå ïðîöåäóðû.</a> |
<A href="#11.4.1" style="TEXT-DECORATION: none">11.4.1 Óñòàíîâêà äèíàìè÷åñêîé ïðîöåäóðû â îïðåäåëåííîå ìåñòî ïðîãðàììû.</a> |
<A href="#11.5" style="TEXT-DECORATION: none">11.5 inline-ïðîöåäóðû.</a> |
<A href="#11.5.1" style="TEXT-DECORATION: none">11.5.1 Äðóãîå ïðèìåíåíèå inline.</a> |
<A href="#11.6" style="TEXT-DECORATION: none">11.6 Ïðîöåäóðû îáðàáîòêè ïðåðûâàíèé.</a> |
<A href="#11.7" style="TEXT-DECORATION: none">11.7 Çàìåíà return íà goto.</a> |
<A href="#11.8" style="TEXT-DECORATION: none">11.8 Âîçâðàùàåìûå çíà÷åíèÿ.</a> |
<A href="#11.9" style="TEXT-DECORATION: none">11.9 Îáúÿâëåíèå ïàðàìåòðîâ â ðåãèñòðîâûõ ïðîöåäóðàõ.</a> |
<A href="#11.10" style="TEXT-DECORATION: none">11.10 Îáúÿâëåíèå ïàðàìåòðîâ â ñòåêîâûõ ïðîöåäóðàõ.</a> |
<A href="#11.11" style="TEXT-DECORATION: none">11.11 Èñïîëüçîâàíèå ìàêðîêîìàíä.</a> |
<A href="#11.12" style="TEXT-DECORATION: none">11.12 Ïåðåäà÷à ïàðàìåòðîâ â ñòåêîâûå ïðîöåäóðû ÷åðåç ðåãèñòðû.</a> |
<A href="#11.13" style="TEXT-DECORATION: none">11.13 Âûçîâ ïðîöåäóð ñ àäðåñîì â ðåãèñòðå.</a> |
<A href="#11.14" style="TEXT-DECORATION: none">11.14 Âñòîåííûå â êîìïèëÿòîð ïðîöåäóðû.</a> |
<A href="#11.14.1" style="TEXT-DECORATION: none">11.14.1 Ïðîöåäóðû ABORT, ATEXIT è EXIT.</a> |
<A href="#11.14.2" style="TEXT-DECORATION: none">11.14.2 Ïðîöåäóðû inp/inportb, inport, inportd, outp/outportb, outport è |
outportd.</a> |
<A href="#11.14.3" style="TEXT-DECORATION: none">11.14.3 Ïðîöåäóðû äëÿ ðàáîòû ñ âåùåñòâåííûìè ÷èñëàìè.</a> |
<A href="#11.15.1" style="TEXT-DECORATION: none">11.15 Êëàññû. |
11.15.1 Îáúÿâëåíèå ïðîöåäóð â ñòðóêòóðàõ.</a> |
<A href="#11.15.2" style="TEXT-DECORATION: none">11.15.2 Íàñëåäîâàíèå.</a> |
<A href="#11.15.3" style="TEXT-DECORATION: none">11.15.3 Íàñëåäîâàíèå ïðîöåäóð.</a> |
<A name=contents12> |
<A href="#12.1" style="TEXT-DECORATION: none">12. Òèïû âûõîäíûõ ôàéëîâ. |
12.1 Âûõîäíûå ôàéëû òèïà COM.</a> |
<A href="#12.2" style="TEXT-DECORATION: none">12.2 Âûõîäíûå ôàéëû òèïà EXE.</a> |
<A href="#12.3" style="TEXT-DECORATION: none">12.3 Âûõîäíîé ôàéë *.EXE ñ ìîäåëüþ ïàìÿòè tiny.</a> |
<A href="#12.4" style="TEXT-DECORATION: none">12.4 Îáúåêòíûé âûõîäíîé ôàéë OBJ.</a> |
<A href="#12.5.1" style="TEXT-DECORATION: none">12.5 COM ôàéë symbiosis. |
12.5.1 ÑÈÌÁÈÎÇ - ÷òî ýòî òàêîå?</a> |
<A href="#12.5.2" style="TEXT-DECORATION: none">12.5.2 Êàê ýòî äåëàòü.</a> |
<A href="#12.5.3" style="TEXT-DECORATION: none">12.5.3 Èñïîëüçîâàíèå.</a> |
<A href="#12.5.4" style="TEXT-DECORATION: none">12.5.4 Çëîóïîòðåáëåíèÿ.</a> |
<A href="#12.6" style="TEXT-DECORATION: none">12.6 SYS - äðàéâåðû óñòðîéñòâ.</a> |
<A href="#12.7" style="TEXT-DECORATION: none">12.7 Êîìïèëÿöèÿ êîäà ðàñøèðèòåëåé ROM-BIOS.</a> |
<A href="#12.8.1" style="TEXT-DECORATION: none">12.8 32-áèòíûå ôàéëû. |
12.8.1 32-áèòíûé êîä ïîä DOS.</a> |
<A href="#12.8.2" style="TEXT-DECORATION: none">12.8.2 32-áèòíûé êîä ïîä Windows.</a> |
<A href="#12.8.3" style="TEXT-DECORATION: none">12.8.3 Âûçîâ API ïðîöåäóð ïî îðäèíàëàì.</a> |
<A href="#12.8.4" style="TEXT-DECORATION: none">12.8.4 Ñîçäàíèå DLL ïîä Windows.</a> |
<A href="#12.8.5" style="TEXT-DECORATION: none">12.8.5 Èíèöèàëèçàöèÿ DLL ïðè çàãðóçêå.</a> |
<A href="#12.8.6" style="TEXT-DECORATION: none">12.8.6 Êîìïèëÿöèÿ ðåñóðñîâ.</a> |
<A href="#12.9" style="TEXT-DECORATION: none">12.9 Âûõîäíûå ôàéëû äëÿ MeOS.</a> |
<A name=contents13> |
<A href="#13.1" style="TEXT-DECORATION: none">13. Ïðèëîæåíèÿ. |
13.1 Ïîèñê âêëþ÷àåìûõ ôàéëîâ.</a> |
<A href="#13.2" style="TEXT-DECORATION: none">13.2 Ðåãèñòðû, êîòîðûå äîëæíû áûòü ñîõðàíåíû.</a> |
<A href="#13.3" style="TEXT-DECORATION: none">13.3 C--.ini ôàéë.</a> |
<A href="#13.4" style="TEXT-DECORATION: none">13.4 startup.h-- ôàéë.</a> |
<A href="#13.5" style="TEXT-DECORATION: none">13.5 mainlib.ldp ôàéë.</a> |
<A href="#13.6" style="TEXT-DECORATION: none">13.6 C-- ñèìâîëû.</a> |
</FONT></B> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=intro>1. Âñòóïëåíèå. |
|
1.1 Èñòîðèÿ ñîçäàíèÿ è ðàçâèòèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Àâòîðîì ÿçûêà SPHINX C-- ÿâëÿåòñÿ Peter Cellik (CANADA). Ïîñëåäíÿÿ |
àâòîðñêàÿ âåðñèÿ SPHINX C-- v0.203 îò 28.Oct.96. Ê ñîæàëåíèþ àâòîð |
îòêàçàëñÿ îò äàëüíåéøåãî ðàçâèòèÿ ÿçûêà. Ñ 1998 ãîäà, óæå ïî÷òè óìåðøèé |
ïðîåêò, ïîäõâàòèë Ìèõàèë Øåêåð (Ðîññèÿ). Èçíà÷àëüíî êîìïèëÿòîð áûë freeware |
(è äàæå greenware, êàê åãî íàçûâàë Peter Cellik). Òàêèì ñòàòóñ êîìïèëÿòîðà |
îñòàëñÿ è ïîíûíå. |
|
Ïåðâîíà÷àëüíî êîìïèëÿòîð ìîã ñîçäàâàòü òîëüêî *.com ôàéëû è áûë |
ðàññ÷èòàí íà ñîçäàíèå íåáîëüøèõ demo-ïðîãðàìì è ðåçèäåíòîâ (TSR).  |
äàëüíåéøåì âîçìîæíîñòè êîìïèëÿòîðà ðàñøèðÿëèñü, òàê êàê ýòîãî òðåáîâàëî |
íàøå áóðíîå âðåìÿ. |
|
Ïðè ðàçâèòèè êîìïèëÿòîðà, áûëî ñòðåìëåíèå ïðèäåðæèâàòüñÿ ñëåäóþùèõ |
ïðèíöèïîâ: |
|
1. Ìàêñèìàëüíî âîçìîæíàÿ ñîâìåñòèìîñòü ñèíòàêñèñà ñ ïîñëåäíåé âåðñèåé |
êîìïèëÿòîðà íàïèñàííîãî Peter Cellik. Ýòî äàâàëî âîçìîæíîñòü ñ ìèíèìàëüíûìè |
çàòðàòàìè (à ÷àùå âñåãî áåç âñÿêèõ çàòðàò) àäàïòèðîâàòü ïðîãðàììû, |
íàïèñàííûå äëÿ 0.203 âåðñèè êîìïèëÿòîðà, ê ïîñëåäíåé íà ýòîò ìîìåíò âåðñèè |
êîìïèëÿòîðà. |
|
2. Ñáëèçèòü ñèíòàêñèñ êîìïèëÿòîðà ñî ñòàíäàðòíûì ÿçûêîì C. Ýòî ìîãëî |
çíà÷èòåëüíî îáëåã÷èòü ïåðåíîñ ïðîãðàìì íàïèñàííûõ íà C. |
|
3. Òàêæå ïðèëàãàëèñü óñèëèÿ, äëÿ òîãî, ÷òîáû ÷åëîâåê çíàþùèé òîëüêî |
àññåìáëåð ìîã áû ñ ìèíèìàëüíûìè çàòðàòàìè îñâîèòü C--. |
|
Âîò ýòè, çà÷àñòóþ ïðîòèâîðå÷àùèå äðóã äðóãó ïðèíöèïû, âëèÿëè íà âûáîð |
ðåàëèçàöèè âîçìîæíîñòåé êîìïèëÿòîðà. Íàñêîëüêî ýòî óäàëîñü - ñóäèòü Âàì. |
|
Åñëè ó Âàñ åñòü ïðåäëîæåíèÿ è èäåè ïî óëó÷øåíèþ êîìïèëÿòîðà - ïèøèòå. |
Ìîé e-mail <a href="mailto:sheker@mail.ru">sheker@mail.ru</a> . ß ñ óäîâîëüñòâèåì âûñëóøàþ Âàøè ïðåäëîæåíèÿ, íî |
íå ãàðàíòèðóþ, ÷òî âñå îíè áóäóò ðåàëèçîâàíû. Åñëè ðåàëèçîâûâàòü âñå |
ïîñòóïàþùèå ïðåäëîæåíèÿ, òî êîìïèëÿòîð ïðåâðàòèòñÿ â ñâàëêó. Íî åñëè Âàøå |
ïðåäëîæåíèå áóäåò öåííûì (íà ìîé âçãëÿä, òàê ÷òî Âàì ïðèäåòñÿ ñâîå |
ïðåäëîæåíèå õîðîøî àðãóìåíòèðîâàòü) è åãî áóäåò âîçìîæíûì ðåàëèçîâàòü, îíî |
áåç ñîìíåíèÿ íàéäåò ìåñòî â êîìïèëÿòîðå. |
<A href="#contents" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=1.2> |
1.2 ×òî òàêîå C--? |
</A></B></FONT><FONT FACE="Courier"> |
|
C-- áûë ðàçðàáîòàí, äëÿ òîãî ÷òîáû ñòðîèòü ìàëåíüêèå è áûñòðûå |
ïðîãðàììû. Ýòî íàèáîëåå ïîäõîäèò äëÿ ñîçäàíèÿ ðåçèäåíòíûõ ïðîãðàìì (TSR), |
ïðîãðàìì, òðåáóþùèõ îáðàáîòêó ïðåðûâàíèé èëè ïðîãðàìì ó êîòîðûõ îãðàíè÷åíû |
ðåñóðñû. |
|
C-- çàíèìàåò ïðîìåæóòî÷íîå ïîëîæåíèå ìåæäó ñè è àññåìáëåðîì.  ñâÿçè ñ |
ýòèì ïðîìåæóòî÷íûì ïîëîæåíèåì, Âàì, äëÿ òîãî ÷òîáû ïèñàòü ïðîãðàììû íà C--, |
íåîáõîäèìî çíàòü è àññåìáëåð è ñè. Åñëè Âàì íàäîåëî âîçèòüñÿ ñ îãðîìíûìè |
àññåìáëåðíûìè ëèñòèíãàìè, à èçëèøíÿÿ ñòðîãîñòü ÿçûêà C Âàñ óãíåòàåò, òî ýòîò |
ÿçûê äëÿ ÂÀÑ. |
|
Ñåé÷àñ êîìïèëÿòîð C-- ìîæåò ñîçäàâàòü 32-áèòíûå ïðîãðàììû ïîä Windows |
(EXE-ôàéëû ôîðìàòà PE) è 32-áèòíûå ïðîãðàììû ïîä DOS (LE-ôîðìàò). Èìååò |
âñòðîåííûé êîìïèëÿòîð ðåñóðñîâ è äèçàññåìáëåð äëÿ ãåíåðàöèè ëèñòèíãà |
îòêîìïèëèðîâàííîãî ôàéëà. Ïîääåðæèâàåò àññåìáëåðíûå èíñòðóêöèè ïðîöåññîðà |
Pentium III è àññåìáëåðíûå èíñòðóêöèè FPU. Êîìïèëÿòîð ìîæåò ãåíåðèðîâàòü |
îòëàäî÷íóþ èíôîðìàöèþ ñîâìåñòèìóþ ñ îòëàä÷èêàìè ôèðìû Borland. Êîìïèëÿòîð |
ìîæåò ñîçäàâàòü îáúåêòíûå ôàéëû (obj), íî òîëüêî äëÿ DOS ïðîãðàìì. |
|
C-- ðàçðàáîòàí òîëüêî äëÿ èñïîëüçîâàíèÿ íà êîìïüþòåðàõ ñ ïðîöåññîðàìè |
ñîâìåñòèìûìè ñ ñåìåéñòâîì 80x86. Êîìïèëÿòîð ìîæåò ðàáîòàòü òîëüêî ñ |
îïåðàöèîííûìè ñèñòåìàìè DOS è ñåìåéñòâîì Windows. |
<A href="#contents" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=1.3> |
1.3 Êàê óñòàíîâèòü C--. |
</A></B></FONT><FONT FACE="Courier"> |
|
Êîìïèëÿòîðó C-- äëÿ ðàáîòû íóæíû ñîâñåì íåçíà÷èòåëüíûå ðåñóðñû: |
ïðîöåññîð 386 èëè ëó÷øå, ÷óòü áîëåå 1 Ìá äèñêîâîãî ïðîñòðàíñòâà è 4Ìá |
îïåðàòèâíîé ïàìÿòè. Êîìïèëÿòîð ìîæåò áûòü óñòàíîâëåí íà êîìïüþòåðû ñ |
îïåðàöèîííîé ñèñòåìîé Windows 95 èëè ëó÷øå. Êîìïèëÿòîð òàêæå ìîæåò ðàáîòàòü |
â ñðåäå ÷èñòîãî DOS.  îñíîâíîì ïàêåòå êîìïèëÿòîðà íàõîäèòñÿ 32-áèòíàÿ DOS |
âåðñèÿ êîìïèëÿòîðà. Íà ñàéòå <a href="http://sheker.chat.ru">http://sheker.chat.ru</a> èëè |
<a href="http://c--sphinx.narod.ru">http://c--sphinx.narod.ru</a> ìîæíî íàéòè è êîíñîëüíóþ âåðñèþ êîìïèëÿòîðà. |
Êîíñîëüíàÿ âåðñèÿ êîìïèëÿòîðà ìîæåò ðàáîòàòü òîëüêî â ñðåäå Windows, íî |
îíà, â îòëè÷èå îò DOS âåðñèè, ìîæåò ðàáîòàòü ñ äëèííûìè èìåíàìè èñõîäíûõ |
ôàéëîâ. |
|
Óñòàíîâèòü êîìïèëÿòîð C-- íà Âàø êîìïüþòåð î÷åíü ïðîñòî. Ïðåäïîëîæèì, |
÷òî Âû ðåøèëè óñòàíîâèòü C-- íà äèñê C. Ñîçäàéòå íà äèñêå C äèðåêòîðèþ |
(ïàïêó) ñ èìåíåì <b>C--</b> èëè ñ äðóãèì, óäîáíûì è ïîíÿòíûì äëÿ Âàñ èìåíåì |
(íàïðèìåð, ÄÎÑîâñêîé êîìàíäîé: <b>MD C--</b> èëè äðóãèì äîñòóïíûì Âàì ñïîñîáîì). |
Çàòåì ñ ñàéòà <a href="http://sheker.chat.ru">http://sheker.chat.ru</a> èëè <a href="http://c--sphinx.narod.ru">http://c--sphinx.narod.ru</a> ñêà÷àéòå |
ôàéëû full_c--.zip è ful_c--2.zip è ðàçàðõèâèðóéòå èõ â ýòîé äèðåêòîðèè. |
Çàòåì â ôàéëå autoexec.bat ìîæíî ïðîïèñàòü ïóòü ê äèðåêòîðèè ñ |
êîìïèëÿòîðîì. È âñå. Êîìïèëÿòîð ãîòîâ ê ðàáîòå. Åñëè Âû äîáàâëÿëè ïóòü ê |
êîìïèëÿòîðó â ôàéë autoexec.bat, òî Âàì ïðèäåòñÿ ïåðåãðóçèòü îïåðàöèîííóþ |
ñèñòåìó. |
|
Ïåðåìåííàÿ îêðóæåíèÿ äëÿ êîìïèëÿòîðà C-- çàäàåòñÿ ëèáî èç êîìàíäíîé |
ñòðîêè ëèáî èç êîìàíäíîãî ôàéëà (ëó÷øå âñåãî åå ïðîïèñàòü â autoexec.bat). |
Ýòà ïåðåìåííàÿ äîëæíà óêàçûâàòü êîìïèëÿòîðó, ãäå íàõîäÿòñÿ åãî áèáëèîòå÷íûå |
ôàéëû. Ïðèìåð: |
|
<b>set C--=c:\c--\lib</b> |
|
Áîëüøîé íåîáõîäèìîñòè â ïåðåìåííîé îêðóæåíèÿ äëÿ ñåãîäíÿøíåé âåðñèè |
êîìïèëÿòîðà íåò. Ñóùåñòâóåò íåñêîëüêî äðóãèõ ñïîñîáîâ, óêàçàòü êîìïèëÿòîðó |
ìåñòî ðàñïîëîæåíèÿ áèáëèîòåê. Ïîýòîìó îïðåäåëÿòü èëè íå îïðåäåëÿòü |
ïåðåìåííóþ îêðóæåíèÿ äåëî âàøåãî âêóñà è ïðèâû÷åê. |
<A href="#contents" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1> |
2. Óïðàâëåíèå êîìïèëÿöèåé. |
|
2.1 Ïàðàìåòðû êîìàíäíîé ñòðîêè êîìïèëÿòîðà C--. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ôîðìàò êîìàíäíîé ñòðîêè âûçîâà êîìïèëÿòîðà C--: |
|
C-- [Ïàðàìåòðû] [ÈÌß INI ÔÀÉËÀ] [ÈÌß ÈÑÕÎÄÍÎÃÎ ÔÀÉËÀ] |
|
Èìÿ èñõîäíîãî ôàéëà ìîæíî çàäàâàòü áåç ðàñøèðåíèÿ. Êîìïèëÿòîð èùåò |
ôàéë ñ ðàñøèðåíèåì <b>c--, cmm, c</b>. |
|
Ïàðàìåòðû âûäåëÿþòñÿ ïðåäøåñòâóþùèì ñèìâîëîì <b>/</b> èëè <b>-</b>. |
Èíâåðòèðîâàòü ôóíêöèþ îïöèè ìîæíî çàâåðøàþùèì ñèìâîëîì <b>-</b>. |
|
Ñïèñîê ïîääåðæèâàåìûõ ïàðàìåòðîâ: |
|
<b>/0</b> èñïîëüçîâàòü òîëüêî êîìàíäû 8086/8088 ïðîöåññîðà (óñòàíîâëåíî |
ïî óìîë÷àíèþ ïðè êîìïèëÿöèè 16-áèòíûõ ïðîãðàìì). |
<b>/1</b> èñïîëüçîâàòü êîìàíäû 80186 ïðîöåññîðà. |
<b>/2</b> èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ 80286 ïðîöåññîðà. |
<b>/3</b> èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ 80386 ïðîöåññîðà. |
(óñòàíîâëåíî ïî óìîë÷àíèþ äëÿ 32-áèòíûõ ïðîãðàìì). |
<b>/4</b> èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ 80486 ïðîöåññîðà. |
<b>/5</b> èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium ïðîöåññîðà. |
<b>/6</b> èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium MMX ïðîöåññîðà. |
<b>/7</b> èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium Pro ïðîöåññîðà. |
<b>/8</b> èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium II ïðîöåññîðà. |
<b>/9</b> èñïîëüçîâàòü êîìàíäû è îïòèìèçàöèþ äëÿ Pentium III ïðîöåññîðà |
(ïîêà íå ðåàëèçîâàíî èç-çà îòñóòñòâèè èíôîðìàöèè). |
<b>/A</b> âûðàâíèâàíèå äàííûõ íà ÷åòíûé àäðåñ |
ïî óìîë÷àíèþ ðàçðåøåíî, ïîääåðæèâàåò èíâåðñèþ |
<b>/AC</b> âûðàâíèâàíèå àäðåñà íà÷àëà öèêëîâ |
ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ |
èìååò ñìûñë òîëüêî íà ïðîöåññîðàõ Pentium+ |
<b>/AL</b>=## óñòàíîâèòü çíà÷åíèå áàéòà çàïîëíåíèÿ ïðè âûðàâíèâàíèè äàííûõ |
ïî óìîë÷àíèþ 0. |
<b>/AP</b> âûðàâíèâàíèå àäðåñà íà÷àëà ïðîöåäóð. |
ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ |
èìååò ñìûñë òîëüêî íà ïðîöåññîðàõ Pentium è ëó÷øå |
<b>/ARGC</b> âñòàâèòü áëîê ðàçáîðà êîìàíäíîé ñòðîêè |
ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ |
<b>/AS</b> âûðàâíèâàíèå â ñòðóêòóðàõ. |
ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ |
<b>/AT</b> âñòàâèòü áëîê ïîääåðæêè <b>ATEXIT</b> ïðîöåäóðû |
ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ |
<b>/C</b> âñòàâèòü áëîê èãíîðèðîâàíèÿ <b>CTRL-C</b> |
ïî óìîë÷àíèþ îòêëþ÷åí, ïîääåðæèâàåò èíâåðñèþ |
èìååò ñìûñë òîëüêî ïîä DOS ïðîãðàììû |
<b>/CRI</b> ïðîâåðÿòü âêëþ÷àåìûå ôàéëû íà ïîâòîðíóþ çàãðóçêó |
ïî óìîë÷àíèþ âêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ |
<b>/CPA</b> î÷èñòêà post-îáëàñòè äàííûõ |
<b>/D32</b> ñîçäàòü EXE ôàéë (32 áèòíûé êîä ïîä DOS) |
ïî óìîë÷àíèþ COM |
<b>/D</b>=idname îïðåäåëèòü èäåíòèôèêàòîð äëÿ óñëîâíîé êîìïèëÿöèè |
ïî óìîë÷àíèþ íåò |
<b>/DBG</b> ãåíåðèðîâàòü îòëàäî÷íóþ èíôîðìàöèþ |
ïî óìîë÷àíèþ íåò |
<b>/DE</b> âðåìåííîå ðàñøèðåíèå ðàçðÿäíîñòè ïîñëå óìíîæåíèÿ |
ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ |
<b>/DLL</b> ñîçäàòü DLL äëÿ Windows32 |
ïî óìîë÷àíèþ COM |
<b>/ENV</b> ñîõðàíåíèå àäðåñà ïåðåìåííûõ îêðóæåíèÿ |
<b>/EXE</b> ñîçäàòü EXE ôàéë äëÿ DOS (ìîäåëü SMALL) |
ïî óìîë÷àíèþ COM |
<b>/HELP /H /?</b> ñïðàâêà, ýòà èíôîðìàöèÿ |
<b>/IA</b> èìåíà àññåìáëåðíûõ èíñòðóêöèé ÿâëÿþòñÿ èäåíòèôèêàòîðàìè |
ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ |
<b>/IND</b>=name èìïîðò èìåí èç ôàéëà <b>name</b>. |
<b>/IP</b>=path çàäàòü ïóòü ïîèñêà âêëþ÷àåìûõ ôàéëîâ |
ïî óìîë÷àíèþ íåò |
<b>/IV</b> èíèöèàëèçèðîâàòü âñå ïåðåìåííûå |
ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ |
<b>/J0</b> íå äåëàòü íà÷àëüíûé jump íà main() |
ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ |
 COM-ôàéëàõ íå ñîçäàåò jmp íà main.  îñòàëüíûõ íå ñîçäàåòñÿ |
áëîê íà÷àëüíîé èíèöèàëèçàöèè ïðîãðàììû, à óïðàâëåíèå |
ïåðåäàåòñÿ ñðàçó íà main. |
<b>/J1</b> äåëàòü êîðîòêèé jump íà main() |
ïî óìîë÷àíèþ íåò |
èìååò ñìûñë òîëüêî â COM-ôàéëàõ |
<b>/J2</b> äåëàòü jump íà main() |
ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ |
èìååò ñìûñë òîëüêî â COM-ôàéëàõ |
<b>/LAI</b> ñïèñîê ïîääåðæèâàåìûõ àññåìáëåðíûõ èíñòðóêöèé |
<b>/LRS</b> çàãðóæàòü ÷èñëîâûå êîíñòàíòû ÷åðåç ñòåê. |
ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ |
<b>/LST</b> ñîçäàòü àññåìáëåðíûé ëèñòèíã |
<b>/ME</b> ïîêàçàòü ìîé àäðåñ è èìÿ |
<b>/MEOS</b> ñîçäàòü èñïîëíÿåìûé ôàéë äëÿ MeOS |
ïî óìîë÷àíèþ COM |
<b>/MER</b>=## óñòàíîâèòü ìàêñèìàëüíîå ÷èñëî îøèáîê |
ïî óìîë÷àíèþ 16 |
<b>/MIF</b>=file îïðåäåëèòü èìÿ ãëàâíîãî êîìïèëèðóåìîãî ôàéëà |
<b>/NS</b> çàïðåòèòü ïîäêëþ÷àòü stub ôàéëîâ |
ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ |
<b>/NW</b>=## âûáîðî÷íîå îòêëþ÷åíèå ïðåäóïðåæäåíèé |
<b>/OBJ</b> ñîçäàòü OBJ ôàéë |
òîëüêî 16 áèòíûé êîä. |
ïî óìîë÷àíèþ COM |
<b>/OC</b> îïòèìèçèðîâàòü ïî ðàçìåðó êîäà |
ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ |
<b>/ON</b> îïòèìèçàöèÿ ÷èñåë |
ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ |
<b>/OS</b> îïòèìèçàöèÿ ïî ñêîðîñòè âûïîëíåíèÿ |
ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ |
<b>/OST</b> îïòèìèçàöèÿ ñòðîêîâûõ èäåíòèôèêàòîðîâ |
ïî óìîë÷àíèþ îòêëþ÷åíî, ïîääåðæèâàåò èíâåðñèþ |
<b>/P</b> âñòàâèòü áëîê ðàçáîðêè êîìàíäíîé ñòðîêè |
ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ |
<b>/R</b> âñòàâèòü áëîê óìåíüøàþùèé ðàçìåð äîñòóïíîé ïàìÿòè. |
ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ |
èìååò ñìûñë òîëüêî â DOS-ôàéëàõ |
<b>/S</b>=##### óñòàíîâèòü ðàçìåð ñòåêà |
ïî óìîë÷àíèþ 2048 |
<b>/SA</b>=#### íà÷àëüíîå ñìåùåíèå àäðåñà çàïóñêà ïðîãðàììû |
èìååò ñìûñë òîëüêî â COM-ôàéëàõ, ïî óìîë÷àíèþ 0x100 |
<b>/SOBJ</b> ñîçäàòü âåäîìûé OBJ ôàéë |
ïî óìîë÷àíèþ COM |
<b>/STM</b> ïåðåíåñòè áëîê startup êîäà â ïðîöåäóðó main |
ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ |
èìååò ñìûñë òîëüêî â COM-ôàéëàõ |
<b>/SUV</b>=#### íà÷àëüíûé àäðåñ íå èíèöèàëèçèðîâàííûõ ïåðåìåííûõ, ïðè |
èñïîëüçîâàíèè èìè startup êîäà. |
èìååò ñìûñë òîëüêî â COM-ôàéëàõ, ïî óìîë÷àíèþ ðàâåí /SA |
<b>/SYM</b> íàäñòðîéêà äëÿ COM ôàéëà |
ïî óìîë÷àíèþ COM |
<b>/SYS</b> ñîçäàòü äðàéâåð óñòðîéñòâ (SYS) |
ïî óìîë÷àíèþ COM |
<b>/TEXE</b> ñîçäàòü EXE ôàéë äëÿ DOS (ìîäåëü TINY) |
ïî óìîë÷àíèþ COM |
<b>/UL</b> èñïîëüçîâàòü lea ïðè îïòèìèçàöèè ñëîæåíèÿ ðåãèñòðîâ. |
ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ |
<b>/UST</b> èñïîëüçîâàòü startup êîä äëÿ ïåðåìåííûõ. |
èìååò ñìûñë òîëüêî â COM-ôàéëàõ |
ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ |
<b>/W</b> ðàçðåøèòü ïðåäóïðåæäåíèÿ |
ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ |
<b>/W32</b> ñîçäàòü EXE ôàéë äëÿ Windows32 GUI |
ïî óìîë÷àíèþ COM |
<b>/W32C</b> ñîçäàòü EXE ôàéë äëÿ Windows32 console |
ïî óìîë÷àíèþ COM |
<b>/WBSS</b> ïîìåùàòü íå èíèöèàëèçèðîâàííûå äàííûå â îòäåëüíóþ ñåêöèþ. |
ïî óìîë÷àíèþ äëÿ /w32 ðàçðåøåíî, äëÿ îñòàëüíûõ çàïðåùåíî. |
ïîääåðæèâàåò èíâåðñèþ |
<b>/WF</b>=file ïåðåíàïðàâèòü âûâîä ïðåäóïðåæäåíèé â ôàéë. |
ïî óìîë÷àíèþ íåò |
<b>/WFA</b> èñïîëüçîâàòü áûñòðûå âûçîâû API ïðîöåäóð |
ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ |
òîëüêî ïîä windows |
<b>/WFU</b> ñîçäàâàòü òàáëèöó ïåðåìåùåíèé (äëÿ Windows32) |
ïî óìîë÷àíèþ íåò, ïîääåðæèâàåò èíâåðñèþ |
òîëüêî ïîä windows |
äëÿ DLL óñòàíàâëèâàåòñÿ â äà |
<b>/WIB</b>=##### óñòàíîâèòü àäðåñ image base |
ïî óìîë÷àíèþ 0x400000 |
<b>/WMB</b> ñîçäàâàòü Windows-ôàéë ñ åäèíûì áëîêîì |
ïî óìîë÷àíèþ äà, ïîääåðæèâàåò èíâåðñèþ |
òîëüêî ïîä windows |
äëÿ DLL óñòàíàâëèâàåòñÿ â íåò |
<b>/WORDS</b> âûäàòü ñïèñîê çàðåçåðâèðîâàííûõ èäåíòèôèêàòîðîâ |
<b>/WS</b>=name óêàçûâàåò èìÿ ôàéëà èñïîëüçóåìîãî â êà÷åñòâå <b>stub</b> ïîä windows. |
<b>/X</b> çàïðåòèòü âñòàâëÿòü â êîä <b>SPHINXC--</b> ñèãíàòóðó |
ïî óìîë÷àíèþ ðàçðåøåíî, ïîääåðæèâàåò èíâåðñèþ |
îòêëþ÷àåòñÿ åñëè åñòü <b>J0</b> |
|
Ïðèìå÷àíèå: âûðàæåíèå <i>ïîääåðæèâàåò èíâåðñèþ</i> îçíà÷àåò, ÷òî äëÿ äàííîé |
îïöèè ìîæíî èñïîëüçîâàòü è ïðîòèâîïîëîæíîå çíà÷åíèå ñ ïîìîùüþ ñèìâîëà <b>-</b> |
ïîñëå îïöèè. Ïðèìåð: |
|
<b>/WFA-</b> |
|
Ïàðàìåòðû êîìàíäíîé ñòðîêè ìîæíî ïèñàòü êàê áîëüøèìè, òàê è |
ìàëåíüêèìè áóêâàìè. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.1> |
2.1.1 /ON - Îïòèìèçàöèÿ ÷èñëîâûõ âûðàæåíèé. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïðè âêëþ÷åíèè â êîìàíäíóþ ñòðîêó îïöèè <b>/ON</b> èëè â ôàéë C--.INI ñòðî÷êè |
<b>ON</b>, êîìïèëÿòîð áóäåò àíàëèçèðîâàòü îïåðàöèè íàä ÷èñëàìè è ãäå ýòî |
ìîæíî, ñîêðàùàòü ÷èñëî îïåðàöèé. Íàïðèìåð: |
|
Ñòðîêà äî îïòèìèçàöèè | Ïîñëå îïòèìèçàöèè |
----------------------------------------------- |
AX = var + 7 - 3; | AX = var + 4; |
AX = var * 2 * 5; | AX = var * 10; |
AX = var * 2 / 4; | AX = var / 2; |
AX = var * 10 / 2; | AX = var * 5; |
AX = var / 2 / 3; | AX = var / 6; |
AX = var / 4 * 8; | AX = var * 2; |
AX = var / 16 * 16; | AX = var; |
|
Âîçìîæíûå îòðèöàòåëüíûå ïîñëåäñòâèÿ: |
Ïðèìåíåíèå ýòîé îïòèìèçàöèè ìîæåò èìåòü è íåãàòèâíûå ïîñëåäñòâèÿ. |
Íàïðèìåð, åñëè Âàì íóæíî âûðîâíÿòü çíà÷åíèå ïåðåìåííîé íà ãðàíèöó |
ïàðàãðàôà, Âû íàïèøèòå ñòðîêó: |
|
var = var / 16 * 16; |
|
íî ïîñëå îïòèìèçàöèè áóäåò |
|
var = var; |
|
ò.å. âûðàâíèâàíèå íå áóäåò ïðîèçâåäåíî. Ýòîãî ìîæíî èçáåæàòü, åñëè |
ðàçáèòü ýòî âûðàæåíèå íà äâà: |
|
var = var / 16; |
var = var * 16; |
|
òîãäà îïòèìèçàöèÿ íå áóäåò ïðîèçâåäåíà. Íî äëÿ ïîëó÷åíèÿ áîëåå |
êîìïàêòíîãî êîäà ëó÷øå áóäåò çàïèñàòü òàê: |
|
AX = var; |
AX = AX / 16; |
AX = AX * 16; |
var = AX; |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.2> |
2.1.2 /DE - Âðåìåííîå ðàñøèðåíèå ðàçðÿäíîñòè ïåðåìåííîé. |
</A></B></FONT><FONT FACE="Courier"> |
|
Êàê èçâåñòíî, ïîñëå óìíîæåíèÿ ìîæåò ïðîèçîéòè ïåðåïîëíåíèå, ò.å |
ðàçðÿäíîñòü ðåçóëüòàòà ìîæåò ïðåâûñèòü ðàçðÿäíîñòü èñõîäíûõ îïåðàíäîâ è |
ïðîèçîéäåò èñêàæåíèå ðåçóëüòàòà. ×àñòè÷íî ðåøèòü ýòó ïðîáëåìó Âàì ïîìîæåò |
îïöèÿ êîìàíäíîé ñòðîêè <b>/DE</b> èëè ñòðîêà <b>DE</b> â ôàéëå C--.INI. Ïîñëå êîìàíäû |
óìíîæåíèÿ êîìïèëÿòîð áóäåò ïðîñìàòðèâàòü îñòàòîê ñòðîêè è åñëè îáíàðóæèò, |
÷òî ðàñøèðåíèå ðàçðÿäíîñòè ìîæåò áûòü âîñòðåáîâàíî (âîñòðåáîâàòü |
ðàñøèðåííóþ ðàçðÿäíîñòü ìîãóò îïåðàöèè äåëåíèÿ è âû÷èñëåíèÿ îñòàòêà), òî |
áóäóò ïðèíÿòû ìåðû ïî åå ñîõðàíåíèþ. Íàïðèìåð: |
|
a = b*c+d/e; //çäåñü áóäåò âêëþ÷åíà ïîääåðæêà ðàñøèðåíèÿ ðàçðÿäíîñòè |
a = b*c+d*e; //çäåñü ïîääåðæêè ðàñøèðåíèÿ ðàçðÿäíîñòè íå áóäåò. |
|
Îäíàêî ïðèìåíåíèå ýòîé îïöèè ìîæåò èìåòü è íåãàòèâíûå ïîñëåäñòâèÿ. |
Ïîêàæó ýòî íà ïðèìåðå: |
|
ïóñòü èìååòñÿ âûðàæåíèå |
|
a = b * c / d; |
|
åñëè çíà÷åíèÿ ïåðåìåííûõ b = 0xC000, c = 0x1000, d=0x10, ïîñëå çàïóñêà |
òàêàÿ ïðîãðàììà çàâèñíåò ñ ñîîáùåíèåì î òîì, ÷òî ïðîèçîøëî ïåðåïîëíåíèå |
ïðè äåëåíèè. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.3> |
2.1.3 /ARGC - Àëüòåðíàòèâíûé îáðàáîò÷èê êîìàíäíîé ñòðîêè. |
</A></B></FONT><FONT FACE="Courier"> |
|
Îòëè÷èå ýòîãî îáðàáîò÷èêà êîìàíäíîé ñòðîêè îò <b>parsecommandline</b> |
çàêëþ÷àåòñÿ â òîì, ÷òî ïðè âûçîâå <b>PARAMSTR(0)</b>; Âû ïîëó÷èòå àäðåñ ñòðîêè â |
êîòîðîé óêàçàí ïóòü è èìÿ çàïóùåííîé ïðîãðàììû. Ñëåäóþùèå âûçîâû ýòîé |
ïðîöåäóðû ñ óâåëè÷èâàþùèìñÿ ïàðàìåòðîì áóäóò âîçâðàùàòü àäðåñà ñëîâ |
êîìàíäíîé ñòðîêè. À âûçîâ ïðîöåäóðû <b>PARAMCOUNT</b> âåðíåò Âàì ÷èñëî ñëîâ â |
êîìàíäíîé ñòðîêå ïëþñ îäèí. |
|
Àëüòåðíàòèâíûé îáðàáîò÷èê êîìàíäíîé ñòðîêè âêëþ÷àåòñÿ äèðåêòèâîé |
<b>?argc TRUE</b> èëè èç êîìàíäíîé ñòðîêè êîìïèëÿòîðà êëþ÷îì <b>/argc</b> èëè |
ñòðî÷êîé <b>argc</b> â ôàéëå C--.INI. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.4> |
2.1.4 /OST - ñëèÿíèå îäèíàêîâûõ ñòðîêîâûõ êîíñòàíò. |
</A></B></FONT><FONT FACE="Courier"> |
|
Åñëè ýòîò ðåæèì îïòèìèçàöèè áóäåò àêòèâèçèðîâàí, òî êîìïèëÿòîð áóäåò |
çàïîìèíàòü âñå ñòðîêîâûå êîíñòàíòû è ïðè îáíàðóæåíèè îäèíàêîâûõ â êîä |
ôàéëà íå áóäåò âñòàâëåíà ïîâòîðíàÿ ñòðîêîâàÿ êîíñòàíòà, à áóäåò ñäåëàíà |
ññûëêà íà ïåðâóþ, îáíàðóæåííóþ ðàíåå ñòðîêîâóþ êîíñòàíòó. Â îïòèìèçàöèè |
ó÷àñòâóþò òîëüêî íåèìåíîâàííûå ñòðîêîâûå êîíñòàíòû. Ò.å. åñëè ìàññèâ èëè |
ñòðóêòóðà áóäåò èíèöèàëèçèðîâàíû ñòðîêîé, òî òàêàÿ ñòðîêà íå áóäåò |
ó÷àñòâîâàòü â ïðîöåññå èíèöèàëèçàöèè, òàê ýòà ñòðîêà ìîæåò áûòü èçìåíåíà |
â ïðîöåññå ðàáîòû ïðîãðàììû. Ïðèìåð: |
|
char var="test"; //ýòà ñòðîêà íå áóäåò ó÷àñòâîâàòü â ïðîöåññå |
//îïòèìèçàöèè. |
|
void proc(){ |
WRITESTR("test"); // ýòà ñòðîêà áóäåò ó÷àñòâîâàòü â îïòèìèçàöèè. |
AX="test"; // ïåðåìåííîé AX áóäåò ïðèñâîåí àäðåñ ñòðîêè, |
// êîòîðàÿ áûëà âñòàâëåíà â êîä ïðîãðàììû â |
// ïðåäûäóùåé ñòðîêå. |
} |
|
Îáî âñåõ ñëó÷àÿõ îáíàðóæåíèÿ ïîâòîðíîé ñòðîêè êîìïèëÿòîð áóäåò |
âûäàâàòü ïðåäóïðåæäåíèÿ. |
|
Âêëþ÷àåòñÿ ýòîò ðåæèì îïòèìèçàöèè ëèáî ñ êîìàíäíîé ñòðîêè <b>/ost</b>, ëèáî |
äèðåêòèâîé <b>#pragma option ost</b>, ëèáî ñòðîêîé â ôàéëå c--.ini - <b>ost</b>. |
Îòêëþ÷èòü, âêëþ÷åííûé ðàíåå, ýòîò ðåæèì ìîæíî äèðåêòèâîé <b>#pragma option ost-</b>. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.5> |
2.1.5 /D - óñòàíîâêà èäåíòèôèêàòîðà â TRUE èç êîìàíäíîé ñòðîêè. |
</A></B></FONT><FONT FACE="Courier"> |
|
Åñëè Âû íàïèñàëè ïðîãðàììó, êîòîðàÿ ìîæåò êîìïèëèðîâàòüñÿ ïî ðàçíîìó, |
â çàâèñèìîñòè îò ñîñòîÿíèÿ íåêîòîðûõ èäåíòèôèêàòîðîâ (èñïîëüçóåòñÿ ðåæèì |
óñëîâíîé êîìïèëÿöèè), òî Âàì î÷åíü ìîæåò ïðèãîäèòñÿ ýòà îïöèÿ. |
Óñòàíàâëèâàÿ ñ êîìàíäíîé ñòðîêè ðàçëè÷íûå èäåíòèôèêàòîðû, Âû ìîæåòå |
ïîëó÷àòü ðàçëè÷íûå âàðèàíòû ïðîãðàììû, íå ðåäàêòèðóÿ èñõîäíûé òåêñò |
ïðîãðàììû. |
|
Èäåíòèôèêàòîð ââîäèòñÿ ñ êîìàíäíîé ñòðîêè êëþ÷îì <b>/d=idname</b>. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.6> |
2.1.6 /IA - óïðîùåííûé ââîä àññåìáëåðíûõ èíñòðóêöèé. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñòàëî âîçìîæíûì èñïîëüçîâàòü àññåìáëåðíûå èíñòðóêöèè áåç ïðåôèêñà <b>$</b> |
è âíå áëîêà <b>asm</b>. Ýòîò ðåæèì âêëþ÷àåòñÿ: ñ êîìàíäíîé ñòðîêè îïöèåé <b>/ia</b>; |
â ôàéëå êîíôèãóðàöèè ñòðîêîé <b>ia</b> èëè äèðåêòèâîé <b>#pragma option ia</b>. |
|
Êîãäà ýòîò ðåæèì âêëþ÷åí, âñå èìåíà àññåìáëåðíûõ èíñòðóêöèé ñòàíîâÿòñÿ |
çàðåçåðâèðîâàííûìè ñëîâàìè, ò.å. Âû íå ñìîæåòå ýòè èìåíà èñïîëüçîâàòü â |
êà÷åñòâå èìåí ïåðåìåííûõ èëè ïðîöåäóð. Àññåìáëåðíûå èíñòðóêöèè êîìïèëÿòîð |
ðàñïîçíàåò íåçàâèñèìî îò òîãî, íàïèñàíû îíè ìàëåíüêèìè èëè áîëüøèìè |
áóêâàìè. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.7> |
2.1.7 /CRI - ïðîïóñê ïîâòîðíî âêëþ÷àåìîãî ôàéëà. |
</A></B></FONT><FONT FACE="Courier"> |
|
×àùå âñåãî, ïîâòîðíî âêëþ÷àòü ôàéë â êîìïèëèðóåìûé ïðîåêò, íåò |
íåîáõîäèìîñòè, íî ýòî èíîãäà ïðîèñõîäèò èç-çà òîãî, ÷òî íåêîòîðûå |
âêëþ÷àåìûå ôàéëû ñàìè âêëþ÷àþò äðóãèå ôàéëû. ×òîáû ýòîãî íå ïðîèñõîäèëî |
ïðèõîäèòñÿ äåëàòü ïðîâåðêó íà ïîâòîðíóþ çàãðóçêó ôàéëà. Òåïåðü ýòó |
ôóíêöèþ áåðåò íà ñåáÿ êîìïèëÿòîð è ó Âàñ îòïàäàåò íåîáõîäèìîñòü äåëàòü |
ýòó ïðîâåðêó. |
|
Íî èíîãäà (î÷åíü ðåäêî) âîçíèêàåò ïîòðåáíîñòü ñäåëàòü ïîâòîðíîå |
âêëþ÷åíèå ôàéëà. Äëÿ ýòîãî â êîìïèëÿòîðå åñòü îïöèÿ êîìàíäíîé ñòðîêè |
<b>/cri-</b>, êîòîðàÿ çàïðåùàåò êîìïèëÿòîðó äåëàòü ïðîâåðêó íà ïîâòîðíîå |
âêëþ÷åíèå. Ñîîòâåòñòâåííî, äëÿ c--.ini ôàéëà, ýòî ìîæíî ñäåëàòü ñòðîêîé |
<b>cri-</b> èëè äèðåêòèâîé â êîìïèëèðóåìîì ôàéëå - <b>#pragma option cri-</b>. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.8> |
2.1.8 /IND - èìïîðò èìåí ïðîöåäóð èç DLL. |
</A></B></FONT><FONT FACE="Courier"> |
|
Åñëè Âû õîòèòå â ñâîåé ïðîãðàììå èñïîëüçîâàòü DLL, äëÿ êîòîðîé íåò |
çàãîëîâî÷íîãî ôàéëà ñ îïèñàíèåì ïðîöåäóð, òî êîìïèëÿòîð ìîæåò |
èìïîðòèðîâàòü èìåíà èç ýòîé DLL. Äëÿ ýòîãî Âàì íàäî óêàçàòü èìÿ ýòîé |
áèáëèîòåêè ëèáî ÷åðåç îïöèþ êîìàíäíîé ñòðîêè <b>/ind=name.dll</b>, ëèáî â |
ôàéëå INI ñòðîêîé 'ind=name.dll', ëèáî ÷åðåç äèðåêòèâó '#pragma option |
ind=name.dll'. |
|
Ê íåäîñòàòêîì òàêîãî ñïîñîáà ïîëó÷åíèÿ èìåí ìîæíî îòíåñòè òî, ÷òî ïðè |
êîìïèëÿöèè ïðîãðàììû áèáëèîòåêà, èç êîòîðîé èìïîðòèðóþòñÿ èìåíà, |
îáÿçàòåëüíî äîëæíà ïðèñóòñòâîâàòü â êîìïüþòåðå. Òàêæå, åñëè èìåíà â |
áèáëèîòåêå íàïèñàíû áåç ñóôôèêñà '@number', êîìïèëÿòîð íå áóäåò |
êîíòðîëèðîâàòü ÷èñëî ïàðàìåòðîâ ïåðåäàâàåìûõ ïðîöåäóðå. È, ê ñîæàëåíèþ, |
êîìïèëÿòîð óìååò èìïîðòèðîâàòü èìåíà èç áèáëèîòåê èìåþùèõ òîëüêî ôîðìàò |
PE-ôàéëà. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.9> |
2.1.9 /WS - çàäàòü èìÿ stub ôàéëà äëÿ ïðîãðàìì ïîä windows. |
</A></B></FONT><FONT FACE="Courier"> |
|
Êàê èçâåñòíî, â ïðîãðàììàõ ïîä windows åñòü DOS çàãëóøêà, íàçûâàåìàÿ |
stub, êîòîðîé ïåðåäàåòñÿ óïðàâëåíèå ïðè çàïóñêå òàêîé ïðîãðàììû â ÷èñòîì |
DOS-å. Îáû÷íî òàêàÿ çàãëóøêà âûâîäèò íà ýêðàí ñîîáùåíèå î òîì, ÷òî ýòó |
ïðîãðàììó íàäî çàïóñêàòü â ñðåäå windows. |
|
Âû ìîæåòå âìåñòî ñòàíäàðòíîãî stub èñïîëüçîâàòü ñâîé. Äëÿ ýòîãî Âàì |
íåîáõîäèìî óêàçàòü èìÿ 16-áèòíîãî EXE-ôàéëà ëèáî ÷åðåç îïöèþ êîìàíäíîé |
ñòðîêè <b>/ws=filename</b>, ëèáî ñòðîêîé â INI-ôàéëå <b>ws=filename</b>, ëèáî |
äèðåêòèâîé <b>#pragma option ws=filename</b>. |
|
Òàêèì îáðàçîì, ó Âàñ ïîÿâèëàñü âîçìîæíîñòü ñîçäàâàòü ïðîãðàììû, |
ðàáîòàþùèå è ïîä DOS è ïîä windows. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.10> |
2.1.10 /WBSS - ðàçìåñòèòü íå èíèöèàëèçèðîâàííûå äàííûå â îòäåëüíîé ñåêöèè. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñåêöèÿ <b>.bss</b> ñîçäàåòñÿ àâòîìàòè÷åñêè ïðè êîìïèëÿöèè ïðîãðàìì ñ êëþ÷îì |
<b>/w32</b>. Åñëè Âû õîòèòå èìåòü ýòó ñåêöèþ è ïðè êîìïèëÿöèè ïðîãðàìì ñ |
êëþ÷àìè <b>/w32c</b> èëè <b>/dll</b> Âàì íåîáõîäèìî äîáàâèòü ëèáî â êîìàíäíîé |
ñòðîêå îïöèþ <b>/wbss</b>, ëèáî ñòðîêó <b>wbss</b> â INI-ôàéëå, ëèáî äèðåêòèâó |
<b>#pragma option wbss</b>. |
|
Èñïîëüçîâàíèå ñåêöèè <b>.bss</b> ïðàêòè÷åñêè íå âëèÿåò íà ðàçìåð ïîëó÷àåìîãî |
ôàéëà. Òåîðåòè÷åñêè, äëÿ ïðîöåññîðîâ, ó êîòîðûõ åñòü îòäåëüíûé êýø äëÿ |
äàííûõ, èñïîëüçîâàíèå ñåêöèè <b>.bss</b>, äîëæíî ïîâûøàòü ñêîðîñòü ðàáîòû |
ïðîãðàììû. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.11> |
2.1.11 /DBG - ñîçäàíèå îòëàäî÷íîé èíôîðìàöèè. |
</A></B></FONT><FONT FACE="Courier"> |
|
Åñëè ïðè êîìïèëÿöèè ïðîãðàììû â êîìàíäíóþ ñòðîêó äîáàâèòü êëþ÷ <b>/dbg</b>, |
èëè â ôàéë êîíôèãóðàöèè c--.ini äîáàâèòü ñòðîêó <b>dbg</b>, òî êîìïèëÿòîð ïîñëå |
îêîí÷àíèÿ êîìïèëÿöèè ñîçäàñò ôàéë ñ îòëàäî÷íîé èíôîðìàöèåé. Ýòîò ôàéë |
èìååò èìÿ ãëàâíîãî ìîäóëÿ è èìååò ðàñøèðåíèå *.tds. |
|
Îòëàäî÷íàÿ èíôîðìàöèÿ ñîçäàâàåìàÿ êîìïèëÿòîðîì C-- ñîâìåñòèìà ñ |
îòëàäî÷íîé èíôîðìàöèåé ñîçäàâàåìîé êîìïèëÿòîðàìè ôèðìû Borland. Íî, ïîêà, |
ýòà èíôîðìàöèÿ ðåàëèçîâàíà åùå íå â ïîëíîì îáúåìå. Ñîçäàâàåìîé ñåé÷àñ |
îòëàäî÷íîé èíôîðìàöèè äîñòàòî÷íî äëÿ ïðîâåäåíèÿ ïðîñòåéøåé îòëàäêè |
ïðîãðàììû. |
|
Äëÿ 16-áèòíûõ ïðîãðàìì ïîä DOS äëÿ îòëàäêè íàäî èñïîëüçîâàòü Turbo |
Debugger èç ïàêåòà Borland C v4.5 èëè ëó÷øå (ôàéë td.exe). |
|
Äëÿ ïðîãðàìì ïîä Windows íàäî èñïîëüçîâàòü 32-áèòíûé îòëàä÷èê èç ýòîãî |
æå ïàêåòà (ôàéë td32.exe). |
|
Äëÿ 32-áèòíûõ ïðîãðàìì, èñïîëüçóþùèõ ðàñøèðèòåëü DOS ïðèìåíÿòü äëÿ |
îòëàäêè Turbo Debugger íåâîçìîæíî. Íî, ìîæåò áûòü ÿ íå çíàþ, êàê ýòî |
äåëàòü. Åñëè Âû çíàåòå, êàê ñîçäàâàòü 32-áèòíûå ïðîãðàììû ñ |
DOS-ðàñøèðèòåëåì êîìïèëÿòîðàìè ôèðìû Borland ñ âêëþ÷åíèåì â íèõ îòëàäî÷íîé |
èíôîðìàöèè, òî ðàññêàæèòå ìíå. À ÿ ïîïðîáóþ ïðèìåíèòü ýòî äëÿ C--. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.12> |
2.1.12 /J0 /J1 /J2 |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñèíîíèìîì êëþ÷åé <b>/J0 /J1 /J2</b> ÿâëÿåòñÿ äèðåêòèâà <b>#jumptomain</b> ñ |
ïàðàìåòðàìè <b>NONE, SHORT è NEAR</b> ñîîòâåòñòâåííî. |
|
Äèðåêòèâà <b>#jumptomain</b> âûïîëíÿåò íåìíîãî ðàçëè÷íûå ôóíêöèè â |
çàâèñèìîñòè îò òèïà âûõîäíîãî ôàéëà. |
|
Êîìïèëÿöèÿ ôàéëà òèïà <b>*.com</b> è <b>*.exe</b> ìîäåëü ïàìÿòè <b>tiny</b>: |
|
<b>#jumptomain NONE (-j0)</b> - â ýòîì ñëó÷àå ïî îêîí÷àíèè êîäà íà÷àëüíîé |
èíèöèàëèçàöèè ïðîãðàììû íå ãåíåðèðóåòñÿ jmp íà ïðîöåäóðó main. Ýòó |
äèðåêòèâó ñëåäóåò èñïîëüçîâàòü â ñëó÷àå, åñëè äî ïðîöåäóðû main íåò äðóãèõ |
íå äèíàìè÷åñêèõ ïðîöåäóð è èíèöèàëèçèðîâàííûõ ïåðåìåííûõ. |
|
<b>#jumptomain SHORT (-j1)</b> - â ýòîì ñëó÷àå ïî îêîí÷àíèè êîäà íà÷àëüíîé |
èíèöèàëèçàöèè ãåíåðèðóåòñÿ êîðîòêèé jmp íà ïðîöåäóðó main. Ýòó äèðåêòèâó |
ñëåäóåò èñïîëüçîâàòü, åñëè äî ïðîöåäóðû main íàõîäèòñÿ íå áîëåå 128 áàéò |
êîäà è äàííûõ. |
|
<b>#jumptomain NEAR (-j2)</b> - ýòî ñîñòîÿíèå óñòàíàâëèâàåòñÿ ïî óìîë÷àíèþ. Ïðè |
ýòîì ãåíåðèðóåòñÿ áëèçêèé jmp íà ïðîöåäóðó main. |
|
Êîìïèëÿöèÿ ôàéëîâ <b>*.exe</b> (êëþ÷è <b>-exe -d32 -w32 -w32c</b>): |
|
<b>#jumptomain NONE (-j0)</b> - â ýòîì ñëó÷àå êîä íà÷àëüíîé èíèöèàëèçàöèè |
ïðîãðàììû íå ãåíåðèðóåòñÿ è óïðàâëåíèå ïðè çàïóñêå ïåðåäàåòñÿ ñðàçó íà |
ïðîöåäóðó main. |
|
Âî âñåõ îñòàëüíûõ ñëó÷àÿõ ãåíåðèðóåòñÿ êîä íà÷àëüíîé èíèöèàëèçàöèè è |
óïðàâëåíèå íà ïðîöåäóðó main ïåðåäàåòñÿ èíñòðóêöèåé call. |
|
Êîìïèëÿöèÿ ôàéëîâ <b>*.dll</b>: |
|
<b>#jumptomain NONE (-j0)</b> - â ýòîì ñëó÷àå êîä íà÷àëüíîé èíèöèàëèçàöèè |
ïðîãðàììû íå ãåíåðèðóåòñÿ è óïðàâëåíèå ïðè çàïóñêå ïåðåäàåòñÿ ñðàçó íà |
ïðîöåäóðó <b>main</b>. |
|
Âî âñåõ îñòàëüíûõ ñëó÷àÿõ ãåíåðèðóåòñÿ êîä çàãëóøêè è óïðàâëåíèå íà |
ïðîöåäóðó <b>main</b> íå ïåðåäàåòñÿ. Ôàêòè÷åñêè ïðîöåäóðà <b>main</b> â ýòîì ñëó÷àå íå |
íóæíà. |
|
Ïðîöåäóðà <b>main</b> ïðè ñîçäàíèè ôàéëîâ <b>DLL</b> äîëæíà âûãëÿäåòü íåìíîãî èíà÷å, |
÷åì â äðóãèõ ñëó÷àÿõ: |
|
dword main ( dword hInstDLL, reason, reserv ) |
{ |
... |
} |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.13> |
2.1.13 /LST - Ñîçäàíèå àññåìáëåðíîãî ëèñòèíãà. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñ ïîìîùüþ äîïîëíèòåëüíîé îïöèè êîìàíäíîé ñòðîêè <b>-lst</b> Âû ìîæåòå |
ïîëó÷èòü âìåñòå ñ èñïîëíèòåëüíûì ôàéëîì è åãî àññåìáëåðíûé ëèñòèíã. |
Ëèñòèíã áóäåò ïîìåùåí â ôàéë îäíîèìåííûé ñ èñïîëíèòåëüíûì ôàéëîì è |
èìåþùèì ðàñøèðåíèå *.lst. |
|
Àññåìáëåðíûé ëèñòèíã ñîçäàåòñÿ íåçàâèñèìîé îò êîìïèëÿòîðà ÷àñòüþ êîäà |
ñ èñïîëüçîâàíèåì èíôîðìàöèè íàêàïëèâàåìîé ïðè êîìïèëÿöèè ïðîãðàììû. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.14> |
2.1.14 /ENV - Ñîõðàíåíèå àäðåñà ïåðåìåííûõ îêðóæåíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Åñëè ïðè êîìïèëÿöèè ïðîãðàììû Âû â êîìàíäíóþ ñòðîêó äîáàâèòå îïöèþ |
<b>-ENV</b> èëè â ôàéë c--.ini ñòðîêà <b>ENV</b>, òî êîìïèëÿòîð äîáàâèò â âàøó |
ïðîãðàììó ïåðåìåííóþ <b>environ</b>, â êîòîðîé ïðè çàãðóçêå áóäåò ñîõðàíÿòñÿ |
àäðåñ ïåðåìåííûõ îêðóæåíèÿ çàïóñêàåìîé ïðîãðàììû. Äëÿ ïðîãðàìì ïîä |
Windows ýòî áóäåò ïîëíûé àäðåñ, à äëÿ îñòàëüíûõ â ýòîé ïåðåìåííîé áóäåò |
ñîõðàíÿòüñÿ òîëüêî àäðåñ ñåãìåíòà. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.15> |
2.1.15 /CPA - Î÷èñòêà post-îáëàñòè äàííûõ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïåðåìåííûå, êîòîðûì â òåëå ïðîãðàììû íå áûëî ïðèñâîåíî íèêàêîå |
çíà÷åíèå, íå âêëþ÷àþòñÿ â òåëî ñêîìïèëèðîâàííîé ïðîãðàììû. Äëÿ íèõ |
ðåçåðâèðóåòñÿ ïàìÿòü çà ïðåäåëàìè ïðîãðàììû. Íî ýòà ïàìÿòü ìîæåò áûòü |
çàïîëíåíà ïðîèçâîëüíîé èíôîðìàöèåé. |
|
Åñëè Âàì íåîáõîäèìî, ÷òîáû íåèíèöèàëèçèðîâàííûå ïåðåìåííûå ïðè |
çàãðóçêå ïðîãðàììû âñåãäà ñîäåðæàëè îäíî è òîæå çíà÷åíèå (íîëü) - |
âêëþ÷èòå â êîìàíäíóþ ñòðîêó îïöèþ <b>-CPA</b>. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.16> |
2.1.16 /W - âûâîä ïðåäóïðåæäåíèé. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïî óìîë÷àíèþ êîìïèëÿòîð íå âûâîäèò ïðåäóïðåæäåíèÿ è ìíîãèå äàæå íå |
ïîäîçðåâàþò î ñóùåñòâîâàíèè òàêîé ïîëåçíîé îïöèè. Â C-- ïðåäóïðåæäåíèÿ |
ôàêòè÷åñêè ÿâëÿþòñÿ ïîäñêàçêàìè äëÿ ñîçäàíèÿ îïòèìàëüíûõ ïðîãðàìì è |
çà÷àñòóþ îáëåã÷àþò îòëàäêó ïðîãðàìì.  ïðåäóïðåæäåíèÿõ êîìïèëÿòîð ìîæåò |
ñîîáùèòü Âàì î òîì, â êàêîì ìåñòå ìîæíî èñïîëüçîâàòü êîðîòêèå ôîðìû |
îïåðàòîðîâ IF, WHILE, FOR... Î òîì, êàêèå ïðîöåäóðû, ïåðåìåííûå è |
ñòðóêòóðû îïðåäåëåííûå â âàøåé ïðîãðàììå íå áûëè èñïîëüçîâàíû. Î òîì |
êàêèå ðåãèñòðû êîìïèëÿòîð èñïîëüçîâàë áåç âàøåãî âåäîìà è ìíîãî äðóãîé |
ïîëåçíîé èíôîðìàöèè. |
|
Ïî óìîë÷àíèþ ïðåäóïðåæäåíèÿ âûâîäÿòñÿ íà ýêðàí. Íî èõ áûâàåò òàê |
ìíîãî, ÷òî îíè ìîãóò íå ïîìåñòèòüñÿ íà ýêðàíå. Ïîýòîìó â êîìïèëÿòîðå åñòü |
îïöèÿ, ïî êîòîðîé âñå ïðåäóïðåæäåíèÿ âûâîäÿòñÿ â ôàéë. Èìÿ ýòîãî ôàéëà |
çàäàåòñÿ â òîé æå îïöèè. Ïîìåñòèâ â ñâîé c--.ini ôàéë ïàðó âîò ýòèõ ñòðîê: |
|
w |
wf=warning |
|
Âû áóäåòå ïîëó÷àòü â ôàéëå <b>warning</b> ïðåäóïðåæäåíèÿ. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.17> |
2.1.17 /NW - Âûáîðî÷íîå îòêëþ÷åíèå òèïîâ ïðåäóïðåæäåíèé. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñåé÷àñ êîìïèëÿòîð ìîæåò âûäàâàòü 12 òèïîâ ïðåäóïðåæäåíèé è, èíîãäà èõ |
áûâàåò òàê ìíîãî, ÷òî ñòàíîâèòñÿ òðóäíî â íèõ îðèåíòèðîâàòüñÿ. Òåïåðü |
ìîæíî âûáîðî÷íî çàïðåùàòü âûäà÷ó ïðåäóïðåæäåíèé. Äëÿ ýòîãî â êîìàíäíîé |
ñòðîêå (èëè â ôàéëå C--.INI) ìîæíî óñòàíîâèòü îïöèþ <b>/nw=number</b>, ãäå |
number - ÷èñëî îò 1 äî 12. Ýòèì öèôðàì ñîîòâåòñòâóþò ñëåäóþùèå òèïû |
ïðåäóïðåæäåíèé: |
|
1 - Optimize numerical expressions |
2 - Compiler used register ..." |
3 - Short operator '...' may be used |
4 - String '...' repeated |
5 - Expansion variable |
6 - Signed value returned |
7 - '...' defined above, therefore skipped. |
8 - Variable/structure/procedure '...' possible not used |
9 - Non-initialized variable may have been used |
10 - Return flag was destroyed |
11 - Code may not be executable |
12 - Don't use local/parametric values in inline procedures |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.1.18> |
2.1.18 /WSI - êîðîòêàÿ òàáëèöà èìïîðòà. |
</A></B></FONT><FONT FACE="Courier"> |
|
Òàáëèöà èìïîðòà îáû÷íî ñîñòîèò â ñâîþ î÷åðåäü èç ÷åòûðåõ òàáëèö. Äâå |
òàáëèöû <b>LookUp Table</b> è <b>Import Address Table</b> àáñîëþòíî îäèíàêîâû. |
|
Îïöèåé êîìàíäíîé ñòðîêè <b>/WSI</b> Âû ìîæåòå çàñòàâèòü êîìïèëÿòîð |
ãåíåðèðîâàòü òîëüêî îäíó èç ýòèõ äâóõ îäèíàêîâûõ òàáëèö (ãåíåðèðóåòñÿ |
òîëüêî <b>Import Address Table</b>). Òåì ñàìûì ó Âàñ ïîëó÷èòñÿ áîëåå êîìïàêòíàÿ |
òàáëèöà èìïîðòà, ÷òî ïðèâåäåò, â íåêîòîðûõ ñëó÷àÿõ, ê ñîçäàíèþ áîëåå |
êîìïàêòíîãî âûõîäíîãî ôàéëà. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2> |
2.2 Äèðåêòèâû òðàíñëÿòîðà. |
</A></B></FONT><FONT FACE="Courier"> |
|
C-- íå ñîäåðæèò ïðåïðîöåññîð. Òåì íå ìåíåå, åñòü íåñêîëüêî ôóíêöèé |
î÷åíü ïîõîæèõ íà ôóíêöèè C ïðåïðîöåññîðà. |
|
Îíè äàþòñÿ êàê äèðåêòèâû òðàíñëÿòîðà. Âñå äèðåêòèâû òðàíñëÿòîðà |
íà÷èíàþòñÿ ñ âîïðîñèòåëüíîãî çíàêà <b>?</b> ëèáî ñ ñèìâîëà <b>#</b>. Âîò ñïèñîê èìåþùèõñÿ |
äèðåêòèâ è èõ íàçíà÷åíèå: |
|
<b>? align</b> [val] Âûðîâíÿòü äàííûå ïðîãðàììû íà ÷åòíûé ïî |
óìîë÷àíèþ èëè íà àäðåñ êðàòíûé âåëè÷èíå val. |
|
<b>? aligncode</b> [val] Âûðîâíÿòü êîä ïðîãðàììû íà ÷åòíûé ïî |
óìîë÷àíèþ èëè íà àäðåñ êðàòíûé âåëè÷èíå <b>val</b>. |
Çàïîëíåíèå ïðîèçâîäèòñÿ êîäîì 0x90. |
|
<b>? aligner</b> (aligner value) îïðåäåëèòü çíà÷åíèå áàéòà âñòàâêè. |
|
<b>? alignword</b> (TRUE or FALSE) ðàçðåøàåò èëè çàïðåùàåò âûðàâíèâàíèå íà |
÷åòíûé àäðåñ ïåðåìåííûõ òèïà word è int, |
çíà÷åíèå ïî óìîë÷àíèþ TRUE. |
|
<b>? argc</b> (TRUE or FALSE) Âêëþ÷èòü èëè îòêëþ÷èòü àëüòåðíàòèâíûé |
îáðàáîò÷èê êîìàíäíîé ñòðîêè. |
|
<b>? atexit</b> Âñòàâëÿåò â startup êîä ïîääåðæêè ïðîöåäóðû |
ATEXIT(). |
|
<b>? code32</b> (TRUE/FALSE) ðàçðåøàåò/çàïðåùàåò ãåíåðàöèþ 32-áèòíîãî |
êîäà. |
|
<b>? codesize</b> îïòèìèçàöèÿ ðàçìåðà êîäà (â óùåðá ñêîðîñòè). |
|
<b>? compilerversion</b> min-vers óêàçûâàåò, êîìïèëÿòîð êàêîé âåðñèè íåîáõîäèì |
äëÿ êîìïèëÿöèè äàííîé ïðîãðàììû. |
|
<b>? ctrl_c</b> (TRUE or FALSE ) ðàçðåøàåò èëè çàïðåùàåò èãíîðèðîâàíèå |
íàæàòèÿ CTRL-C. |
|
<b>? dataseg</b> (value) óêàçûâàåò êîìïèëÿòîðó ñåãìåíòíûé àäðåñ ÎÇÓ |
äëÿ ïåðåìåííûõ ïðè êîìïèëÿöèè ROM-BIOS. |
|
<b>? define</b> (identifier) (token) îïðåäåëÿåò èäåíòèôèêàòîð. |
|
<b>? DOSrequired</b> (íîìåð) óñòàíàâëèâàåò ìèíèìàëüíóþ òðåáóåìóþ âåðñèþ |
DOS: ñòàðøèé áàéò - íîìåð âåðñèè, |
ìëàäøèé áàéò - íîìåð ìîäèôèêàöèè: |
0x0101 äëÿ âåðñèè 1.1 DOS |
0x0315 äëÿ âåðñèè 3.21 DOS |
0x0303 äëÿ âåðñèè 3.3 DOS |
0x0600 äëÿ âåðñèè 6.0 DOS |
0x0602 äëÿ âåðñèè 6.2 DOS è ò.ä. |
|
<b>? dosstring</b> (TRUE/FALSE) óêàçûâàåò êîìïèëÿòîðó, ÷òî â êà÷åñòâå |
òåðìèíàòîðà ñòðîêè íàäî èñïîëüçîâàòü ñèìâîë <b>$</b> |
|
<b>? else</b> ãåíåðèðóåò àëüòåðíàòèâíûé êîä åñëè <b>?ifdef</b> èëè |
<b>?ifndef</b> ïðèíèìàþò çíà÷åíèå FALSE (ïðèìåð |
èñïîëüçîâàíèÿ ñìîòðèòå â ôàéëå FPU.H--) |
|
<b>? endif</b> óêàçûâàåò íà êîíåö äåéñòâèÿ äèðåêòèâ <b>ifdef</b> è |
<b>ifndef</b> |
|
<b>? fastcallapi</b> (FALSE/TRUE) çàïðåòèòü/ðàçðåøèòü ãåíåðàöèþ áûñòðîãî âûçîâà |
API-ïðîöåäóð (ïî óìîë÷àíèþ ðàçðåøåíî). |
Äèðåêòèâà ðàáîòàåò ïðè êîìïèëÿöèè ïðîãðàìì |
ïîä Windows. |
|
<b>? fixuptable</b> (TRUE/FALSE) ðàçðåøèòü/çàïðåòèòü ñîçäàíèå FixUp òàáëèöû |
(ïî óìîë÷àíèþ çàïðåùåíî). Äèðåêòèâà ðàáîòàåò |
ïðè êîìïèëÿöèè ïðîãðàìì ïîä Windows. |
|
<b>? ifdef</b> (identifier) åñëè èäåíòèôèêàòîð îïðåäåëåí, òî âîçâðàùàåò |
TRUE èíà÷å FALSE |
|
<b>? imagebase</b> value çàäàåò àäðåñ Image Base. Ïî óìîë÷àíèþ ýòîò |
àäðåñ ðàâåí 0x400000. Äèðåêòèâà ðàáîòàåò ïðè |
êîìïèëÿöèè ïðîãðàìì ïîä Windows. |
|
<b>? ifndef</b> (identifier) åñëè èäåíòèôèêàòîð îïðåäåëåí, òî âîçâðàùàåò |
FALSE èíà÷å TRUE |
|
<b>? include</b> ("filename") âêëþ÷àåò äðóãîé ôàéë. |
|
<b>? includepath</b> ("path") óêàçàíèå êîìïèëÿòîðó, â êàêîé äèðåêòîðèè íàäî |
èñêàòü âêëþ÷àåìûå ôàéëû |
|
<b>? initallvar</b> èíèöèàëèçèðóåò 0 âñå íåèíèöèàëèçèðîâàííûå |
ïåðåìåííûå. |
|
<b>? jumptomain</b> (NONE, SHORT, NEAR or FALSE) |
óñòàíàâëèâàåò òèï ïåðåõîäà ê main(), |
çíà÷åíèå ïî óìîë÷àíèþ - NEAR. |
|
<b>? maxerrors</b> (number) ìàêñèìàëüíîå êîëè÷åñòâî íàéäåííûõ îøèáîê, |
ïðåâûñèâ êîòîðîå òðàíñëÿòîð ïðåêðàùàåò |
ðàáîòó, çíà÷åíèå ïî óìîë÷àíèþ - 16. |
|
<b>? movedatarom</b> (TRUE/FALSE) óêàçûâàåò êîìïèëÿòîðó î íåîáõîäèìîñòè |
ïåðåíîñà äàííûõ èç ÏÇÓ â ÎÇÓ. |
|
<b>? parsecommandline</b> (TRUE or FALSE) |
âêëþ÷àåò â ïðîãðàììó áëîê êîäà äëÿ |
ñèíòàêñè÷åñêîãî àíàëèçà êîìàíäíîé ñòðîêè |
çíà÷åíèå ïî óìîë÷àíèþ FALSE. |
|
<b>? pragma</b> ìîæåò îáúÿâëÿòü íåñêîëüêî äðóãèõ äèðåêòèâ |
|
<b>? print</b> (number or string) âûâîäèò íà ýêðàí ñòðîêó èëè ÷èñëî. |
|
<b>? printhex</b> (number) âûâîäèò íà ýêðàí ÷èñëî â øåñòíàäöàòåðè÷íîì |
êîäå. |
|
<b>? randombyte</b> âñòàâëÿåò â êîä ïðîãðàììû áàéò ñëó÷àéíîãî |
çíà÷åíèÿ. |
|
<b>? resize</b> (TRUE or FALSE) âêëþ÷àåò ôóíêöèþ èçìåíåíèÿ ïîñëå çàïóñêà |
ðàçìåðà âûäåëåííîãî ïðîãðàììå áëîêà ïàìÿòè |
íà ìèíèìàëüíî òðåáóåìûé îáúåì, |
çíà÷åíèå ïî óìîë÷àíèþ TRUE. |
|
<b>? resizemessage</b> (string) ñîîáùåíèå, âûâîäèìîå íà ýêðàí ïåðåä |
àâàðèéíûì ïðåðûâàíèåì âûïîëíåíèÿ ïðîãðàììû, |
åñëè èçìåíåíèå ðàçìåðà âûäåëåííîãî ïðîãðàììå |
áëîêà ïàìÿòè íå âûïîëíåíî. |
|
<b>? setdinproc</b> ïî ýòîé äèðåêòèâå êîìïèëÿòîð íåìåäëåííî |
âñòàâëÿåò â êîä êîìïèëèðóåìîé ïðîãðàììû âñå |
âûçûâàâøèåñÿ ðàíåå äèíàìè÷åñêèå ïðîöåäóðû. |
|
<b>? sizerom</b> (value) óêàçûâàåò êîìïèëÿòîðó ðàçìåð ÏÇÓ. |
|
<b>? speed</b> îïòèìèçàöèÿ áûñòðîäåéñòâèÿ (çíà÷åíèå |
ïî óìîë÷àíèþ) â óùåðá ðàçìåðó êîäà. |
|
<b>? stack</b> (number) îïðåäåëÿåò ðàçìåð ñòåêà ïðîãðàììû â áàéòàõ. |
|
<b>? startaddress</b> (number) óñòàíàâëèâàåò ñòàðòîâûé àäðåñ íà÷àëà êîäà, |
çíà÷åíèå ïî óìîë÷àíèþ 0x100. |
|
<b>? startuptomain</b> â com-ôàéëàõ ðàçìåùàåò <b>startup-</b>êîä â |
ïðîöåäóðå <b>main()</b>. |
|
<b>? startusevar</b> (number) óêàçûâàåò àäðåñ, ñ êîòîðîãî ðàçðåøåíî |
èñïîëüçîâàòü ÿ÷åéêè ïàìÿòè ïîä |
íåèíèöèàëèçèðîâàííûå ïåðåìåííûå. |
|
<b>? sysattribute</b> (çíà÷åíèå) ýòà äèðåêòèâà ïåðåäàåò êîìïèëÿòîðó àòðèáóò |
ñîçäàâàåìîãî äðàéâåðà. Ïî óìîë÷àíèþ |
óñòàíàâëèâàåòñÿ çíà÷åíèå 0x2000. |
Äåéñòâóåò òîëüêî ñ êëþ÷îì <b>/SYS</b>. |
|
<b>? sysname</b> <òåêñòîâàÿ ñòðîêà> ýòà äèðåêòèâà ïåðåäàåò êîìïèëÿòîðó èìÿ |
áóäóùåãî äðàéâåðà. Ïî óìîë÷àíèþ |
ïðèñâàèâàåòñÿ èìÿ <b>NO_NAME</b>. Äëèíà èìåíè íå |
áîëåå 8 ñèìâîëîâ. Äåéñòâóåò òîëüêî ñ êëþ÷îì |
<b>/SYS</b>. |
|
<b>? syscommand</b> <command_0>,<command_1>, ...<command_n>; - ýòà äèðåêòèâà |
ÿâëÿåòñÿ îáÿçàòåëüíîé ïðè ñîçäàíèè |
äðàéâåðîâ. Ïî ýòîé äèðåêòèâå êîìïèëÿòîðó |
ïåðåäàåòñÿ ñïèñîê èìåí ïðîöåäóð îáðàáîòêè |
êîìàíä äðàéâåðà. Äåéñòâóåò òîëüêî ñ êëþ÷îì |
<b>/SYS</b>. |
|
<b>? warning</b> (TRUE or FALSE) ýòà äèðåêòèâà ðàçðåøàåò èëè çàïðåùàåò âûäà÷ó |
ïðåäóïðåæäåíèé. Äèðåêòèâà äåéñòâóåò òîëüêî â |
ïðåäåëàõ òåêóùåãî ôàéëà è íå âëèÿåò íà |
âêëþ÷àåìûå ôàéëû. |
|
<b>? winmonoblock</b> FALSE çàïðåùàåò ðàçìåùåíèå òàáëèö ôàéëà ôîðìàòà PE |
â îäíó ñåêöèþ. |
|
<b>? undef</b> óíè÷òîæàåò êîíñòàíòû îáúÿâëåííûå äèðåêòèâîé |
<b>? define</b> |
|
<b>? use8086</b> îãðàíè÷èâàåòñÿ ïðè ãåíåðàöèè îáúåêòíîãî êîäà |
êîìàíäàìè 8088/8086 (çíà÷åíèå ïî óìîë÷àíèþ). |
|
<b>? use8088</b> îãðàíè÷èâàåòñÿ ïðè ãåíåðàöèè îáúåêòíîãî êîäà |
êîìàíäàìè 8088/8086 (çíà÷åíèå ïî óìîë÷àíèþ). |
|
<b>? use80186</b> äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà |
êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà 80186. |
|
<b>? use80286</b> äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà |
êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà 80286. |
|
<b>? use80386</b> äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà |
êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà 80386. |
|
<b>? use80486</b> äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà |
êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà 80486. |
|
<b>? usePentium</b> äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà |
êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà Pentium. |
|
<b>? useMMX</b> äîïóñêàåò ïðè ãåíåðàöèè îáúåêòíîãî êîäà |
êîìàíäû è îïòèìèçàöèþ äëÿ ïðîöåññîðà Pentium |
MMX. |
|
<b>? usestartup</b> ðàçðåøàåò êîìïèëÿòîðó èñïîëüçîâàòü ÿ÷åéêè |
ïàìÿòè, çàíèìàåìûå êîäîì íà÷àëüíîé |
èíèöèàëèçàöèè ïðîãðàììû. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.1> |
2.2.1 ?ifdef/?ifndef |
</A></B></FONT><FONT FACE="Courier"> |
|
Ðàíåå äèðåêòèâà <b>?ifdef</b> ñðàáàòûâàëà íà íàëè÷èå êîíñòàíòû íåçàâèñèìî |
îò çíà÷åíèÿ åå âåëè÷èíû, à äèðåêòèâà <b>?ifndef</b> ñðàáàòûâàëà íà îòñóòñòâèå |
êîíñòàíòû â êîìïèëèðóåìîì ôàéëå. Òåïåðü <b>?indef</b> ñðàáàòûâàåò ëèøü íà |
êîíñòàíòó îòëè÷íóþ îò FALSE, à <b>?ifndef</b> ñðàáàòûâàåò êàê íà îòñóòñòâèå |
êîíñòàíòû â êîìïèëèðóåìîì ôàéëå, òàê è íà êîíñòàíòó èìåþùóþ çíà÷åíèå |
FALSE. |
|
Äëÿ äèðåêòèâ <b>?ifdef/?ifndef</b> çàðåçåðâèðîâàíû êîíñòàíòû <i>codesize</i> è |
<i>speed</i>, êîòîðûå ïðèíèìàþò çíà÷åíèå TRUE èëè FALSE â çàâèñèìîñòè îò ðåæèìà |
îïòèìèçàöèè. Ýòî áóäåò ïîëåçíûì äëÿ ñîçäàíèÿ áîëåå ãèáêèõ áèáëèîòåê. |
|
Åñòü âîçìîæíîñòü ïðîâåðêè òèïà CPU äëÿ êîòîðîãî âåäåòñÿ êîìïèëÿöèÿ. |
Äîïóñòèìûå âàðèàíòû ñèíòàêñèñà: |
|
?ifdef cpu > 1 //åñëè ïðîãðàììà êîìïèëèðóåòñÿ äëÿ CPU âûøå 80186 |
?ifndef cpu >= 2 // -------//------------- íå áîëüøå èëè ðàâíî 80286 |
?ifdef cpu == 3 // -------//------------- ðàâíî 80386 |
?ifdef cpu != 0 // -------//------------- íå ðàâåí 8086 |
?ifdef cpu < 3 // -------//------------- õóæå 80386 |
?ifdef cpu <= 2 // -------//------------- õóæå èëè ðàâåí 80286 |
|
Ýòà äèðåêòèâà ïîçâîëèò Âàì ïèñàòü îäíó ïðîöåäóðó äëÿ ðàçëè÷íûõ òèïîâ |
CPU. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.2> |
2.2.2 ?initallvar |
</A></B></FONT><FONT FACE="Courier"> |
|
Äèðåêòèâîé <b>?initallvar TRUE</b> âêëþ÷àåòñÿ ðåæèì ïðè êîòîðîì âñåì |
íåèíèöèàëèçèðîâàííûì ïåðåìåííûì áóäåò ïðèñâîåíî íóëåâîå çíà÷åíèå è îíè |
áóäóò ðàñïîëàãàòüñÿ â òîì ìåñòå, ãäå áûëè îáúÿâëåíû. Ò.å. ïðàêòè÷åñêè |
èñ÷åçíóò íåèíèöèàëèçèðîâàííûå ïåðåìåííûå. Ýòî ìîæåò áûòü ïîëåçíûì ïðè |
íàïèñàíèè äðàéâåðîâ è ðåçèäåíòíûõ ïðîãðàìì. |
|
Ïàðàìåòð FALSE ýòîé äèðåêòèâû îòêëþ÷àåò ýòîò ðåæèì. |
Ïî óìîë÷àíèþ ýòà äèðåêòèâà óñòàíîâëåíà â FALSE. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.3> |
2.2.3 ?usestartup |
</A></B></FONT><FONT FACE="Courier"> |
|
Äèðåêòèâà <b>?usestartup</b> ðàçðåøàåò êîìïèëÿòîðó èñïîëüçîâàòü ÿ÷åéêè êîäà |
íà÷àëüíîé èíèöèàëèçàöèè ïðîãðàììû (startup) äëÿ ïîñëåäóþùåãî ðàçìåùåíèÿ â |
íèõ íåèíèöèàëèçèðîâàííûõ ïåðåìåííûõ. Ýòî ìîæåò áûòü ïîëåçíûì äëÿ ïîëó÷åíèÿ |
áîëåå êîìïàêòíîãî êîäà, êàê îáû÷íûõ ïðîãðàìì, òàê è â îñîáåííîñòè |
ðåçèäåíòíûõ. |
|
Ýòó äèðåêòèâó ïðèìåíÿþò òîëüêî äëÿ ãåíåðàöèè *.COM ôàéëîâ. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.4> |
2.2.4 ?startusevar |
</A></B></FONT><FONT FACE="Courier"> |
|
Äèðåêòèâîé <b>?startusevar</b> ìîæíî óêàçàòü íà÷àëüíûé àäðåñ ñ êîòîðîãî |
êîìïèëÿòîð áóäåò ðàñïðåäåëÿòü ïàìÿòü äëÿ íåèíèöèàëèçèðîâàííûõ ïåðåìåííûõ. |
Íàïðèìåð, ïîëó÷èâ äèðåêòèâó <b>?startusevar 0x53</b> êîìïèëÿòîð áóäåò |
ðàñïîëàãàòü íåèíèöèàëèçèðîâàííûå ïåðåìåííûå, íà÷èíàÿ ñ àäðåñà 0x53. Ýòî |
ìîæåò áûòü ïîëåçíûì äëÿ ïîëó÷åíèÿ áîëåå êîìïàêòíîãî êîäà êàê äëÿ |
ðåçèäåíòíûõ, òàê è äëÿ îáû÷íûõ ïðîãðàìì. |
|
Ýòó äèðåêòèâó ïðèìåíÿþò òîëüêî äëÿ ãåíåðàöèè *.COM ôàéëîâ. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.5> |
2.2.5 ?atexit |
</A></B></FONT><FONT FACE="Courier"> |
|
Äèðåêòèâà <b>?atexit</b> äîáàâëÿåò â startup ïðîãðàììû êîä ïîääåðæêè |
ïðîöåäóðû <b>ATEXIT</b>, ðåçåðâèðóåò ìåñòî äëÿ õðàíåíèÿ 16 àäðåñîâ ïðîöåäóð è |
èçìåíÿåò êîä ïðîöåäóð <b>ABORT</b> è <b>EXIT</b>. |
|
Ïðîöåäóðà <b>ATEXIT</b> ðåãèñòðèðóåò ïðîöåäóðó, àäðåñ êîòîðîé ïåðåäàåòñÿ åé â |
êà÷åñòâå ïàðàìåòðà, êàê ïðîöåäóðó çàâåðøåíèÿ ïðîãðàììû. Ýòà ïðîöåäóðà |
áóäåò âûçâàíà â ìîìåíò çàâåðøåíèÿ ïðîãðàììû ïðîöåäóðàìè <b>ABORT</b> èëè <b>EXIT</b> |
èëè èíñòðóêöèåé <b>RET</b> èç <b>main</b>. |
|
Âñåãî ìîæíî çàðåãèñòðèðîâàòü äî 16 ïðîöåäóð. Ïðîöåäóðû âûçûâàþòñÿ â |
ïîðÿäêå îáðàòíîì ïîðÿäêó èõ ðåãèñòðàöèè. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.6> |
2.2.6 ?startuptomain |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïî ýòîé äèðåêòèâå êîìïèëÿòîð â íà÷àëå ôàéëà äåëàåò <b>jmp</b> íà íà÷àëî |
ïðîöåäóðû main(). Ïåðåä íà÷àëîì êîìïèëÿöèè ýòîé ïðîöåäóðû êîìïèëÿòîð |
íà÷íåò êîìïèëÿöèþ startup êîäà è ëèøü çàòåì áóäåò ïðîäîëæåíà êîìïèëÿöèÿ |
ïðîöåäóðû main(). Òåì ñàìûì <b>startup êîä</b> îêàæåòñÿ íå â íà÷àëå ôàéëà, êàê |
ýòî ïðîèñõîäèò îáû÷íî, à â òåëå ïðîöåäóðû main(). Ýòî áóäåò ïîëåçíûì ïðè |
êîìïèëÿöèè ðåçèäåíòíûõ ïðîãðàìì (TSR). |
|
Äèðåêòèâà ?startuptomain ðàáîòàåò òîëüêî ïðè êîìïèëÿöèè com-ôàéëîâ. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.7> |
2.2.7 ?undef |
</A></B></FONT><FONT FACE="Courier"> |
|
Ýòà äèðåêòèâà óíè÷òîæàåò êîíñòàíòû îáúÿâëåííûå äèðåêòèâîé <b>?define</b>. Åå |
ìîæíî ïðèìåíÿòü äëÿ èçìåíåíèÿ â ïðîöåññå êîìïèëÿöèè çíà÷åíèÿ êàêîé-íèáóäü |
êîíñòàíòû. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.8> |
2.2.8 ?align è ?aligncode |
</A></B></FONT><FONT FACE="Courier"> |
|
 C-- ñóùåñòâóåò äèðåêòèâà <b>?align</b>, êîòîðàÿ äåëàåò îäíîêðàòíîå |
âûðàâíèâàíèå äàííûõ íà ÷åòíûé àäðåñ. Íî åñëè ê ýòîé äèðåêòèâå äîáàâèòü |
÷èñëî, òî âûðàâíèâàíèå áóäåò ïðîèçâåäåíî íà àäðåñ êðàòíûé ýòîìó ÷èñëó. |
Íàïðèìåð äèðåêòèâà <b>?align 4</b> äîïîëíèò ñåãìåíò äàííûõ äî àäðåñà êðàòíîãî |
4. Ïðè âûðàâíèâàíèè áóäóò âñòàâëÿòüñÿ áàéòû, çíà÷åíèÿ êîòîðûõ îïðåäåëÿþòñÿ |
äèðåêòèâîé <b>?aligner</b>, ïî óìîë÷àíèþ ýòî çíà÷åíèå ðàâíî íóëþ. Äèðåêòèâà |
<b>?align</b> ïðîèçâîäèò âûðàâíèâàíèå òîëüêî â ñåãìåíòå äàííûõ. Â òåõ ìîäåëÿõ |
ïàìÿòè, â êîòîðûõ ñåãìåíò äàííûõ è êîäà ñîâïàäàþò ýòó äèðåêòèâó ìîæíî |
ïðèìåíÿòü è äëÿ âûðàâíèâàíèÿ íà÷àëà ïðîöåäóð. |
|
Äèðåêòèâà <b>?aligncode [value]</b> äåëàåò âûðàâíèâàíèå â ñåãìåíòå êîäà íà |
àäðåñ êðàòíûé çíà÷åíèþ <b>value</b>, ïî óìîë÷àíèþ íà ÷åòíûé àäðåñ. Çíà÷åíèå áàéòà |
çàïîëíåíèÿ â ýòîé äèðåêòèâå ÿâëÿåòñÿ ÷èñëî 0x90 - êîä èíñòðóêöèè NOP. |
Çíà÷åíèå áàéòà çàïîëíåíèÿ äëÿ ýòîé äèðåêòèâû èçìåíèòü íåëüçÿ. Ò.î. ýòó |
äèðåêòèâó ìîæíî ïðèìåíÿòü è âíóòðè èñïîëíÿåìîãî êîäà. Íàïðèìåð, åñëè Âû |
õîòèòå ïîëó÷èòü áûñòðûé êîä íà 486 ïðîöåññîðå, òî ðåêîìåíäóåòñÿ äåëàòü |
âûðàâíèâàíèå íà÷àëà ïðîöåäóð è öèêëîâ íà àäðåñ êðàòíûé 16. |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=2.2.9> |
2.2.9 ?pragma |
</A></B></FONT><FONT FACE="Courier"> |
|
Äèðåêòèâà <b>#pragma</b> ýòî ìíîãîôóíêöèîíàëüíàëüíàÿ äèðåêòèâà, êîòîðàÿ â |
ñâîþ î÷åðåäü èìååò ñâîè äèðåêòèâû: |
|
<b>option</b> |
Äèðåêòèâà <b>option</b> ïîçâîëÿåò âêëþ÷èòü â Âàø êîä îïöèè êîìàíäíîé ñòðîêè |
êîìïèëÿòîðà. Íåêîòîðûå îïöèè íå ìîãóò áûòü èñïîëüçîâàíû â ýòîé äèðåêòèâå; |
äðóãèå äîëæíû ïîìåùàòüñÿ â ñàìîì íà÷àëå èñõîäíîãî òåêñòà. Ïðèìåð: |
|
#pragma option w32c |
|
Ýòà äèðåêòèâà îáúÿâëÿåò êîìïèëÿòîðó, ÷òî íàäî ñîçäàòü êîíñîëüíûé |
32-áèòíûé ôàéë ïîä windows. |
|
<b>startup</b> |
Äèðåêòèâîé <b>startup</b> ìîæíî óêàçàòü ôóíêöèþ, êîòîðàÿ áóäåò âûïîëíåíà ïåðåä |
çàïóñêîì ïðîöåäóðû <b>main</b>. Ýòà äèðåêòèâà èìååò òàêîé ôîðìàò: |
|
#pragma startup procname |
|
Êîëè÷åñòâî ðàç, êîòîðîå ìîæíî ïðèìåíÿòü ýòó äèðåêòèâó â îäíîé |
ïðîãðàììå íå îãðàíè÷åíî, íî ðåàëüíî ìîæíî èñïîëüçîâàòü ëèøü íåñêîëüêî |
òûñÿ÷ ðàç. |
|
<b>line</b> |
Äèðåêòèâà <b>line</b> âûâîäèò íà ýêðàí íîìåð òåêóùåé ñòðîêè è èìÿ ôàéëà. |
Äîïîëíèòåëüíî ìîæåò âûâîäèòüñÿ ñîäåðæèìîå ñòðîêè íàõîäÿùååñÿ ïîñëå ñëîâà |
<b>line</b>. Ïðèìåð: |
|
#pragma line information |
|
Âñòðåòèâ ýòó äèðåêòèâó, êîìïèëÿòîð âûâåäåò íà ýêðàí íîìåð ñòðîêè è èìÿ |
ôàéëà. Òàêæå áóäåò âûâåäåíî ñîîáùåíèå ñïðàâà îò ñëîâà <b>line</b>, åñëè îíî |
åñòü. |
|
<b>resource</b> |
Ýòà äèðåêòèâà ìîæåò ïðèíèìàòü çíà÷åíèÿ <b>start</b> è <b>end</b>. Ýòè äâà |
çíà÷åíèÿ âûäåëÿþò íà÷àëî è êîíåö áëîêà ðåñóðñîâ, åñëè âû èñïîëüçóåòå åãî |
íåïîñðåäñòâåííî â èñõîäíîì êîäå ôàéëà, à íå â îòäåëüíîì ôàéëå. Ïðèìåð: |
|
#pragma resource start |
|
MyMenu MENU DISCARDABLE |
BEGIN POPUP "Files",HELP |
BEGIN |
MENUITEM "Open", ID_OPEN |
MENUITEM "Save", ID_SAVE |
MENUITEM SEPARATOR |
MENUITEM "Exit", ID_EXIT |
END |
MENUITEM "Other", 65535 |
END |
|
#pragma resource end |
<A href="#contents2" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=3.1> |
3. Êîíñòàíòû. |
|
3.1 ×èñëîâûå êîíñòàíòû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïðåäñòàâëåíèå ÷èñëîâûõ êîíñòàíò â âèäå äåñÿòè÷íûõ ÷èñåë (÷èñåë ñ |
îñíîâàíèåì 10) è øåñòíàäöàòåðè÷íûõ ÷èñåë (îñíîâàíèå ñ÷èñëåíèÿ 16) ïîëíîñòüþ |
àíàëîãè÷íî ÿçûêó <b>C</b>. |
|
Ïðè äâîè÷íîì ïðåäñòàâëåíèè ÷èñåë (îñíîâàíèå 2) ÷èñëî äîëæíî íà÷èíàòüñÿ |
ñ ñèìâîëîâ <b>0b</b>, çà êîòîðûìè áåç ïðîáåëà èäåò ïîñëåäîâàòåëüíîñòü íóëåé è |
åäèíèö. |
|
Ïðè âîñüìåðè÷íîì ïðåäñòàâëåíèè ÷èñåë (îñíîâàíèå 8) ÷èñëî äîëæíî |
íà÷èíàòüñÿ ñ ñèìâîëîâ <b>0o</b>, çà êîòîðûìè áåç ïðîáåëà èäåò ïîñëåäîâàòåëüíîñòü |
öèôð. |
|
Âåùåñòâåííîå ÷èñëî îòëè÷àåòñÿ îò öåëîãî ïî íàëè÷èþ â íåì òî÷êè. |
Íà÷èíàòüñÿ âåùåñòâåííîå ÷èñëî äîëæíî ëèáî öèôðîé îò 0 äî 9, ëèáî çíàêîì |
ìèíóñ. Íåîáÿçàòåëüíîé ÷àñòüþ âåùåñòâåííîãî ÷èñëà ÿâëÿåòñÿ ïîêàçàòåëü |
ñòåïåíè. Ïîêàçàòåëü ñòåïåíè îòäåëÿåòñÿ îò ÷èñëà ñèìâîëîì <b>e</b> èëè <b>E</b>. |
Ïðîáåëû íåäîïóñòèìû. |
|
Ïðèìåðû: |
0b11111111 // äâîè÷íîå ïðåäñòàâëåíèå ÷èñëà 255 |
0x00F // øåñòíàäöàòåðè÷íîå ïðåäñòàâëåíèå ÷èñëà 15 |
0o10 // âîñüìåðè÷íîå ïðåäñòàâëåíèå ÷èñëà 8 |
1.234567E-20 // âåùåñòâåííîå ÷èñëî |
|
C-- âìåñòå ñ òðàäèöèîííûì <b>C-</b>ñòèëåì øåñòíàäöàòåðè÷íûõ ÷èñåë ïîíèìàåò è |
÷èñëà çàïèñàííûå â ñòèëå àññåìáëåðà. Äëÿ òåõ, êòî âäðóã íå çíàåò, ñîîáùàþ, |
÷òî øåñòíàäöàòåðè÷íûå ÷èñëà â àññåìáëåðå èìåþò íà êîíöå ñèìâîë <b>h</b> èëè <b>H</b>. |
Åñëè ïåðâûé ñèìâîë øåñòíàäöàòåðè÷íîãî ÷èñëà áîëüøå <b>9</b>, òî ïåðåä íèì |
îáÿçàòåëüíî äîëæåí áûòü çàïèñàí ñèìâîë <b>0</b>. Ïðèìåðû: |
|
1234h |
0A000H |
|
Ê ÷èñëîâûì êîíñòàíòàì ìîæíî ïèñàòü ñóôôèêñû <b>L, U è F</b>. Ôàêòè÷åñêè |
ýòè ñóôôèêñû â C-- íå èãðàþò íèêàêîé ðîëè, êîìïèëÿòîð èõ ïðîñòî |
ïðîãëàòûâàåò. Ïðèìåð: |
|
#define DEF 1L |
#define DEF2 2Lu |
#define DEF3 3.0F |
|
Ýòè ñóôôèêñû íå çàâèñÿò îò ðåãèñòðà, ò.å. èõ ìîæíî ïèñàòü êàê |
ìàëåíüêèìè, òàê è áîëüøèìè áóêâàìè. |
<A href="#contents3" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=3.2> |
3.2 Ñèìâîëüíûå êîíñòàíòû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Îäèíî÷íûå ñèìâîëüíûå êîíñòàíòû, êàê è â <b>C</b>, äîëæíû çàêëþ÷àòüñÿ â |
îäèíî÷íûå êàâû÷êè <b>'</b>. |
|
Òàêæå êàê è â <b>C</b>, äëÿ îáîçíà÷åíèÿ ñïåöèàëüíûõ ñèìâîëîâ ñëóæèò îáðàòíàÿ |
íàêëîííàÿ ÷åðòà âïðàâî <b>\</b> ñ ïîñëåäóþùèì çà íåé êëþ÷åâûì ñèìâîëîì (èëè |
íåñêîëüêèìè ñèìâîëàìè). Ïîääåðæèâàþòñÿ ñëåäóþùèå ñïåöèàëüíûå ñèìâîëû: |
|
\a /* çâóêîâîé ñèãíàë */ |
\b /* çàáîé */ |
\f /* ïåðåâîä ñòðàíèöû */ |
\l /* ïåðåâîä ñòðîêè */ |
\n /* âîçâðàò êàðåòêè*/ |
\r /* âîçâðàò êàðåòêè*/ |
\t /* òàáóëÿöèÿ */ |
\x?? /* ñèìâîë ASCII, ñîîòâåòñòâóþùèé áàéòîâîìó ïðåäñòàâëåíèþ, |
ñîñòîÿùåìó èç äâóõ øåñòíàäöàòåðè÷íûõ öèôð, ðàñïîëîæåííûõ |
íà ìåñòå çíàêîâ âîïðîñà */ |
\??? /* ñèìâîë ASCII, ñîîòâåòñòâóþùèé áàéòîâîìó ïðåäñòàâëåíèþ, |
ñîñòîÿùåìó èç òðåõ äåñÿòè÷íûõ öèôð, ðàñïîëîæåííûõ |
íà ìåñòå çíàêîâ âîïðîñà */ |
|
Ëþáîé äðóãîé ñèìâîë ïîñëå îáðàòíîé íàêëîííîé ÷åðòû âïðàâî áóäåò ïðèíÿò |
êàê ïðîñòîé ñèìâîë. |
|
Ñèìâîë "Îäèíî÷íàÿ êàâû÷êà" <b>'</b> ìîæåò áûòü ââåäåí ïðè ïîìîùè êîíñòðóêöèè |
<b>\'</b> |
|
Ñèìâîë NULL ìîæåò áûòü ââåäåí êàê '' |
|
 C-- ïîääåðæèâàþòñÿ è ìíîãîáóêâåííûå ñèìâîëüíûå êîíñòàíòû. Ïðèìåðû |
ìíîãîáóêâåííûõ ñèìâîëüíûõ êîíñòàíò: |
|
'ab' |
'the' |
'this is large' |
|
Íèêàêîãî îãðàíè÷åíèÿ íà ÷èñëî ñèìâîëîâ â ñèìâîëüíîé êîíñòàíòå íå |
íàêëàäûâàåòñÿ, íî ðàçëè÷àþòñÿ òîëüêî ïîñëåäíèå 4 ñèìâîëà. Ýòî - ìàêñèìóì, |
êîòîðûé ìîæåò áûòü ñîõðàíåí â 32-ðàçðÿäíîé ïåðåìåííîé. Íàïðèìåð, êîíñòàíòû |
<b>this is large</b> è <b>arge</b> - îäèíàêîâû. |
|
C-- îáðàáàòûâàåò âñå ñèìâîëüíûå êîíñòàíòû êàê ÷èñëîâûå çíà÷åíèÿ ASCII |
ñèìâîëîâ. Äëÿ ìíîãîáóêâåííûõ ñèìâîëüíûõ êîíñòàíò ïåðâûé ñèìâîë |
ñîîòâåòñòâóåò ñòàðøèì ðàçðÿäàì, òàêèì îáðàçîì, çíà÷åíèå äëÿ <b>ab</b> áóäåò |
çàêîäèðîâàíî êàê <b>a*256+b</b>. |
<A href="#contents3" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=3.3> |
3.3 Ñòðîêîâûå êîíñòàíòû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñòðîêîâûå êîíñòàíòû, êàê è â C, çàêëþ÷àþòñÿ â äâîéíûå êàâû÷êè ("). |
Ñïåöèàëüíûå ñèìâîëû âíóòðè ñòðîê îáîçíà÷àþòñÿ òàê æå, êàê è â ñèìâîëüíûõ |
êîíñòàíòàõ. Âñå ñïåöèàëüíûå ñèìâîëû èìåþò òî æå çíà÷åíèå, ÷òî è â |
ñèìâîëüíûõ êîíñòàíòàõ çà èñêëþ÷åíèåì <b>\n</b>, êîòîðûé èìååò çíà÷åíèå <b>íîâàÿ |
ñòðîêà</b> è çàìåíÿåò ñîáîé ïàðó ñèìâîëîâ <b>âîçâðàò êàðåòêè</b> è <b>ïåðåâîä |
ñòðîêè</b>. |
|
 íàñòîÿùåå âðåìÿ íàèáîëüøàÿ äëèíà ñòðîêîâîé êîíñòàíòû - 2048 ñèìâîëîâ, |
âêëþ÷àÿ ñèìâîë-îãðàíè÷èòåëü 0, òàêèì îáðàçîì, ìàêñèìóì 2047 çíà÷àùèõ |
ñèìâîëîâ. |
<A href="#contents3" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=3.4> |
3.4 Ïîñòîÿííûå âûðàæåíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïîñòîÿííîå âûðàæåíèå - îäèíî÷íàÿ ÷èñëîâàÿ êîíñòàíòà èëè íåñêîëüêî |
÷èñëîâûõ êîíñòàíò, ñâÿçàííûõ ìåæäó ñîáîé îïåðàòîðàìè. ×èñëîâîå çíà÷åíèå |
âûðàæåíèÿ âû÷èñëÿåòñÿ îäèí ðàç âî âðåìÿ êîìïèëÿöèè è äàëåå èñïîëüçóåòñÿ |
òîëüêî åãî ïîñòîÿííîå çíà÷åíèå. |
|
Ïîäîáíî âñåì âûðàæåíèÿì â C--, ïîñòîÿííûå âûðàæåíèÿ âñåãäà âû÷èñëÿþòñÿ |
ñëåâà íàïðàâî, íåâçèðàÿ íà ïðàâèëà àðèôìåòèêè! Ýòî ñîâåðøåííî îòëè÷íî îò |
äðóãèõ ÿçûêîâ, è ïðè íàïèñàíèè âûðàæåíèé íàäî áûòü îñòîðîæíûì è ïîìíèòü, |
÷òî 2+3*2=10 à íå 8. |
|
Íåêîòîðûå ïðèìåðû ïîñòîÿííûõ âûðàæåíèé: |
45 & 1 + 3 // ðàâíÿåòñÿ 4 |
14 - 1 / 2 // ðàâíÿåòñÿ 6 (ïîìíèòå öåëî÷èñëåííûå çíà÷åíèÿ) |
1 * 2 * 3 / 2 + 4 // ðàâíÿåòñÿ 7 |
Ïðèìåðû ñ ïðèìåíåíèåì âåùåñòâåííûõ ÷èñåë: |
3.23*1.53+2.0E2 // ðàâíÿåòñÿ 204.9419 |
<A href="#contents3" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.1> |
4. Âûðàæåíèÿ. |
|
4.1 Òèïû âûðàæåíèé. |
</A></B></FONT><FONT FACE="Courier"> |
|
Èìåþòñÿ òðè òèïà âûðàæåíèé â C--, íå ñ÷èòàÿ ïîñòîÿííûõ âûðàæåíèé. Ýòî |
âûðàæåíèÿ òèïà <b>EAX/AX/AL</b>, âûðàæåíèÿ òèïà <b>íåEAX/AX/AL</b> è óñëîâíûå âûðàæåíèÿ. |
Âñå C-- âûðàæåíèÿ âû÷èñëÿþòñÿ ñëåâà íàïðàâî, íåçàâèñèìî îò ñòàðøèíñòâà |
âõîäÿùèõ â âûðàæåíèå ìàòåìàòè÷åñêèõ îïåðàöèé. |
<A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.2> |
4.2 Âûðàæåíèÿ òèïà EAX/AX/AL. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ýòîò òèï âûðàæåíèé ïðèìåíÿåòñÿ â ñëó÷àå, êîãäà åãî ðåçóëüòàò ìîæåò áûòü |
ñîõðàíåí â ïåðåìåííîé â ïàìÿòè èëè â ðåãèñòðå <b>EAX</b> èëè <b>AX</b> èëè <b>AL</b>. |
|
Åñëè ðåçóëüòàò ìîæåò áûòü ñîõðàíåí â ïåðåìåííûõ òèïà <b>byte</b> èëè <b>char</b>, |
èñïîëüçóåòñÿ íîòàöèÿ <b>AL</b>. |
|
Åñëè ðåçóëüòàò ìîæåò áûòü ñîõðàíåí â ïåðåìåííûõ òèïà <b>word</b> èëè <b>int</b>, |
èñïîëüçóåòñÿ íîòàöèÿ <b>AX</b>. |
|
Åñëè ðåçóëüòàò ìîæåò áûòü ñîõðàíåí â ïåðåìåííûõ òèïà <b>dword, long</b> èëè |
<b>float</b>, èñïîëüçóåòñÿ íîòàöèÿ <b>EAX</b>. |
<A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.3> |
4.3 Âûðàæåíèÿ èñïîëüçóþùèå ïîëó÷àòåëü ïðè âû÷èñëåíèè âûðàæåíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Åñëè â ïðàâîé ÷àñòè âûðàæåíèÿ èñïîëüçóåòñÿ ïåðåìåííàÿ ÿâëÿþùàÿñÿ |
îäíîâðåìåííî è ïðèåìíèêîì, òî òàêèå âûðàæåíèÿ äàþò ðàçëè÷íûå ðåçóëüòàòû â |
çàâèñèìîñòè îò òîãî ÿâëÿåòñÿ ïðèåìíèê ðåãèñòðîì èëè ïåðåìåííîé ïàìÿòè. Ýòî |
ñâÿçàíî ñ òåì, ÷òî ïðè âû÷èñëåíèè âûðàæåíèÿ â ïåðåìåííóþ ïàìÿòè, âû÷èñëåíèå |
ïðîèçâîäèòñÿ ñíà÷àëà â ðåãèñòð <b>EAX/AX/AL</b>, è ëèøü ïîñëå îêîí÷àíèÿ âû÷èñëåíèÿ |
ðåçóëüòàò áóäåò çàïèñàí â ïðèåìíèê. Åñëè æå ïðèåìíèêîì ÿâëÿåòñÿ ðåãèñòð, òî |
åãî çíà÷åíèå áóäåò ìåíÿòüñÿ ïîñëå êàæäîé îïåðàöèè âû÷èñëåíèÿ. Ïðèìåð: |
|
int var; |
var = BX = 2; |
var = 3 + var; // ðåçóëüòàòîì áóäåò 5 |
BX = 3 + BX; // ðåçóëüòàòîì áóäåò 6 |
<A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.4> |
4.4 Íå - EAX/AX/AL âûðàæåíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ýòîò òèï âûðàæåíèé ïðèìåíÿåòñÿ â ñëó÷àå, êîãäà åãî ðåçóëüòàò äîëæåí |
áûòü ñîõðàíåí â ëþáîì äðóãîì ðåãèñòðå, îòëè÷íîì îò àêêóìóëÿòîðà <b>EAX, AX</b> |
èëè <b>AL</b>.  ïðîöåññå âû÷èñëåíèÿ âûðàæåíèÿ ýòîãî òèïà ìåíÿåòñÿ òîëüêî |
ñîäåðæèìîå óêàçàííîãî ðåãèñòðà-ïîëó÷àòåëÿ, âñå äðóãèå ðåãèñòðû áóäóò |
ñîõðàíåíû. Åñëè ðåãèñòðîì-ïîëó÷àòåëåì ñëóæèò áàéòîâûé ðåãèñòð, à ïðè |
âû÷èñëåíèè èñïîëüçóþòñÿ âåëè÷èíû ðàçìåðîì â ñëîâî, îäíîâðåìåííî ñ çàïèñüþ â |
ìëàäøèé áàéò ìîæåò áûòü ðàçðóøåíî ñîäåðæèìîå ñòàðøåãî áàéòà |
ðåãèñòðà-ïîëó÷àòåëÿ. |
|
Ýòî îáñòîÿòåëüñòâî íàêëàäûâàåò íåêîòîðûå îãðàíè÷åíèÿ íà îïåðàöèè è |
îïåðàíäû, äîïóñòèìûå â âûðàæåíèÿõ òèïà <b>íå EAX/AX/AL</b>. Âíóòðè âûðàæåíèé |
áàéòîâîãî òèïà íå äîïóñêàåòñÿ: |
|
- äåëàòü âûçîâû ÌÀÊÐÎÊÎÌÀÍÄ, |
- äåëàòü âûçîâû ÐÅÃÈÑÒÐÎÂÛÕ ïðîöåäóð |
- äåëàòü âûçîâû ÑÒÅÊÎÂÛÕ ïðîöåäóð |
|
Ðàíåå â <b>íå-EAX/AX/AL</b> âûðàæåíèÿõ áûëî ìîæíî èñïîëüçîâàòü ëèøü |
îïåðàöèè: ñëîæåíèÿ, âû÷èòàíèÿ, XOR, OR, AND. Òåïåðü äëÿ 16 è 32 áèòíûõ |
ðåãèñòðîâ ïî÷òè âñå îãðàíè÷åíèÿ ñíÿòû. Íî åñòü åùå îãðàíè÷åíèÿ íà ðåãèñòðû. |
Íàïðèìåð, åñëè â âûðàæåíèè èñïîëüçóåòñÿ ñäâèã íà çíà÷åíèå ïåðåìåííîé, à |
ïðèåìíèêîì ÿâëÿþòñÿ ðåãèñòðû <b>CX/ECX,</b> òî òàêîå âûðàæåíèå êîìïèëÿòîð íå áóäåò |
êîìïèëèðîâàòü: |
|
CX = var * SI * 3 * var >> 3; //âûçîâåò ñîîáùåíèå îá îøèáêå |
|
Ïðèìå÷àíèå: äëÿ 8 áèòíûõ <b>íå-AL</b> âûðàæåíèé óìíîæàòü ìîæíî òîëüêî íà |
÷èñëà: 0, 1, 2, 4, 8, 16, 32, 64 è 128. Âñå ýòè îãðàíè÷åíèÿ ñâÿçàíû ñî |
ñòðåìëåíèåì íå ðàçðóøàòü äðóãèå ðåãèñòðû ïðè èñïîëüçîâàíèè <b>íå-EAX/AX/AL</b> |
âûðàæåíèé. |
<A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.5> |
4.5 Óñëîâíûå âûðàæåíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Óñëîâíûå âûðàæåíèÿ - âûðàæåíèÿ, ðåçóëüòàòîì âû÷èñëåíèÿ êîòîðûõ ÿâëÿåòñÿ |
ëîãè÷åñêîå çíà÷åíèå äà èëè íåò, èñïîëüçóåìîå â îïåðàòîðå <b>if</b> è öèêëàõ <b>do {}</b> |
<b>while, while, for</b>. |
|
Èìåþòñÿ äâà òèïà óñëîâíûõ âûðàæåíèé, ïðîñòûå è ñëîæíûå. |
|
Âîçìîæíî ëîãè÷åñêîå îáúåäèíåíèå óñëîâèé. |
<A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.5.1> |
4.5.1 Ïðîñòûå óñëîâíûå âûðàæåíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïðîñòûå óñëîâíûå âûðàæåíèÿ - îäèíî÷íàÿ ëåêñåìà èëè âûðàæåíèå, êîòîðîå |
ïðèìåò çíà÷åíèå äà, åñëè ðàñ÷åòíîå çíà÷åíèå îòëè÷íî îò íóëÿ, èëè çíà÷åíèå |
íåò, åñëè ðàñ÷åòíîå çíà÷åíèå ðàâíî íóëþ. |
<A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.5.2> |
4.5.2 Ñëîæíûå óñëîâíûå âûðàæåíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñëîæíûå óñëîâíûå âûðàæåíèÿ èìåþò ñëåäóþùóþ ôîðìó: |
|
(ëåâàÿ_÷àñòü îïåðàòîð_îòíîøåíèÿ ïðàâàÿ_÷àñòü) |
|
Ãäå: |
ëåâàÿ_÷àñòü - ëþáîå âûðàæåíèå òèïà <b>AL/AX/EAX</b> èëè ïîñòîÿííîå âûðàæåíèå. |
Òèï âûðàæåíèÿ îïðåäåëÿåòñÿ ïî òèïó ïåðâîé ëåêñåìû |
(ðåãèñòðà èëè ïåðåìåííîé); çíà÷åíèå òèïà ïî óìîë÷àíèþ - |
word äëÿ 16-áèòíûõ ïðîãðàìì è dword äëÿ 32-áèòíûõ. Åñëè |
æåëàòåëåí äðóãîé òèï, ïåðåä âûðàæåíèåì ñòàâèòñÿ |
ñîîòâåòñòâóþùåå êëþ÷åâîå ñëîâî, îïðåäåëÿþùåå åãî òèï: |
<b>byte, char, int, long, dword</b> èëè <b>float</b> |
|
îïåðàòîð_îòíîøåíèÿ - ëþáîé èç îïåðàòîðîâ îòíîøåíèÿ: |
<b>==, !=, <>, <, >, <=, èëè >=</b>. |
|
ïðàâàÿ_÷àñòü - ëþáîé îäèíî÷íûé ðåãèñòð, îäèíî÷íàÿ ïåðåìåííàÿ èëè |
ïîñòîÿííîå âûðàæåíèå. |
|
Ïðèìåðû ïðàâèëüíûõ ñëîæíûõ óñëîâíûõ âûðàæåíèé: |
|
(X + y > z) |
(int CX*DX < = 12*3) |
(byte first*second+hold == cnumber) |
|
Ïðèìåðû íåäîïóñòèìûõ ñëîæíûõ óñëîâíûõ âûðàæåíèé: |
|
(x+y >= x-y) // ïðàâàÿ ÷àñòü íå ÿâëÿåòñÿ îäèíî÷íîé ëåêñåìîé èëè |
ïîñòîÿííûì âûðàæåíèåì. |
(Z = y) // âìåñòî == îøèáî÷íî ïîñòàâëåí = |
<A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.6> |
4.6 Èçìåíåíèå òèïà âûðàæåíèÿ ïðè ïðèñâàèâàíèè. |
</A></B></FONT><FONT FACE="Courier"> |
|
Åñëè ïîñëå çíàêà ðàâåíñòâà íàïèñàòü òèï îòëè÷íûé îò òèïà âû÷èñëÿåìîé |
ïåðåìåííîé, òî âñå ïåðåìåííûå ó÷àñòâóþùèå â ïðîöåññå âû÷èñëåíèÿ, áóäóò |
ïðåîáðàçîâûâàòüñÿ ê ýòîìó íîâîìó òèïó, è ëèøü êîíå÷íûé ðåçóëüòàò áóäåò |
ïðåîáðàçîâàí ê òèïó âû÷èñëÿåìîé ïåðåìåííîé. Ïðèìåð: |
|
int i, a; |
long b; |
char c; |
|
i = a * b + c ; |
|
Çíà÷åíèÿ ïåðåìåííûõ a, b, è c â ýòîì ïðèìåðå ïåðåä âû÷èñëåíèåì áóäóò |
ïðåîáðàçîâàíû ê òèïó <b>int</b> (òèïó ïåðåìåííîé i). Íî åñëè çàïèñàòü ýòî |
âûðàæåíèå âîò òàê: |
|
i = long a * b + c ; |
|
òî ïåðåìåííûå a, b, è c â ýòîì ïðèìåðå ïåðåä âû÷èñëåíèåì áóäóò |
ïðåîáðàçîâàíû ê òèïó <b>long</b>, à êîíå÷íûé ðåçóëüòàò áóäåò ïðåîáðàçîâàí ê òèïó |
ïåðåìåííîé i - <b>int</b>. |
<A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=4.7> |
4.7 Âû÷èñëåíèå â ðåãèñòðû EAX/AX/AL ñî çíàêîì. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïî óìîë÷àíèþ âñå âû÷èñëåíèÿ â ðåãèñòðû ïðîèçâîäÿòñÿ êàê ñ áåç çíàêîâûìè |
âåëè÷èíàìè. |
|
Íàïðèìåð: |
|
int a,b,c; |
AX = a * b / c ; |
|
Ïðè ýòîì êîìïèëÿòîð ãåíåðèðîâàë áåç çíàêîâûå èíñòðóêöèè <b>div</b> è <b>mul</b>, òàê êàê |
ðåãèñòðû ñ÷èòàþòñÿ áåç çíàêîâûìè ïåðåìåííûìè. Åñëè íàïèñàòü âîò òàê: |
|
AX = int a * b / c ; |
|
òî êîìïèëÿòîð ñãåíåðèðóåò èíñòðóêöèè <b>idiv</b> è <b>imul</b>. |
|
Îáðàùàþ âàøå âíèìàíèå, ÷òî äëÿ ðåãèñòðà <b>AL</b> ìîæíî èñïîëüçîâàòü òîëüêî |
ìîäèôèêàòîð <b>char</b>, äëÿ <b>AX</b> ñîîòâåòñòâåííî òîëüêî <b>int</b>, à äëÿ <b>EAX - long</b>. Äëÿ |
îñòàëüíûõ ðåãèñòðîâ ïîäîáíîå äåëàòü íåëüçÿ. |
<A href="#contents4" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=5.1> |
5. Èäåíòèôèêàòîðû. |
|
5.1 Ôîðìàò èäåíòèôèêàòîðà. |
</A></B></FONT><FONT FACE="Courier"> |
|
Èäåíòèôèêàòîðû â C-- äîëæíû íà÷èíàòüñÿ èëè ñ ñèìâîëà ïîä÷åðêèâàíèÿ <b>_</b> |
èëè çàãëàâíûõ èëè ñòðî÷íûõ áóêâ. Ñëåäóþùèå ñèìâîëû ìîãóò áûòü ëþáîé |
êîìáèíàöèåé ñèìâîëîâ ïîä÷åðêèâàíèÿ, çàãëàâíûõ èëè ñòðî÷íûõ áóêâ èëè ÷èñåë |
(îò 0 äî 9). Îáùàÿ äëèíà èäåíòèôèêàòîðà íå ìîæåò ïðåâûøàòü 64 ñèìâîëà. |
Ñèìâîëû ñ êîäîì áîëüøå 0x7A (êîä ñèìâîëà <b>z</b>) íåäîïóñòèìû. |
|
Ïðèìåðû äîïóñòèìûõ èäåíòèôèêàòîðîâ: |
|
_DOG |
Loony12 |
HowdYBoys_AND_Girls |
WOW___ |
X |
|
Ïðèìåðû íåäîïóñòèìûõ èäåíòèôèêàòîðîâ: |
|
12bogus /* íå ìîæåò íà÷èíàòüñÿ ñ ÷èñëà */ |
WowisthisalongidentifieryupitsureisnotOyoulengthismorethat64chars |
/*äëèíà èäåíòèôèêàòîðà ïðåâûøàåò 64 */ |
Y_es sir /* ïðîáåëû íåäîïóñòèìû */ |
The-end /* äåôèñû íåäîïóñòèìû */ |
<A href="#contents5" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=5.2> |
5.2 Çàðåçåðâèðîâàííûå èäåíòèôèêàòîðû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñïèñîê çàðåçåðâèðîâàííûõ â C-- èäåíòèôèêàòîðîâ, êîòîðûå íå ìîãóò |
èñïîëüçîâàòüñÿ êàê îáùèå èäåíòèôèêàòîðû, ïîñêîëüêó îíè óæå áûëè îïðåäåëåíû |
èëè çàðåçåðâèðîâàíû äëÿ äðóãèõ öåëåé: |
|
<b>BREAK CASE CONTINUE ELSE EXTRACT FALSE FOR |
FROM GOTO IF LOOPNZ RETURN SWITCH TRUE |
WHILE |
|
CARRYFLAG MINUSFLAG NOTCARRYFLAG NOTOVERFLOW |
NOTZEROFLAG OVERFLOW PLUSFLAG ZEROFLAG |
|
__CODEPTR__ __COMPILER__ __DATAPTR__ __DATESTR__ __DATE__ __DAY__ |
__HOUR__ __LINE__ __MINUTE__ __MONTH__ __POSTPTR__ __SECOND__ |
__TIME__ __VER1__ __VER2__ __WEEKDAY__ __YEAR__ |
|
_export asm break byte case cdecl char continue |
default do dword else enum extern far fastcall |
float for goto if inline int interrupt long |
loop loopnz pascal return short signed sizeof static |
stdcall struct switch union unsigned void while word |
|
ESCHAR ESBYTE ESINT ESWORD ESLONG ESDWORD ESFLOAT |
CSCHAR CSBYTE CSINT CSWORD CSLONG CSDWORD CSFLOAT |
SSCHAR SSBYTE SSINT SSWORD SSLONG SSDWORD SSFLOAT |
DSCHAR DSBYTE DSINT DSWORD DSLONG DSDWORD DSFLOAT |
FSCHAR FSBYTE FSINT FSWORD FSLONG FSDWORD FSFLOAT |
GSCHAR GSBYTE GSINT GSWORD GSLONG GSDWORD GSFLOAT |
|
AX CX DX BX SP BP SI DI |
EAX ECX EDX EBX ESP EBP ESI EDI |
AL CL DL BL AH CH DH BH |
ES CS SS DS FS GS |
|
ST(0) ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7) ST |
st(0) st(1) st(2) st(3) st(4) st(5) st(6) st(7) st |
</b> |
Ýòîò ñïèñîê ìîæåò áûòü ïîëó÷åí èç C-- òðàíñëÿòîðà â ëþáîå âðåìÿ, |
çàïóñêîì åãî ñ îïöèåé <b>/WORDS</b> èç êîìàíäíîé ñòðîêè. |
|
Åñëè Âû ïîëüçóåòåñü ïðè êîìïèëÿöèè îïöèåé êîìàíäíîé ñòðîêè <b>/ia</b>, êîòîðàÿ |
ïîçâîëÿåò èñïîëüçîâàòü àññåìáëåðíûå èíñòðóêöèè íå çàêëþ÷àÿ èõ â áëîêè <b>asm</b> è |
áåç ïðåôèêñà <b>$</b>, òî âñå èìåíà àññåìáëåðíûõ èíñòðóêöèé ñòàíîâÿòñÿ |
çàðåçåðâèðîâàííûìè ñëîâàìè. Ïðè÷åì èìåíà àññåìáëåðíûõ èíñòðóêöèé êîìïèëÿòîð |
ðàçëè÷àåò íåçàâèñèìî îò òîãî, íàïèñàíû îíè ìàëåíüêèìè èëè áîëüøèìè áóêâàìè. |
|
Ñïèñîê èìåí ïîääåðæèâàåìûõ êîìïèëÿòîðîì àññåìáëåðíûõ èíñòðóêöèè ìîæíî |
ïîëó÷èòü çàïóñòèâ êîìïèëÿòîð ñ îïöèåé <b>/LAI</b>. |
|
Êðîìå ýòîãî â àññåìáëåðíûõ èíñòðóêöèÿõ ñòàíîâÿòñÿ çàðåçåðâèðîâàííûìè |
ñëåäóþùèå èäåíòèôèêàòîðû: |
|
<b>ax cx dx bx sp bp si di |
eax ecx edx ebx esp ebp esi edi |
al cl dl bl ah ch dh bh |
es cs ss ds fs gs |
|
DR0 DR1 DR2 DR3 DR4 DR5 DR6 DR7 |
CR0 CR1 CR2 CR3 CR4 CR5 CR6 CR7 |
TR0 TR1 TR2 TR3 TR4 TR5 TR6 TR7 |
MM0 MM1 MM2 MM3 MM4 MM5 MM6 MM7 |
XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 |
|
dr0 dr1 dr2 dr3 dr4 dr5 dr6 dr7 |
cr0 cr1 cr2 cr3 cr4 cr5 cr6 cr7 |
tr0 tr1 tr2 tr3 tr4 tr5 tr6 tr7 |
mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 |
xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 |
</b><A href="#contents5" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=5.3> |
5.3 Óíèâåðñàëüíûå ðåãèñòðû äëÿ 16 è 32-áèòíîãî ðåæèìà. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïðè ñîçäàíèè áèáëèîòå÷íûõ ïðîöåäóð î÷åíü ÷àñòî ïðèõîäèòñÿ ïèñàòü |
âàðèàíòû ïðîöåäóðû äëÿ ðàáîòû â 16-áèòíîì è 32-áèòíîì ðåæèìàõ, êîòîðûå |
îòëè÷àþòñÿ äðóã îò äðóãà ëèøü èñïîëüçîâàíèåì â íèõ ëèáî 16-áèòíûõ ëèáî |
32-áèòíûõ ðåãèñòðîâ ñîîòâåòñòâåííî. Íî ìîæíî ïèñàòü ëèøü îäíó ïðîöåäóðó, |
èñïîëüçóÿ â íåé íîâûé ñèíòàêñèñ ðåãèñòðîâ. Åñëè êîìïèëÿòîð âñòðåòèò âîò |
òàêîé ñèíòàêñèñ: |
|
(E)AX=0; |
|
òî êîìïèëÿòîð áóäåò èñïîëüçîâàòü ïðè êîìïèëÿöèè 16-áèòíîãî êîäà ðåãèñòð |
<b>AX</b>, à ïðè êîìïèëÿöèè 32-áèòíîãî êîäà ðåãèñòð <b>EAX</b>. |
|
Èñïîëüçîâàíèå àâòîìàòè÷åñêèõ ðåãèñòðîâ ïîçâîëèò óïðîñòèòü áèáëèîòå÷íûå |
ôàéëû è ñäåëàòü èõ áîëåå ïîíÿòíûìè. |
<A href="#contents5" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=5.4> |
5.4 Ïðåäîïðåäåëåííûå èäåíòèôèêàòîðû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Èäåíòèôèêàòîðû, îïðåäåëÿåìûå êîìïèëÿòîðîì â çàâèñèìîñòè îò ðåæèìà |
êîìïèëÿöèè: |
|
<b>__TLS__</b> èäåò êîìïèëÿöèÿ ïîä windows (w32, w32c, dll). |
<b>__DLL__</b> èäåò êîìïèëÿöèÿ dll. |
<b>__CONSOLE__</b> èäåò êîìïèëÿöèÿ êîíñîëüíîãî ïðèëîæåíèÿ windows |
<b>__WIN32__</b> èäåò êîìïèëÿöèÿ GUI-øíîãî ïðèëîæåíèÿ |
<b>__FLAT__</b> êîìïèëèðóåòñÿ 32-áèòíûé êîä. |
<b>__MSDOS__</b> êîìïèëèðóåòñÿ 16-áèòíûé êîä. |
<b>__TINY__</b> èñïîëüçóåòñÿ ìîäåëü ïàìÿòè tiny â 16-áèòíîì ðåæèìå |
<b>__SMALL__</b> èñïîëüçóåòñÿ ìîäåëü ïàìÿòè small â 16-áèòíîì ðåæèìå |
<b>__DOS32__</b> êîìïèëèðóåòñÿ 32-áèòíûé êîä ïîä DOS (d32) |
<b>__COM__</b> êîìïèëèðóåòñÿ com-ôàéë |
<b>__SYS__</b> êîìïèëèðóåòñÿ sys-ôàéë |
<b>__ROM__</b> êîìïèëèðóåòñÿ rom-ôàéë |
<b>__OBJ__</b> êîìïèëèðóåòñÿ obj-ôàéë |
<b>__TEXE__</b> êîìïèëèðóåòñÿ exe-ôàéë ìîäåëè tiny |
<b>__EXE__</b> êîìïèëèðóåòñÿ exe-ôàéë ìîäåëè small |
<b>__MEOS__</b> êîìïèëèðóåòñÿ èñïîëíÿåìûé ôàéë äëÿ MenuetOS |
<b>codesize</b> êîìïèëÿöèÿ âåäåòñÿ ñ îïòèìèçàöèåé íà ðàçìåð êîäà |
<b>speed</b> êîìïèëÿöèÿ âåäåòñÿ ñ îïòèìèçàöèåé íà áûñòðîäåéñòâèå êîäà |
<b>cpu</b> îïðåäåëÿåò òèï ïðîöåññîðà äëÿ êîòîðîãî âåäåòñÿ êîìïèëÿöèÿ: |
0 - 8086 |
1 - 80186 |
2 - 80286 |
3 - 80386 |
4 - 80486 |
5 - Pentium |
6 - Pentium MMX |
7 - Pentium II |
|
Ýòè èäåíòèôèêàòîðû ìîãóò áûòü ïðîâåðåíû äèðåêòèâàìè <b>#ifdef</b> èëè <b>#ifndef</b>. |
Èäåíòèôèêàòîð <b>cpu</b> ìîæåò áûòü èñïîëüçîâàí ëèøü ñ îïåðàòîðàìè ïðîâåðêè |
óñëîâèé: |
|
#ifdef cpu > 3 //åñëè òèï ïðîöåññîðà áîëüøå 80386 |
<A href="#contents5" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.1> |
6. Ïåðåìåííûå. |
|
6.1 Òèïû ïåðåìåííûõ. |
</A></B></FONT><FONT FACE="Courier"> |
|
 C-- èìååòñÿ ñåìü òèïîâ ïåðåìåííûõ (èìåíîâàííûõ îáëàñòåé ïàìÿòè), ýòî: |
<b>byte, word, dword, char, int, long, float.</b> |
|
Ñëåäóþùàÿ òàáëèöà ïîêàçûâàåò ðàçìåð è äèàïàçîí ïðåäñòàâëÿåìûõ âåëè÷èí |
êàæäîãî èç òèïîâ ïåðåìåííîé: |
|
NAME | SIZE | VALUE RANGE | VALUE RANGE |
òèï |ðàçìåð | äèàïàçîí ïðåäñòàâëåíèÿ | äèàïàçîí ïðåäñòàâëåíèÿ |
|â áàéò.| â äåñÿòè÷íîé ñèñòåìå | â øåñòíàäöàòåðè÷íîé ñèñòåìå |
--------------------------------------------------------------------------- |
byte | 1 | 0 to 255 | 0x00 to 0xFF |
word | 2 | 0 to 65535 | 0x0000 to 0xFFFF |
dword | 4 | 0 to 4294967295 | 0x00000000 to 0xFFFFFFFF |
char | 1 | -128 to 127 | 0x80 to 0x7F |
int | 2 | -32768 to 32767 | 0x8000 to 0x7FFF |
long | 4 | -2147483648 to 2147483647 | 0x80000000 to 0x7FFFFFFF |
float | 4 | -3,37E38 to +3,37E38 | 0xFF7FFFFF to 0x7FFFFFFF |
|
Ïðèìå÷àíèå: äëÿ ðàáîòû ñ òèïàìè <b>float, dword è long</b> èñïîëüçóþòñÿ |
32-ðàçðÿäíûå öåëî÷èñëåííûå êîìàíäû, ñëåäîâàòåëüíî, äëÿ èõ âûïîëíåíèÿ íóæíî |
èìåòü ïðîöåññîð íå õóæå 80386, ÷òî ñåé÷àñ íå ÿâëÿåòñÿ áîëüøîé ïðîáëåìîé. |
|
Äëÿ ñîâìåñòèìîñòè ñî ñòàíäàðòîì, ïðèíÿòîì â ÿçûêå <b>C</b>, ââåäåíû |
íîâûå çàðåçåðâèðîâàííûå ñëîâà: <b>short</b>, <b>signed</b>, <b>unsigned</b>. Äëÿ òèïà <b>int</b> |
â 32-áèòíîì ðåæèìå èçìåíåíà ðàçðÿäíîñòü. Âîò òàáëèöà âñåõ âàðèàíòîâ íîâûõ |
òèïîâ äàííûõ: |
|
--------------------------------------------------------- |
| ïîëíûé òèï |äîïóñòèìûå ñîêðàùåíèÿ|ñòàðûå àíàëîãè| |
--------------------------------------------------------- |
|signed char |char | char | |
|signed int |signed, int | int/long | |
|signed short int |short, signed short | int | |
|signed long int |long, signed long | long | |
|unsigned char |--- | byte | |
|unsigned int |unsigned | word/dword | |
|unsigned short int|unsigned short | word | |
|unsigned long int |unsigned long | dword | |
--------------------------------------------------------- |
|
Ñòàðûå òèïû <b>byte, word è dword</b> ïîääåðæèâàþòñÿ ïî ïðåæíåìó è èìåþò |
ôóíêöèîíàëüíî ïðåæíåå çíà÷åíèå. Èçìåíåíèÿ êîñíóëèñü ëèøü òèïà <b>int</b>. Îí â |
16-áèòíîì ðåæèìå, òàêæå êàê è òèï <b>unsigned int</b>, èìååò 16-áèòíûé ðàçìåð, à |
â 32-áèòíîì ðåæèìå ýòè îáà òèïà èìåþò ðàçìåð â 32-áèòà. Íà ïåðâûé âçãëÿä |
òàêèå ñâîéñòâà òèïà <b>int</b> âíîñÿò íåêîòîðóþ ïóòàíèöó, íî ýòî äàåò áîëüøîé |
âûèãðûø ïðè èñïîëüçîâàíèè ýòîãî òèïà â áèáëèîòå÷íûõ ôàéëàõ, êîòîðûå ìîãóò |
áûòü èñïîëüçîâàíû ïðè êîìïèëÿöèè 16-áèòíûõ è 32-áèòíûõ ïðîãðàìì. |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.2> |
6.2 Îáúÿâëåíèå ïåðåìåííûõ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñèíòàêñèñ äëÿ îáúÿâëåíèÿ ïåðåìåííûõ ñëåäóþùèé: |
|
variable-type identifier; |
|
ãäå <b>variable-type - char, byte, int, word, long, dword</b> èëè <b>float</b>. |
|
Îäíîâðåìåííî ìîãóò áûòü îáúÿâëåíû íåñêîëüêî èäåíòèôèêàòîðîâ îäíîãî òèïà: |
|
variable-type identifier1, identifier2, ... , identifierN; |
|
Îäíîìåðíûå ìàññèâû ìîãóò áûòü îáúÿâëåíû ñëåäóþùèì îáðàçîì: |
|
variable-type identifier[elements]; |
|
ãäå <b>elements</b> - ïîñòîÿííîå âûðàæåíèå äëÿ êîëè÷åñòâà ïåðåìåííûõ ýòîãî òèïà, |
îáúåäèíåííûõ â ìàññèâ. |
|
Èíèöèàëèçèðîâàííûå ìàññèâû ìîæíî îáúÿâëÿòü áåç óêàçàíèÿ ÷èñëà |
ýëåìåíòîâ. Ïðè ýòîì áóäåò ñîçäàí ìàññèâ ïî ôàêòè÷åñêîìó ÷èñëó ýëåìåíòîâ. |
|
variable-type identifier[] = { const1, const2 }; |
|
Ïåðåìåííûå ïðè îáúÿâëåíèè ìîãóò áûòü ïðîèíèöèàëèçèðîâàíû ñëåäóþùèì |
îáðàçîì: |
|
variable-type identifier = value; |
|
Íåêîòîðûå ïðèìåðû ãëîáàëüíûõ îáúÿâëåíèé: |
byte i,j; /* îáúÿâëÿåò äâå ïåðåìåííûå òèïà byte ñ èìåíàìè i è j */ |
word see[10] /* îáúÿâëÿåò ìàññèâ ñ èìåíåì see, ñîñòîÿùèé èç 10 |
ýëåìåíòîâ òèïà word */ |
int h,x[27] /* îáúÿâëÿåò, ïåðåìåííóþ òèïà int ñ èìåíåì h, |
è ìàññèâ ñ èìåíåì x, ñîñòîÿùèé èç 27 ýëåìåíòîâ òèïà int */ |
long size=0; /* îáúÿâëåíà ïåðåìåííàÿ òèïà long ñ èìåíåì size è åé ïðèñâîåíî |
çíà÷åíèå 0. */ |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.3> |
6.3 Ãëîáàëüíûå ïåðåìåííûå. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ãëîáàëüíûå ïåðåìåííûå - ýòî ïåðåìåííûå, îáëàñòü äåéñòâèÿ êîòîðûõ |
ðàñïðîñòðàíÿåòñÿ íà âñþ ïðîãðàììó. Â C-- èñïîëüçîâàòü ãëîáàëüíûå ïåðåìåííûå |
ìîæíî â ïðîöåäóðàõ, ðàñïîëîæåííûõ íèæå ìåñòà åå îáúÿâëåíèÿ. Ò.å. åñëè Âû |
ïèøèòå ïðîöåäóðó, â êîòîðîé èñïîëüçóåòå ïåðåìåííóþ var, à ñàìó ïåðåìåííóþ |
îáúÿâëÿåòå íèæå òåêñòà ïðîöåäóðû, òî êîìïèëÿòîð âûäàñò îøèáêó. Ýòî ñâÿçàíî |
ñ òåì, ÷òî êîìïèëÿòîð ìîæåò çíàòü òèï ïåðåìåííîé òîëüêî ïîñëå èõ |
îáúÿâëåíèÿ. Íî äëÿ òàêèõ ïåðåìåííûõ ìîæíî èñïîëüçîâàòü âçÿòèå èõ àäðåñà, |
òàê êàê àäðåñ ïåðåìåííîé íå çàâèñèò îò åãî òèïà. Ïðèìåð: |
|
void Proc(){ |
gvar = 0; /* êîìïèëÿòîð âûäàñò ñîîáùåíèå îá îøèáêå, ò.ê. îí åùå íå çíàåò |
òèïà ïåðåìåííîé gvar */ |
AX = #gvar; /* íåñìîòðÿ íà òî, ÷òî êîìïèëÿòîð íå çíàåò è àäðåñà ýòîé |
ïåðåìåííîé òàêîå âûðàæåíèå áóäåò îòêîìïèëèðîâàíî */ |
} |
int gvar; |
|
Íî âñå æå ñèòóàöèÿ íå áåçíàäåæíà è íàì óäàñòñÿ äîáèòüñÿ òîãî, ÷åãî ìû |
çàäóìàëè. Â ýòîì íàì ïîìîæåò àëüòåðíàòèâíûé ñèíòàêñèñ îáðàùåíèÿ ê |
ïåðåìåííûì: |
|
void Proc(){ |
DSINT[#gvar] = 0; /* êîìïèëÿòîð óñïåøíî îòêîìïèëèðóåò ýòî âûðàæåíèå ò.ê. |
åìó òåïåðü èçâåñòåí òèï ïåðåìåííîé gvar */ |
} |
int gvar; |
|
Ïàìÿòü ïîä ãëîáàëüíûå ïåðåìåííûå âûäåëÿåòñÿ â ñåãìåíòå äàííûõ. Åñëè |
ïåðåìåííàÿ ïðè îáúÿâëåíèè èíèöèàëèçèðóåòñÿ (ò.å. åé ïðèñâîåíî êàêîå-òî |
çíà÷åíèå), òî ïåðåìåííàÿ áóäåò âêëþ÷åíà â êîä êîìïèëèðóåìîãî ôàéëà. Åñëè |
ïåðåìåííàÿ íå èíèöèàëèçèðóåòñÿ, òî ìåñòî äëÿ ïåðåìåííîé áóäåò |
çàðåçåðâèðîâàíî ñðàçó æå çà ïîñëåäíèì áàéòîì ñêîìïèëèðîâàííîé ïðîãðàììû. |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.4> |
6.4 Ëîêàëüíûå ïåðåìåííûå. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ëîêàëüíûå ïåðåìåííûå - ýòî ïåðåìåííûå îáëàñòü äåéñòâèÿ êîòîðûõ |
ðàñïðîñòðàíÿåòñÿ ëèøü â ïðåäåëàõ îäíîé ïðîöåäóðû. Îáúÿâëÿòü ëîêàëüíûå |
ïåðåìåííûå, â îòëè÷èè îò ñîâðåìåííûõ âåðñèé <b>C</b>, ìîæíî ìåæäó èìåíåì ïðîöåäóðû |
è ïåðâîé îòêðûâàþùåéñÿ ôèãóðíîé ñêîáêîé. Ïðèìåð: |
|
void PROC () |
int i; //îáúÿâëåíà ëîêàëüíàÿ ïåðåìåííàÿ òèïà int ñ èìåíåì i |
{ |
for ( i=0; i<10; i++ ) WRITE(1); |
} |
|
Ïàìÿòü ïîä ëîêàëüíûå ïåðåìåííûå îòâîäèòñÿ â ñåãìåíòå ñòåêà. |
|
Ê ëîêàëüíûì ïåðåìåííûì ìîæíî îòíåñòè è ïàðàìåòðû ñòåêîâûõ ïðîöåäóð. Ïîä |
íèõ òàêæå îòâîäèòñÿ ïàìÿòü â ñòåêå. |
|
Ìîæíî èíèöèàëèçèðîâàòü ëîêàëüíûå ïåðåìåííûå ïðè èõ îáúÿâëåíèè. Íî åñòü |
íåêîòîðûå îãðàíè÷åíèÿ. Íåëüçÿ èíèöèàëèçèðîâàòü ìàññèâû è ìíîãîìåðíûå |
ñòðóêòóðû. Èíèöèàëèçèðîâàòü ìîæíî îäíèì çíà÷åíèåì, ò.å íåëüçÿ ïðè |
èíèöèàëèçàöèè ëîêàëüíûõ ïåðåìåííûõ ïîëüçîâàòüñÿ ïåðå÷èñëåíèåì çàêëþ÷åííûì â |
ôèãóðíûå ñêîáêè è îïåðàòîðàìè <b>FROM</b> è <b>EXTRACT</b>. |
|
Èìåíà ëîêàëüíûõ ïåðåìåííûõ ìîãóò ñîâïàäàòü ñ èìåíàìè ãëîáàëüíûõ |
ïåðåìåííûõ èëè ïðîöåäóð, íî òîãäà Âû íå ñìîæåòå îáðàòèòüñÿ ê ãëîáàëüíîé |
ïåðåìåííîé èëè âûçâàòü îäíîèìåííóþ ïðîöåäóðó. |
|
Ëîêàëüíûå ïåðåìåííûå ìîæíî îáúÿâëÿòü è â íà÷àëå áëîêà ïðîöåäóðû. Íî |
òîëüêî äî íà÷àëà òåëà ïðîöåäóðû. Ïðèìåð: |
|
void proc(){ |
int locproc; // îáúÿâëåíèå ëîêàëüíîé ïðîöåäóðû |
locproc=0; // à òåïåðü ïîøëî òåëî ïðîöåäóðû |
int locproc; // à íà ýòî îáúÿâëåíèå ïåðåìåííîé êîìïèëÿòîð âûäàñò ñîîáùåíèå |
// îá îøèáêå, ò.ê. óæå íà÷àëîñü òåëî ïðîöåäóðû |
} |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.5> |
6.5 Äèíàìè÷åñêèå ïåðåìåííûå è ñòðóêòóðû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Íàðÿäó ñ óæå èçâåñòíûìè Âàì äèíàìè÷åñêèìè ïðîöåäóðàìè â C-- åñòü |
âîçìîæíîñòü èñïîëüçîâàòü äèíàìè÷åñêè è ïåðåìåííûå è ñòðóêòóðû. Äèíàìè÷åñêèå |
ïåðåìåííûå è ñòðóêòóðû îáîçíà÷àþòñÿ òàêæå êàê è äèíàìè÷åñêèå ïðîöåäóðû - |
ñèìâîëîì äâîåòî÷èÿ ïåðåä íà÷àëîì èõ îáúÿâëåíèÿ. È òàêæå êàê è äèíàìè÷åñêàÿ |
ïðîöåäóðà, äèíàìè÷åñêàÿ ïåðåìåííàÿ èëè ñòðóêòóðà áóäåò âñòàâëåíà â êîä, |
ëèøü â òîì ñëó÷àå, åñëè îíà áóäåò èñïîëüçîâàíà â ïðîãðàììå. |
|
Äèíàìè÷åñêèå ïåðåìåííûå è ñòðóêòóðû íàéäóò ïðèìåíåíèå â áèáëèîòåêàõ. |
Èñïîëüçîâàòü èõ íåïîñðåäñòâåííî â ïðîãðàììàõ íåò ñìûñëà. |
|
Ó äèíàìè÷åñêèõ ïåðåìåííûõ, ñòðóêòóð òàêæå êàê è ó ïðîöåäóð, åñòü îäèí |
íåäîñòàòîê - Âû íå ñìîæåòå çíàòü, â êàêîì ìåñòå îòêîìïèëèðîâàííîãî êîäà îíè |
áóäóò ðàñïîëîæåíû, è â êàêîì ïîðÿäêå. Íî íåîáõîäèìîñòü ýòî çíàòü áûâàåò |
î÷åíü ðåäêî. |
|
Äèíàìè÷åñêèå èíèöèàëèçèðîâàííûå ïåðåìåííûå è ñòðóêòóðû â ôàéëå áóäóò |
ðàñïîëîæåíû â åãî ñàìîì êîíöå, ïîñëå äèíàìè÷åñêèõ ïðîöåäóð. Ýòó èõ |
îñîáåííîñòü ìîæíî èñïîëüçîâàòü, åñëè Âàì áóäåò íåîáõîäèìî, ÷òîáû äàííûå íå |
áûëè ðàçáðîñàíû ñðåäè êîäà, à áûëè ñãðóïïèðîâàíû â îäíîì ìåñòå. |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.6> |
6.6 Ïðèñâàèâàíèå îäíîãî çíà÷åíèÿ íåñêîëüêèì ïåðåìåííûì. |
</A></B></FONT><FONT FACE="Courier"> |
|
Åñëè Âàì íåîáõîäèìî ïðèñâîèòü íåñêîëüêèì ïåðåìåííûì îäèíàêîâûå çíà÷åíèÿ: |
|
var1=0; |
var2=0; |
var3=0; |
|
òî òåïåðü ýòî ìîæíî çàïèñàòü áîëåå êîðîòêî: |
|
var1=var2=var3=0; |
|
Ïðè èñïîëüçîâàíèè òàêîé çàïèñè ãåíåðèðóåòñÿ áîëåå êîìïàêòíûé è áîëåå |
áûñòðûé êîä. |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.1> |
6.7 Ïåðåìåííûå òèïà float. |
|
6.7.1 Ôîðìàò ïåðåìåííûõ òèïà float. |
</A></B></FONT><FONT FACE="Courier"> |
|
Äëÿ ïðåäñòàâëåíèÿ çíà÷åíèé ñ ïëàâàþùåé òî÷êîé â ÿçûê C-- ââåäåí òèï |
float. Ýòîìó òèïó ñîîòâåòñòâóåò äåéñòâèòåëüíîå ÷èñëî îäèíàðíîé òî÷íîñòè |
FPU. |
|
Ôîðìàò ïðåäñòàâëåíèÿ äàííûõ ñ ïëàâàþùåé òî÷êîé âêëþ÷àåò òðè ïîëÿ: |
çíàêà, ìàíòèññû è ïîðÿäêà. Çíàê îïðåäåëÿåòñÿ ñòàðøèì çíà÷àùèì ðàçðÿäîì. |
Ïîëå ìàíòèññû ñîäåðæèò çíà÷àùèå áèòû ÷èñëà, à ïîëå ïîðÿäêà ñîäåðæèò |
ñòåïåíü 2 è îïðåäåëÿåò ìàñøòàáèðóþùèé ìíîæèòåëü äëÿ ìàíòèññû. |
|
31 30.....23 22........0 |
| | | | | |
| | | -------------- - ïîëå ìàíòèññû |
| ------------------------ - ïîëå ïîðÿäêà |
--------------------------- - áèò çíàêà |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.2> |
6.7.2 Êîíñòàíòû ñ ïëàâàþùåé òî÷êîé. |
</A></B></FONT><FONT FACE="Courier"> |
|
Êîìïèëÿòîð îòëè÷àåò âåùåñòâåííîå ÷èñëî îò öåëîãî ïî íàëè÷èþ â íåì |
òî÷êè. Íà÷èíàòüñÿ âåùåñòâåííîå ÷èñëî äîëæíî ëèáî öèôðîé îò <b>0</b> äî <b>9</b>, ëèáî |
çíàêîì ìèíóñ. Íåîáÿçàòåëüíîé ÷àñòüþ âåùåñòâåííîãî ÷èñëà ÿâëÿåòñÿ |
ïîêàçàòåëü ñòåïåíè. Ïîêàçàòåëü ñòåïåíè îòäåëÿåòñÿ îò ÷èñëà ñèìâîëîì <b>e</b> èëè |
<b>E</b>. Ïðîáåëû íåäîïóñòèìû. Âîò ïðèìåðû äîïóñòèìîãî ñèíòàêñèñà: |
|
0.98 |
-15.75 |
3.14e2 |
1.234567E-20 |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.3> |
6.7.3 Äèàïàçîí äîïóñòèìûõ çíà÷åíèé. |
</A></B></FONT><FONT FACE="Courier"> |
|
Âåùåñòâåííîå ÷èñëî òèïà float ìîæåò íàõîäèòüñÿ â äèàïàçîíå îò 3.37E38 |
äî -3.37E38. Ìèíèìàëüíî áëèçêîå ê íóëþ çíà÷åíèå ðàâíÿåòñÿ 1.17E-38 è |
-1.17E-38. Çàïèñûâàòü âåùåñòâåííîå ÷èñëî îäèíàðíîé òî÷íîñòè áîëåå ÷åì 8 |
öèôðàìè íå èìååò ñìûñëà. Ïîêàçàòåëü ñòåïåíè ìîæåò ïðèíèìàòü çíà÷åíèÿ îò |
+38 äî -38. |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.4> |
6.7.4 Ìàòåìàòè÷åñêèå îïåðàöèè. |
</A></B></FONT><FONT FACE="Courier"> |
|
Êîìïèëÿòîð ïîääåðæèâàåò 4 îñíîâíûõ äåéñòâèÿ íàä ïåðåìåííûìè òèïà |
float: ñëîæåíèå, âû÷èòàíèå, óìíîæåíèå è äåëåíèå. Ïîääåðæèâàåòñÿ òàêæå |
èíêðåìåíò (var++ - óâåëè÷åíèå íà 1), äåêðåìåíò (var-- - óìåíüøåíèå íà 1), |
ñìåíà çíàêà (-var) è îáìåí çíà÷åíèÿìè (var1 >< var2). Îñòàëüíûå |
ìàòåìàòè÷åñêèå îïåðàöèè áóäóò ðåàëèçîâàíû ëèáî óæå ðåàëèçîâàíû âî âíåøíèõ |
áèáëèîòåêàõ. Ïðè âû÷èñëåíèè çíà÷åíèÿ ïåðåìåííîé <b>float</b> ìîæíî èñïîëüçîâàòü |
è ïåðåìåííûå äðóãèõ òèïîâ, îíè áóäóò àâòîìàòè÷åñêè ïðåîáðàçîâàíû â òèï |
<b>float</b>. |
|
<font color="Red"><b>ÂÍÈÌÀÍÈÅ! Ñîñòàâíûå ìàòåìàòè÷åñêèå îïåðàöèè âûïîëíÿþòñÿ â òîì |
ïîðÿäêå, â êîòîðîì îíè çàïèñàíû, íåâçèðàÿ íà ïðàâèëà àðèôìåòèêè</b></font>. |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.5> |
6.7.5 Ïðåîáðàçîâàíèÿ òèïîâ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïðè ìàòåìàòè÷åñêèõ îïåðàöèÿõ êîíå÷íûì èòîãîì êîòîðûõ ÿâëÿåòñÿ |
ïåðåìåííàÿ òèïà <b>float</b>, âñå îïåðàíäû äðóãèõ òèïîâ ïåðåä âû÷èñëåíèåì áóäóò |
ïðåîáðàçîâàíû â òèï <b>float</b>. Ïðè ïðèñâàèâàíèè ïåðåìåííîé òèïà <b>float</b> çíà÷åíèÿ |
ïåðåìåííîé äðóãîãî òèïà îíî òàêæå áóäåò ïðåîáðàçîâàíî â òèï <b>float</b>. |
|
Åñëè ïðè öåëî÷èñëåííûõ âû÷èñëåíèÿõ îäíèì èç îïåðàíäîâ áóäåò ïåðåìåííàÿ |
òèïà <b>float</b>, òî èç íåãî áóäåò âûäåëåíà öåëàÿ ÷àñòü, êîòîðàÿ è ïðèìåò |
ó÷àñòèå â âû÷èñëåíèÿõ. Ïðè ïðèñâàèâàíèè öåëî÷èñëåííîé ïåðåìåííîé çíà÷åíèÿ |
ïåðåìåííîé òèïà <b>float</b>, èç íåå òàêæå áóäåò âûäåëåíà öåëàÿ ÷àñòü, êîòîðàÿ è |
áóäåò ïðèñâîåíà öåëî÷èñëåííîé ïåðåìåííîé. |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.6> |
6.7.6 Îïåðàöèè ñðàâíåíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Åñëè ïðè îïåðàöèè ñðàâíåíèÿ ëåâûì îïåðàíäîì ÿâëÿåòñÿ ïåðåìåííàÿ èëè |
âûðàæåíèå òèïà <b>float</b>, à ïðàâûì ÿâëÿåòñÿ öåëî÷èñëåííîå çíà÷åíèå, òî |
öåëî÷èñëåííîå çíà÷åíèå áóäåò ïðåîáðàçîâàíî â âåùåñòâåííûé òèï. Åñëè æå |
ëåâûì îïåðàíäîì ÿâëÿåòñÿ öåëî÷èñëåííîå âûðàæåíèå èëè ïåðåìåííàÿ, à ïðàâûì |
îïåðàíäîì çíà÷åíèå òèïà <b>float</b>, òî èç ïðàâîãî îïåðàíäà áóäåò âûäåëåíà öåëàÿ |
÷àñòü, êîòîðàÿ è ïðèìåò ó÷àñòèå â ñðàâíåíèè. |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.7.7> |
6.7.7 Ñðàâíåíèå ïåðåìåííûõ òèïà float ñ 32-áèòíûì ðåãèñòðîì. |
</A></B></FONT><FONT FACE="Courier"> |
|
 ðåãèñòðàõ ìîãóò ñîäåðæàòüñÿ çíàêîâûå, áåç çíàêîâûå è âåùåñòâåííûå |
äàííûå. Ïî óìîë÷àíèþ ñ÷èòàåòñÿ, ÷òî â ðåãèñòðå íàõîäèòñÿ áåç çíàêîâîå öåëîå |
÷èñëî. Ïðè ñðàâíåíèè ïåðåìåííûõ òèïà <b>float</b> ñ 32-áèòíûì ðåãèñòðîì ìîæíî |
óêàçûâàòü òèï äàííûõ ñîäåðæàùèõñÿ â ðåãèñòðå. Äëÿ ýòîé öåëè ìîæíî |
èñïîëüçîâàòü ìîäèôèêàòîðû: <b>signed, unsigned, float</b>. Ïðèìåðû: |
|
float f=1.0; |
|
void PROC() |
{ |
IF( f < signed ECX) //â ðåãèñòðå ECX íàõîäèòñÿ çíàêîâîå ÷èñëî |
IF( unsigned EBX > f) //â ðåãèñòðå EBX íàõîäèòñÿ áåç çíàêîâîå ÷èñëî |
IF( f == float EAX ) //â EAX íàõîäèòñÿ ÷èñëî ôîðìàòà float |
} |
|
<font color="Red"><b>ÂÍÈÌÀÍÈÅ! Ïðè îïåðàöèè ñðàâíåíèÿ ñ ó÷àñòèåì ïåðåìåíîé òèïà float, |
ñîäåðæèìîå ðåãèñòðà AX áóäåò ðàçðóøåíî.</b></font> |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=6.8> |
6.8 Óêàçàòåëè. |
</A></B></FONT><FONT FACE="Courier"> |
|
 C-- ñåé÷àñ óêàçàòåëè ðåàëèçîâàíû íå â ïîëíîì îáúåìå. Ïîýòîìó ìíîãèå |
âåùè, êîòîðûå âîçìîæíû â îáû÷íûõ ÿçûêàõ <b>C</b>, çäåñü áóäóò íåäîñòóïíû. |
|
Ïðèìåð ïðèìåíåíèÿ óêàçàòåëåé â C--: |
|
char *string[4]={"string1", "string2", "string3", 0}; //ìàññèâ óêàçàòåëåé |
char *str="string4"; |
|
main() |
int i; |
char *tstr; |
{ |
FOR(i=0; string[i]!=0; i++){ |
WRITESTR(string[i]); |
WRITELN(); |
} |
FOR(tstr=str;byte *tstr!=0; tstr++){ |
WRITE(byte *tstr); |
} |
} |
|
Óêàçàòåëè ìîæíî èñïîëüçîâàòü ïðè ïåðåäà÷å ïàðàìåòðîâ ïðîöåäóðàì, à â |
ñàìèõ ïðîöåäóðàõ â êà÷åñòâå êàê ëîêàëüíûõ, òàê è ïàðàìåòðè÷åñêèõ |
ïåðåìåííûõ. Óêàçàòåëè ìîæíî òàêæå èñïîëüçîâàòü â ñòðóêòóðàõ. Ìîæíî |
èñïîëüçîâàòü óêàçàòåëè íà óêàçàòåëè. Ââåäåíà ïîääåðæêà óêàçàòåëåé íà |
ïðîöåäóðû: |
|
void (*proc)(); //îáúÿâëåíèå óêàçàòåëÿ íà ïðîöåäóðó |
|
Ïî óìîë÷àíèþ óêàçàòåëè íà ïðîöåäóðó ÿâëÿþòñÿ óêàçàòåëÿìè íà ïðîöåäóðó â |
ñòèëå <b>pascal</b>, íåçàâèñèìî îò ðåãèñòðà, â êîòîðîì íàïèñàíî èìÿ ïðîöåäóðû è |
ðåæèìà êîìïèëÿöèè. Åñëè Âàì íåîáõîäèìî, ÷òîáû áûë èñïîëüçîâàí äðóãîé òèï |
âûçîâà, òî åãî íåîáõîäèìî óêàçàòü ïðè îáúÿâëåíèè óêàçàòåëÿ íà ïðîöåäóðó. |
|
Ïðè èíèöèàëèçàöèè óêàçàòåëåé êîìïèëÿòîð íå êîíòðîëèðóåò òî, ÷åì |
èíèöèàëèçèðóåòñÿ óêàçàòåëü. Ò.å. Âû ìîæåòå óêàçàòåëþ íà <b>char</b> ïðèñâîèòü |
óêàçàòåëü íà <b>int</b> èëè óêàçàòåëþ íà ïðîöåäóðó ïðèñâîèòü àäðåñ ïåðåìåííîé. |
Ýòî ìîæåò âûçâàòü îøèáêó â ðàáîòå ïðîãðàììû. |
<A href="#contents6" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=7.1> |
7. Àäðåñàöèÿ. |
|
7.1 Îòíîñèòåëüíàÿ àäðåñàöèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Èçíà÷àëüíî èíäåêñíûé äîñòóï ê ýëåìåíòàì â ìàññèâàõ ëþáîãî òèïà â |
êîìïèëÿòîðå îñóùåñòâëÿëñÿ ïîáàéòíî, íåçàâèñèìî îò îáúÿâëåííîãî òèïà äàííûõ. |
Èíäåêñû îãðàíè÷åíû ôîðìàòîì ïîëÿ <b>RM</b> ïðîöåññîðà 8086, òàêèì îáðàçîì, |
äîñòóïíû òîëüêî ñëåäóþùèå ôîðìàòû èíäåêñîâ (ãäå èíäåêñ - çíà÷åíèå |
16-ðàçðÿäíîé êîíñòàíòû èëè ïîñòîÿííîãî âûðàæåíèÿ): |
|
variable[index] |
variable[index+BX+SI] |
variable[index+BX+DI] |
variable[index+BP+SI] |
variable[index+BP+DI] |
variable[index+SI] |
variable[index+DI] |
variable[index+BP] |
variable[index+BX] |
|
Íà÷èíàÿ ñ âåðñèè 0.210, ïîÿâèëàñü âîçìîæíîñòü èñïîëüçîâàòü â êà÷åñòâå |
èíäåêñà ïåðåìåííûõ òèïà <b>char byte int word long dword</b>. Ïðè ýòîì |
äîñòóï ê ýëåìåíòàì ìàññèâà îñóùåñòâëÿåòñÿ â çàâèñèìîñòè îò îáúÿâëåííîãî òèïà |
ìàññèâà. |
|
Òàêæå íà÷èíàÿ ñ âåðñèè 0.210 ïîÿâèëàñü âîçìîæíîñòü èñïîëüçîâàòü â |
êà÷åñòâå èíäåêñíûõ è áàçîâûõ ðåãèñòðîâ ïðè îòíîñèòåëüíîé àäðåñàöèè ëþáûå |
32-áèòíûå ðåãèñòðû. |
|
Åñëè Âû äëÿ àäðåñàöèè ê ýëåìåíòàì ìàññèâà áóäåòå èñïîëüçîâàòü ðåãèñòðû è |
÷èñëîâûå êîíñòàíòû, èç êîòîðûõ ìîæíî ïîëó÷èòü ïîëå <b>RM</b> äëÿ èíñòðóêöèé 8086 |
ïðîöåññîðà èëè êîìáèíàöèþ ïîëåé <b>RM BASE è SIB</b> äëÿ 80386 ïðîöåññîðà, òî |
êîìïèëÿòîð áóäåò èñïîëüçîâàòü ýòè ðåãèñòðû äëÿ ãåíåðàöèè èíñòðóêöèè ñ ýòèìè |
ïîëÿìè.  ðåçóëüòàòå Âû ïîëó÷èòå îòíîñèòåëüíóþ ïîáàéòíóþ àäðåñàöèþ ê |
ýëåìåíòàì ìàññèâà. |
|
Åñëè æå èç ýòèõ ðåãèñòðîâ íåâîçìîæíî ïîëó÷èòü ïîëÿ <b>RM, BASE, SIB</b>, |
èëè äëÿ àäðåñàöèè áóäåò èñïîëüçîâàíà ïåðåìåííàÿ, òî êîìïèëÿòîð ñíà÷àëà |
âû÷èñëèò ýòî âûðàæåíèå â ðåãèñòð <b>(E)SI</b> èëè äðóãîé, ïîäõîäÿùèé ðåãèñòð, à |
çàòåì óìíîæèò ñîäåðæèìîå ýòîãî ðåãèñòðà íà ðàçðÿäíîñòü Âàøåãî ìàññèâà. Òàêèì |
îáðàçîì, â ýòîì ñëó÷àå âû áóäåòå èìåòü ïîýëåìåíòíóþ àäðåñàöèþ â ìàññèâå. |
Ïðèìåð: |
|
AX = var [ 5 ]; |
AX = var [ BX + 5 ]; |
AX = var [ BX + CX ]; |
AX = var [ i ]; |
|
Êîìïèëÿòîð ñãåíåðèðóåò ñëåäóþùèé êîä: |
test.c-- 7: AX=var[5]; |
0100 A12501 mov ax,[125h] |
|
test.c-- 8: AX=var[BX+5]; |
0103 8B872501 mov ax,[bx+125h] |
|
test.c-- 9: AX=var[BX+CX]; |
0107 89DE mov si,bx |
0109 01CE add si,cx |
010B 01F6 add si,si |
010D 8B842001 mov ax,[si+120h] |
|
test.c-- 10: AX=var[i]; |
0111 8B362201 mov si,[122h] |
0115 01F6 add si,si |
0117 8B842001 mov ax,[si+120h] |
|
Êàê Âû âèäèòå, ïåðâûå äâà âûðàæåíèÿ áûëè ïðåîáðàçîâàíû â îäíó |
àññåìáëåðíóþ èíñòðóêöèþ, è ïîëó÷èëàñü ïîáàéòíàÿ àäðåñàöèÿ.  äâóõ ñëåäóþùèõ |
âûðàæåíèÿõ ïîëó÷èòü îäíó àññåìáëåðíóþ èíñòðóêöèþ íå óäàëîñü è êîìïèëÿòîð |
ïðèìåíèë äëÿ ýòèõ âûðàæåíèé ïîýëåìåíòíóþ àäðåñàöèþ. |
|
Òàêîé äâîéñòâåííûé ïîäõîä ðåàëèçîâàí ñ öåëüþ ñîõðàíåíèÿ ñîâìåñòèìîñòè |
íîâûõ âîçìîæíîñòåé ñ ïðåäûäóùèìè. |
|
Íåñìîòðÿ íà êàæóùóþñÿ äëÿ íåèñêóøåííîãî ïîëüçîâàòåëÿ ïóòàíèöó, ýòîò |
ìåõàíèçì ëåãêî ïîíÿòü è çàïîìíèòü ïî ñëåäóþùåìó ïðîñòîìó ïðàâèëó: åñëè Âû |
èñïîëüçóåòå â êà÷åñòâå èíäåêñà òîëüêî öèôðîâîå çíà÷åíèå èëè ðåãèñòð <b>BX, SI, |
DI, BP</b> èëè ëþáîé 32-áèòíûé ðåãèñòð, òî êîìïèëÿòîð ñãåíåðèðóåò êîä ñ |
ïîáàéòíîé àäðåñàöèåé. Åñëè æå â êà÷åñòâå èíäåêñà áóäåò èñïîëüçîâàíà |
ïåðåìåííàÿ, òî êîìïèëÿòîð ñãåíåðèðóåò êîä ñ ïîýëåìåíòíîé àäðåñàöèåé. Åñëè |
æå Âû õîðîøî çíàêîìû ñ àññåìáëåðîì, òî Âàì íå ñîñòàâèò áîëüøîãî òðóäà |
ïîíÿòü â êàêèõ ñëó÷àÿõ Âû ïîëó÷èòå ïîáàéòíóþ, à â êàêèõ ïîýëåìåíòíóþ |
àäðåñàöèþ. |
|
Èíîãäà òðåáóåòñÿ èìåòü ïîáàéòíûé äîñòóï ê ýëåìåíòàì ìàññèâà èñïîëüçóÿ â |
êà÷åñòâå èíäåêñà ïåðåìåííóþ. Íàïðèìåð |
|
AX=var[i]; |
|
Äëÿ ýòîãî âûðàæåíèÿ áóäåò ñãåíåðèðîâàíà ïîýëåìåíòíàÿ àäðåñàöèÿ, à íàì |
íóæíà ïîáàéòîâàÿ. Äëÿ ýòîãî ìîæíî íàïèñàòü òàê: |
|
SI=i; |
AX=var[SI]; |
|
Íî ìîæíî ýòî çàïèñàòü êîðî÷å: |
|
AX=DSWORD[#var+i]; |
|
 îáîèõ ýòèõ ñëó÷àÿõ Âû ïîëó÷èòå ïîáàéòíóþ àäðåñàöèþ ê ýëåìåíòàì ìàññèâà |
<b>var</b>. Â ïåðâîì âàðèàíòå Âû ñìîæåòå êîíòðîëèðîâàòü êàêîé ðåãèñòð áóäåò |
èñïîëüçîâàí â êà÷åñòâå èíäåêñà, à âî âòîðîì âàðèàíòå êîìïèëÿòîð áóäåò ñàì |
âûáèðàòü ðåãèñòð äëÿ èñïîëüçîâàíèÿ â êà÷åñòâå èíäåêñà. |
|
Âàæíî âñåãäà ïîìíèòü î äâîéñòâåííîì ïîäõîäå êîìïèëÿòîðà ê âû÷èñëåíèþ |
àäðåñà â ìàññèâå. Åùå ðàç êðàòêî: åñëè Âû â ìàññèâå àäðåñóåòåñü èñïîëüçóÿ |
÷èñëîâóþ êîíñòàíòó èëè ðåãèñòðû <b>BX,DI,SI,BP</b> êîìïèëÿòîð èñïîëüçóåò ýòè |
çíà÷åíèÿ áåç èçìåíåíèÿ. Âî âñåõ äðóãèõ ñëó÷àÿõ áóäåò êîððåêöèÿ çíà÷åíèÿ â |
çàâèñèìîñòè îò òèïà ìàññèâà. |
<A href="#contents7" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=7.2> |
7.2 Àáñîëþòíàÿ àäðåñàöèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Àáñîëþòíàÿ àäðåñàöèÿ òàêæå âîçìîæíà. Äåéñòâóþò òå æå ñàìûå îãðàíè÷åíèÿ |
íà èíäåêñû, ÷òî è ïðè îòíîñèòåëüíîé àäðåñàöèè. |
|
Âû÷èñëåííûé èíäåêñ áóäåò àáñîëþòåí â ñåãìåíòå, ðåãèñòð êîòîðîãî óêàçàí. |
Ìîæíî óêàçûâàòü ëþáîé èç ðåãèñòðîâ <b>DS, CS, SS è ES</b>. Íà ïðîöåññîðàõ 80386 è |
áîëåå íîâûõ ìîæíî óêàçûâàòü òàêæå ðåãèñòðû <b>FS è GS</b>. |
|
Ñèíòàêñèñ - òî÷íî òàêîé æå, êàê è â îòíîñèòåëüíîé àäðåñàöèè, çà |
èñêëþ÷åíèåì òîãî, ÷òî óêàçûâàåòñÿ íå ïåðåìåííàÿ, à ñåãìåíò è òèï äàííûõ. |
Ìîãóò ïðèìåíÿòüñÿ ñëåäóþùèå óêàçàòåëè: |
|
// àäðåñàöèÿ â ñåãìåíòå äàííûõ |
DSBYTE [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå DS |
DSWORD [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå DS |
DSCHAR [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå DS |
DSINT [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå DS |
DSDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå DS |
DSLONG [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå DS |
DSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå DS |
|
// àäðåñàöèÿ â ñåãìåíòå êîäà |
CSBYTE [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå CS |
CSWORD [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå CS |
CSCHAR [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå CS |
CSINT [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå CS |
CSDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå CS |
CSLONG [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå CS |
CSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå CS |
|
// àäðåñàöèÿ â ñåãìåíòå ñòåêà |
SSBYTE [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå SS |
SSWORD [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå SS |
SSCHAR [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå SS |
SSINT [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå SS |
SSDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå SS |
SSLONG [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå SS |
SSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå SS |
|
// àäðåñàöèÿ â äîïîëíèòåëüíîì ñåãìåíòå äàííûõ |
ESBYTE [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå ES |
ESWORD [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå ES |
ESCHAR [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå ES |
ESINT [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå ES |
ESDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå ES |
ESLONG [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå ES |
ESFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå ES |
|
// àäðåñàöèÿ â äîïîëíèòåëüíîì ñåãìåíòå 2 (80386) + |
FSBYTE [ñìåùåíèå] // àäðåñóåò áàéò â ñåãìåíòå FS |
FSWORD [ñìåùåíèå] // àäðåñóåò ñëîâî â ñåãìåíòå FS |
FSCHAR [ñìåùåíèå] // àäðåñóåò char â ñåãìåíòå FS |
FSINT [ñìåùåíèå] // àäðåñóåò int â ñåãìåíòå FS |
FSDWORD [ñìåùåíèå] // àäðåñóåò dword â ñåãìåíòå FS |
FSLONG [ñìåùåíèå] // àäðåñóåò long â ñåãìåíòå FS |
FSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå FS |
|
// àäðåñàöèÿ â äîïîëíèòåëüíîì ñåãìåíòå 3 (80386) + |
GSBYTE [ñìåùåíèå] // àäðåñóþò áàéò â ñåãìåíòå GS |
GSWORD [ñìåùåíèå] // àäðåñóþò ñëîâî â ñåãìåíòå GS |
GSCHAR [ñìåùåíèå] // àäðåñóþò char â ñåãìåíòå GS |
GSINT [ñìåùåíèå] // àäðåñóþò int â ñåãìåíòå GS |
GSDWORD [ñìåùåíèå] // àäðåñóþò dword â ñåãìåíòå GS |
GSLONG [ñìåùåíèå] // àäðåñóþò long â ñåãìåíòå GS |
GSFLOAT [ñìåùåíèå] // àäðåñóåò float â ñåãìåíòå GS |
|
Ïðèìåðû: |
Çàãðóçèòü â AL áàéò èç ÿ÷åéêè ñ øåñòíàäöàòåðè÷íûì àäðåñîì 0000:0417 |
ES = 0x0000; |
AL = ESBYTE [0x417]; |
|
Ïåðåìåñòèòü ñëîâî èç ÿ÷åéêè ñ øåñòíàäöàòåðè÷íûì àäðåñîì 2233:4455 |
â ÿ÷åéêó ñ øåñòíàäöàòåðè÷íûì àäðåñîì A000:0002 |
$PUSH DS |
DS = 0x2233; |
ES = 0xA000; |
ESWORD [0x0002] = DSWORD [0x4455]; |
$POP DS |
|
Ñîõðàíèòü âû÷èñëåííîå çíà÷åíèå âûðàæåíèÿ X + 2, èìåþùåå |
òèï int â ÿ÷åéêå ñ øåñòíàäöàòåðè÷íûì àäðåñîì FFFF:1234 |
ES = 0xFFFF; |
ESINT [0x1234] = X + 2; |
|
Ñîõðàíèòü BX â ñåãìåíòå ñòåêà ïî ñìåùåíèþ 42: |
SSWORD [42] = BX; |
<A href="#contents7" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.1> |
8. Ðàáîòà ñ áëîêàìè äàííûõ. |
|
8.1 Ñòðóêòóðû. |
|
8.1.1 ×òî òàêîå ñòðóêòóðû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñòðóêòóðà ïîçâîëÿåò îáúåäèíèòü â îäíîì îáúåêòå ñîâîêóïíîñòü çíà÷åíèé, |
êîòîðûå ìîãóò èìåòü ðàçëè÷íûå òèïû. |
<A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.2> |
8.1.2 Ñèíòàêñèñ. |
</A></B></FONT><FONT FACE="Courier"> |
|
struct [<òåã>] { <ñïèñîê-îáúÿâëåíèé-ýëåìåíòîâ> } |
<îïèñàòåëü>[,<îïèñàòåëü>...]; |
struct <òåã> <îïèñàòåëü> [,<îïèñàòåëü>]; |
|
Îáúÿâëåíèå ñòðóêòóðû íà÷èíàåòñÿ ñ êëþ÷åâîãî ñëîâà struct è èìååò äâå |
ôîðìû çàïèñè. |
|
 ïåðâîé ôîðìå òèïû è èìåíà ýëåìåíòîâ ñòðóêòóðû ñïåöèôèöèðóþòñÿ â |
ñïèñêå-îáúÿâëåíèé-ýëåìåíòîâ. Íåîáÿçàòåëüíûé â äàííîì ñëó÷àå <b>òåã</b> - ýòî |
èäåíòèôèêàòîð, êîòîðûé èìåíóåò ñòðóêòóðíûé òèï, îïðåäåëåííûé äàííûì |
ñïèñêîì îáúÿâëåíèé ýëåìåíòîâ. <b>îïèñàòåëü</b> ñïåöèôèöèðóåò ëèáî ïåðåìåííóþ |
ñòðóêòóðíîãî òèïà, ëèáî ìàññèâ ñòðóêòóð äàííîãî òèïà. |
|
Âòîðàÿ ñèíòàêñè÷åñêàÿ ôîðìà îáúÿâëåíèÿ èñïîëüçóåò òåã ñòðóêòóðû äëÿ |
ññûëêè íà ñòðóêòóðíûé òèï, îïðåäåëåííûé ãäå-òî â äðóãîì ìåñòå ïðîãðàììû. |
|
Ñïèñîê îáúÿâëåíèé ýëåìåíòîâ ïðåäñòàâëÿåò ñîáîé ïîñëåäîâàòåëüíîñòü èç |
îäíîé èëè áîëåå îáúÿâëåíèé ïåðåìåííûõ. Êàæäàÿ ïåðåìåííàÿ, îáúÿâëåííàÿ â |
ýòîì ñïèñêå, íàçûâàåòñÿ ýëåìåíòîì ñòðóêòóðû. |
|
Ýëåìåíòû ñòðóêòóðû çàïîìèíàþòñÿ â ïàìÿòè ïîñëåäîâàòåëüíî â òîì |
ïîðÿäêå, â êîòîðîì îíè îáúÿâëÿþòñÿ. Âûðàâíèâàíèå ýëåìåíòîâ âíóòðè |
ñòðóêòóðû ïî óìîë÷àíèþ íå ïðîèçâîäèòñÿ. Íî ñóùåñòâóåò îïöèÿ, âêëþ÷åíèå |
êîòîðîé â êîìàíäíóþ ñòðîêó ïîçâîëÿåò èìåòü âûðàâíèâàíèå è âíóòðè |
ñòðóêòóðû. Ñàìà ñòðóêòóðà âûðàâíèâàåòñÿ íà ÷åòíûé àäðåñ åñëè âêëþ÷åíî |
âûðàâíèâàíèå. |
|
Ïðèìåðû îáúÿâëåíèé ñòðóêòóð: |
|
struct test |
{ |
int a; |
char b[8]; |
long c; |
} rr, ff[4]; |
|
 ýòîì ïðèìåðå îáúÿâëåíû ñòðóêòóðà ñ èìåíåì <b>rr</b> è ìàññèâ èç 4 ñòðóêòóð |
ñ èìåíåì <b>ff</b>. Âñåìó íàáîðó ïåðåìåííûõ ïðèñâîåíî íàçâàíèå <b>(òåã) test</b>. Ýòîò |
òåã ìîæíî èñïîëüçîâàòü äëÿ îáúÿâëåíèÿ äðóãèõ ñòðóêòóð. Íàïðèìåð: |
|
struct test dd; |
|
Çäåñü îáúÿâëåíà ñòðóêòóðà ñ èìåíåì <b>dd</b>, èìåþùàÿ íàáîð ýëåìåíòîâ |
îïèñàííûõ â òåãå <b>test</b>. |
|
Ïðè îáúÿâëåíèè ñòðóêòóð ñ ðàíåå îáúÿâëåííûì òåãîì êëþ÷åâîå ñëîâî |
<b>struct</b> ìîæíî íå ïèñàòü. Ò.å ìîæíî íàïèñàòü âîò òàê: |
|
test dd; |
<A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.3> |
8.1.3 Èíèöèàëèçàöèÿ ñòðóêòóð ïðè îáúÿâëåíèè. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïîñëå îáúÿâëåíèÿ ñòðóêòóðû åå ýëåìåíòû ìîãóò ïðèíèìàòü ïðîèçâîëüíûå |
çíà÷åíèÿ. ×òî áû ýòîãî íå áûëî íàäî ñòðóêòóðû ïðîèíèöèàëèçèðîâàòü. |
Èíèöèàëèçèðîâàòü ñòðóêòóðû ïðè èõ îáúÿâëåíèè ìîæíî òîëüêî ãëîáàëüíûå. C-- |
ïîääåðæèâàåò íåñêîëüêî ñïîñîáîâ èíèöèàëèçàöèè ñòðóêòóð ïðè èõ îáúÿâëåíèè: |
|
1. Îäíèì çíà÷åíèåì: |
|
struct test dd=2; |
|
 ýòîì ïðèìåðå âñåì ýëåìåíòàì ñòðóêòóðû dd ïðèñâàèâàåòñÿ çíà÷åíèå 2. |
|
2. Ìàññèâîì çíà÷åíèé: |
|
struct test dd={1,2,,6}; |
|
 ýòîì ïðèìåðå ïåðâîìó ýëåìåíòó ñòðóêòóðû dd ïðèñâàèâàåòñÿ çíà÷åíèå 1, |
âòîðîìó - 2, ÷åòâåðòîìó - 6. Ïðîïóùåííûì è íå äîèíèöèàëèçèðîâàííûì |
çíà÷åíèÿì áóäåò ïðèñâîåíî 0 çíà÷åíèå. |
|
3. Êîìàíäîé FROM: |
|
struct test dd=FROM "file.dat"; |
|
 ýòîì ïðèìåðå íà ìåñòî ãäå ðàñïîëîæåíà ñòðóêòóðà dd ïðè êîìïèëÿöèè áóäåò |
çàãðóæåíî ñîäåðæèìîå ôàéëà <file.dat>. Åñëè ðàçìåð ôàéëà áîëüøå ÷åì ðàçìåð |
ñòðóêòóðû, òî ëèøíèå áàéòû áóäóò çàãðóæåíû â êîä ïðîãðàììû, íî îíè íå |
áóäóò âîñòðåáîâàíû. Åñëè ðàçìåð ôàéëà ìåíüøå ÷åì ðàçìåð ñòðóêòóðû, òî |
íåäîñòàþùèå áàéòû ñòðóêòóðû áóäóò çàïîëíåíû íóëÿìè. |
|
4. Êîìàíäîé EXTRACT: |
|
struct test dd=EXTRACT "file.dat", 24, 10; |
|
 ýòîì ïðèìåðå íà ìåñòî ãäå ðàñïîëîæåíà ñòðóêòóðà dd ïðè êîìïèëÿöèè áóäåò |
çàãðóæåí ôðàãìåíò èç ôàéëà <b>file.dat</b> äëèíîé 10 áàéò ñî ñìåùåíèÿ 24. |
Íåäîñòàþùèå áàéòû áóäóò çàïîëíåíû íóëÿìè. |
<A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.4> |
8.1.4 Èíèöèàëèçàöèÿ ñòðóêòóðû ïðè âûïîëíåíèè ïðîãðàììû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïðè âûïîëíåíèè ïðîãðàììû, êðîìå ïðèñâîåíèÿ êàæäîìó ýëåìåíòó ñòðóêòóðû |
çíà÷åíèÿ, ìîæíî ïðîèíèöèàëèçèðîâàòü âñþ ñòðóêòóðó ïðèñâîåíèåì åé ÷èñëà èëè |
ïåðåìåííîé. Ïðèìåðû: |
|
void proc() |
struct test aa[5],rr; |
int i; |
{ |
aa[0]=0x12345678; |
aa[i]=int 0x12345678; |
aa=long 0x12345678; |
rr=i; |
|
 ïåðâîì ïðèìåðå ïàìÿòü, çàíèìàåìàÿ ïåðâîé ñòðóêòóðîé ìàññèâà èç 5 |
ñòðóêòóð, áóäåò çàïîëíåíà áàéòîì 0x78 (ïî óìîë÷àíèþ). |
|
Âî âòîðîì ïðèìåðå ïàìÿòü, çàíèìàåìàÿ (i+1)-âîé ñòðóêòóðîé ìàññèâà èç 5 |
ñòðóêòóð, áóäåò çàïîëíåíà ñëîâîì 0x5678. |
|
 òðåòüåì ïðèìåðå ïàìÿòü, çàíèìàåìàÿ âñåì ìàññèâîì èç 5 ñòðóêòóð, áóäåò |
çàïîëíåíà äëèííûì ñëîâîì 0x12345678. |
|
 ÷åòâåðòîì ïðèìåðå ïàìÿòü, çàíèìàåìàÿ ñòðóêòóðîé rr, áóäåò çàïîëíåíà |
ñîäåðæèìûì ïåðåìåííîé i. |
|
Ìîæíî òàêæå êîïèðîâàòü ñîäåðæèìîå îäíîé ñòðóêòóðû â äðóãóþ. Íàïðèìåð: |
|
rr=aa[2]; |
|
Áóäåò ñêîïèðîâàíî ñîäåðæèìîå òðåòüåé ñòðóêòóðû ìàññèâà ñòðóêòóð aa â |
ñòðóêòóðó rr. |
<A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.5> |
8.1.5 Îïåðàöèè ñ ýëåìåíòàìè ñòðóêòóð. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñ ýëåìåíòàìè ñòðóêòóð ìîæíî âûïîëíÿòü âñå òå îïåðàöèè, êîòîðûå |
äîñòóïíû äëÿ ïåðåìåííûõ ñîîòâåòñòâóþùåãî òèïà. Íàïðèìåð: Îáúÿâëåíà |
ñòðóêòóðà: |
|
struct test |
{ |
int a; |
char b[8]; |
long c; |
} rr[3]; |
Ïðèìåð äîïóñòèìîãî ñèíòàêñèñà: |
rr.a = rr.b[i] * rr[1].c + i ; |
|
Ïðèìå÷àíèå: |
Ïðè îïåðàöèÿõ ñ ýëåìåíòàìè ìàññèâà ñòðóêòóð è ñ èíäåêñèðîâàííûìè |
ýëåìåíòàìè, â êîòîðûõ â êà÷åñòâå èíäåêñà èëè íîìåðà ñòðóêòóðû èñïîëüçóåòñÿ |
ïåðåìåííàÿ, êîìïèëÿòîð ìîæåò èñïîëüçîâàòü ðåãèñòðû SI è DI, à â íåêîòîðûõ |
ñèòóàöèÿõ (íàïðèìåð: rr[i].b[j] >< rr[i+1].b[j+2] ) áóäåò çàäåéñòâîâàí è |
ðåãèñòð DX. |
|
Äëÿ îòäåëüíûõ ýëåìåíòîâ ñòðóêòóðû, ìîæíî ïîëó÷àòü èõ àäðåñ, ðàçìåð |
è ñìåùåíèå â òåãå ñòðóêòóðû. Âîò ïðèìåð: |
|
struct AA //îáúÿâëåíèå òåãà ñòðóêòóðû |
{ |
word a[3]; // ïåðâûé ýëåìåíò ñòðóêòóðû |
char b; // âòîðîé ýëåìåíò ñòðóêòóðû |
long c; // òðåòèé ýëåìåíò ñòðóêòóðû |
}; |
|
struct BB //òåã âòîðîé ñòðóêòóðû |
{ |
word aa; // ïåðâûé ýëåìåíò |
AA bb; // âòîðîé ýëåìåíò - âëîæåííàÿ ñòðóêòóðà |
}ss; // îáúÿâëÿåì ñòðóêòóðó ñ òåãîì <b>BB</b> |
|
void proc() |
{ |
AX=#ss.bb.b; // ïîëó÷èòü àäðåñ ýëåìåíòà <b>b</b> ñòðóêòóðû <b>bb</b> â ñòðóêòóðå <b>ss</b> |
AX=#BB.bb.b; // ïîëó÷èòü ñìåùåíèå ýòîãî æå ýëåìåíòà â òåãå <b>BB</b> |
AX=sizeof(ss.bb); // ïîëó÷èòü ðàçìåð ýëåìåíòà <b>bb</b> â ñòðóêòóðå <b>ss</b> |
AX=sizeof(BB.bb); // ïîëó÷èòü ðàçìåð ýëåìåíòà <b>bb</b> â òåãå <b>BB</b> |
} |
<A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.6> |
8.1.6 Âëîæåííûå ñòðóêòóðû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïðè îáúÿâëåíèè òåãîâ ñòðóêòóð ìîæíî èñïîëüçîâàòü òåãè äðóãèõ, |
îáúÿâëåííûõ ðàíåå ñòðóêòóð. Ïðèìåð âëîæåííûõ ñòðóêòóð: |
|
struct RGB |
{ |
byte Red; |
byte Green; |
byte Blue; |
byte Reserved; |
}; |
|
struct BMPINFO |
{ |
struct BMPHEADER header; //îïèñàíèå ýòîé ñòðóêòóðû ïðîïóùåíî |
struct RGB color[256]; |
}info; |
|
Ïðåäïîëîæèì Âàì íóæíî ïîëó÷èòü ñîäåðæèìîå ïåðåìåííîé <b>Red</b> äåñÿòîãî |
ýëåìåíòà <b>color</b>. Ýòî ìîæíî áóäåò çàïèñàòü òàê: |
|
AL=info.color[10].Red; |
|
Íî ñóùåñòâóåò îäíî îãðàíè÷åíèå èñïîëüçîâàíèÿ âëîæåííûõ ñòðóêòóð â C--. |
Ýòî íåâîçìîæíîñòü èñïîëüçîâàíèÿ ïåðåìåííîé â êà÷åñòâå èíäåêñà áîëåå îäíîãî |
ðàçà ïðè îáðàùåíèè ê ìíîãîýêçåìïëÿðíûì ñòðóêòóðàì. Ïîÿñíèì ýòî íà ïðèìåðå: |
|
struct ABC |
{ |
int a; |
int b; |
int c; |
}; |
|
struct |
{ |
struct ABC first[4]; //4 ýêçåìïëÿðà ñòðóêòóðû ABC |
int d; |
}second[4]; |
|
int i,j; |
|
void proc() |
{ |
AX=second[i].first[j].a; //òàêàÿ çàïèñü âûçîâåò ñîîáùåíèå îá îøèáêà, òàê |
//êàê ïåðåìåííàÿ èñïîëüçîâàëàñü â äâóõ ìåñòàõ |
AX=second[2].first[j].a; //à ýòîò ñèíòàêñèñ äîïóñòèì. |
AX=second[i].first[3].a; |
} |
<A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.7> |
8.1.7 Îòîáðàæåíèå òåãà ñòðóêòóðû íà áëîê ïàìÿòè. |
</A></B></FONT><FONT FACE="Courier"> |
|
Îòîáðàæåíèå òåãà ñòðóêòóðû íà áëîê ïàìÿòè ÿâëÿåòñÿ àëüòåðíàòèâîé |
óêàçàòåëÿì íà ñòðóêòóðû. |
|
Àëüòåðíàòèâíûé ñïîñîá èñïîëüçîâàíèÿ óêàçàòåëåé íà ñòðóêòóðû ïîçâîëèò |
Âàì ñàìèì âûáðàòü ðåãèñòð, â êîòîðîì áóäåò õðàíèòñÿ àäðåñ ñòðóêòóðû è |
ñàìèì ñëåäèòü çà åãî ñîõðàííîñòüþ è ïî ìåðå íåîáõîäèìîñòè âîññòàíàâëèâàòü |
åãî ñîäåðæèìîå. |
|
Îáúÿñíèòü, êàê èñïîëüçîâàòü îòîáðàæåíèå òåãà ñòðóêòóðû íà ïàìÿòü, |
íàâåðíîå, áóäåò ïðîùå íà ïðèìåðå: |
|
struct AA //îáúÿâëåíèå òåãà ñòðóêòóðû |
{ |
word a[3]; // ïåðâûé ýëåìåíò ñòðóêòóðû |
char b; // âòîðîé ýëåìåíò ñòðóêòóðû |
long c; // òðåòèé ýëåìåíò ñòðóêòóðû |
}; |
|
byte buf[256]; //áëîê ïàìÿòè, íà êîòîðûé áóäåò îòîáðàæåí òåã ñòðóêòóðû |
|
void proc1() |
{ |
... |
proc2 ( #buf ); // âûçîâ ïðîöåäóðû ñ ïåðåäà÷åé åé â êà÷åñòâå ïàðàìåòðà |
// àäðåñà áëîêà ïàìÿòè |
... |
} |
|
long proc2 (unsigned int pointer_to_mem) |
{ |
int i; |
BX=pointer_to_mem; // â BX çàãðóçèì àäðåñ áëîêà ïàìÿòè |
FOR(i=0; i<3; i++){ // â ìàññèâ ýëåìåíòà <b>a</b> çàïèñàòü -1 |
BX.AA.a[i]=-1; |
} |
BX.AA.b=0; |
ES:BX.AA.c=EAX; |
return BX.AA.c; // âåðíóòü ñîäåðæèìîå ýëåìåíòà <b>c</b> |
} |
|
 16-áèòíîì ðåæèìå äëÿ õðàíåíèÿ àäðåñà ñòðóêòóðû ìîæíî èñïîëüçîâàòü |
ðåãèñòðû: <b>BX,DI,SI,BP</b>. Íî ëó÷øå äëÿ ýòîãî èñïîëüçîâàòü ðåãèñòð <b>BX</b>. |
Ðåãèñòðû <b>DI è SI</b> ìîæåò èñïîëüçîâàòü êîìïèëÿòîð ïðè âû÷èñëåíèè àäðåñà |
ìíîãîýëåìåíòíûõ îáúåêòîâ. Ðåãèñòð <b>BP</b> êîìïèëÿòîð èñïîëüçóåò äëÿ ðàáîòû ñ |
ëîêàëüíûìè è ïàðàìåòðè÷åñêèìè ïåðåìåííûìè.  32-áèòíîì ðåæèìå ìîæíî |
èñïîëüçîâàòü ëþáîé êðîìå <b>ESP è EBP</b> ðåãèñòð, à ðåãèñòðû <b>EDI è ESI</b> íàäî |
èñïîëüçîâàòü îñòîðîæíî. |
<A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.1.8> |
8.1.8 Áèòîâûå ïîëÿ ñòðóêòóð. |
</A></B></FONT><FONT FACE="Courier"> |
|
Áèòîâûå ïîëÿ ñòðóêòóð èñïîëüçóþòñÿ äëÿ ýêîíîìèè ïàìÿòè, ïîñêîëüêó |
ïîçâîëÿþò ïëîòíî óïàêîâàòü çíà÷åíèÿ, è äëÿ îðãàíèçàöèè óäîáíîãî äîñòóïà ê |
ðåãèñòðàì âíåøíèõ óñòðîéñòâ, â êîòîðûõ ðàçëè÷íûå áèòû ìîãóò èìåòü |
ñàìîñòîÿòåëüíîå ôóíêöèîíàëüíîå íàçíà÷åíèå. |
|
Îáúÿâëåíèå áèòîâîãî ïîëÿ èìååò ñëåäóþùèé ñèíòàêñèñ: |
|
<òèï> [<èäåíòèôèêàòîð>]:<êîíñòàíòà>; |
|
èëè íà ïðèìåðå: |
|
int var:5; //îáúÿâëåíèå áèòîâîãî ïîëÿ ðàçìåðîì 5 áèò ñ èìåíåì <b>var</b> |
|
Áèòîâîå ïîëå ñîñòîèò èç íåêîòîðîãî ÷èñëà áèòîâ, êîòîðîå çàäàåòñÿ |
÷èñëîâûì âûðàæåíèåì <b>êîíñòàíòà</b>. Åãî çíà÷åíèå äîëæíî áûòü öåëûì |
ïîëîæèòåëüíûì ÷èñëîì è åãî çíà÷åíèå íå äîëæíî ïðåâûøàòü ÷èñëà ðàçðÿäîâ, |
ñîîòâåòñòâóþùèå <b>òèïó</b> îïðåäåëÿåìîãî áèòîâîãî ïîëÿ. Â C-- áèòîâûå ïîëÿ |
ìîãóò ñîäåðæàòü òîëüêî áåç çíàêîâûå çíà÷åíèÿ. Íåëüçÿ èñïîëüçîâàòü ìàññèâû |
áèòîâûõ ïîëåé, óêàçàòåëè íà áèòîâûå ïîëÿ. |
|
<b> èäåíòèôèêàòîð</b> èìåíóåò áèòîâîå ïîëå. Åãî íàëè÷èå íåîáÿçàòåëüíî. |
Íåèìåíîâàííîå áèòîâîå ïîëå îçíà÷àåò ïðîïóñê ñîîòâåòñòâóþùåãî ÷èñëà áèòîâ |
ïåðåä ðàçìåùåíèåì ñëåäóþùåãî ýëåìåíòà ñòðóêòóðû. Íåèìåíîâàííîå áèòîâîå |
ïîëå, äëÿ êîòîðîãî óêàçàí íóëåâîé ðàçìåð, èìååò ñïåöèàëüíîå íàçíà÷åíèå: |
îíî ãàðàíòèðóåò, ÷òî ïàìÿòü äëÿ ñëåäóþùåãî áèòîâîãî ïîëÿ áóäåò íà÷èíàòüñÿ |
íà ãðàíèöå òîãî òèïà, êîòîðûé çàäàí äëÿ íåèìåíîâàííîãî áèòîâîãî ïîëÿ. |
Ò.å. áóäåò ïðîèçâåäåíî âûðàâíèâàíèå áèòîâîãî ïîëÿ íà 8/16/32 áèòà. |
|
 C-- âñå áèòîâûå ïîëÿ óïàêîâûâàþòñÿ îäíî çà äðóãèì íåçàâèñèìî îò |
ãðàíèö òèïà èäåíòèôèêàòîðîâ. Åñëè ïîñëåäóþùåå ïîëå íå ÿâëÿåòñÿ áèòîâûì |
ïîëåì, òî îñòàâøèåñÿ äî ãðàíèöû áàéòà áèòû íå áóäóò èñïîëüçîâàíû. |
Ìàêñèìàëüíûé ðàçìåð áèòîâîãî ïîëÿ ðàâåí 32 áèòà äëÿ òèïà <b>dword/long</b>, 16 |
áèò äëÿ òèïà <b>word/int</b> è 8 áèò äëÿ òèïà <b>byte/char</b>. Áèòîâûå ïîëÿ ìîæíî |
îáúåäèíÿòü, ò.å. èñïîëüçîâàòü èõ â îïåðàòîðå<b> union. sizeof</b> |
ïðèìåíåííûé ê áèòîâîìó ïîëþ âåðíåò ðàçìåð ýòîãî ïîëÿ â áèòàõ. Ïðè |
èñïîëüçîâàíèè áèòîâîãî ïîëÿ, åãî ñîäåðæèìîå áóäåò ðàñøèðÿòñÿ â ðåãèñòð |
êàê áåç çíàêîâîå öåëîå ÷èñëî. |
<A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.2> |
8.2 Îáúåäèíåíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Îáúåäèíåíèÿ ïîçâîëÿþò â ðàçíûå ìîìåíòû âðåìåíè õðàíèòü â îäíîì îáúåêòå |
çíà÷åíèÿ ðàçëè÷íîãî òèïà. |
|
Ïàìÿòü, êîòîðàÿ âûäåëÿåòñÿ ïîä îáúåäèíåíèå, îïðåäåëÿåòñÿ ðàçìåðîì |
íàèáîëåå äëèííîãî èç ýëåìåíòîâ îáúåäèíåíèÿ. Âñå ýëåìåíòû îáúåäèíåíèÿ |
ðàçìåùàþòñÿ â îäíîé è òîé æå îáëàñòè ïàìÿòè ñ îäíîãî è òîãî æå àäðåñà. |
Çíà÷åíèå òåêóùåãî ýëåìåíòà îáúåäèíåíèÿ òåðÿåòñÿ, êîãäà äðóãîìó ýëåìåíòó |
îáúåäèíåíèÿ ïðèñâàèâàåòñÿ çíà÷åíèå. |
|
 C-- ðåàëèçîâàíû òàê íàçûâàåìûå àíîíèìíûå îáúåäèíåíèÿ. Ò.å. |
îáúåäèíåíèÿì íå ïðèñâàèâàåòñÿ èìÿ, à îáðàùåíèå ê ýëåìåíòàì îáúåäèíåíèÿ |
ïðîèñõîäèò êàê ê îáû÷íîé ïåðåìåííîé. Ïðèìåð: |
|
union |
{ |
dword regEAX; |
word regAX; |
byte regAL; |
}; // îáúÿâèëè, ÷òî 3 ïåðåìåííûå ðàñïîëîæåíû ïî îäíîìó è òîìó æå |
// ôèçè÷åñêîìó àäðåñó |
|
void test() |
{ |
regEAX = 0x2C; |
BL = regAL; //â ðåãèñòðå BL îêàæåòñÿ çíà÷åíèå 0x2C |
} |
|
Îáúåäèíÿòü ìîæíî ïåðåìåííûå ðàçëè÷íûõ òèïîâ, ìàññèâû, ñòðîêîâûå |
ïåðåìåííûå è ñòðóêòóðû. Îáúåäèíåíèÿ ìîãóò áûòü ãëîáàëüíûìè è ëîêàëüíûìè, à |
òàêæå ðàñïîëàãàòüñÿ âíóòðè ñòðóêòóð (ïîêà â îáúåäèíåíèÿõ âíóòðè ñòðóêòóð |
íåëüçÿ èñïîëüçîâàòü ñòðóêòóðû). Ãëîáàëüíûå îáúåäèíåíèÿ ìîãóò áûòü |
èíèöèàëèçèðîâàííûìè è íåèíèöèàëèçèðîâàííûìè. ×òîáû ïîëó÷èòü |
èíèöèàëèçèðîâàííîå îáúåäèíåíèå äîñòàòî÷íî ïðîèíèöèàëèçèðîâàòü ëèøü ïåðâûé |
ýëåìåíò îáúåäèíåíèÿ. Åñëè æå ïåðâûé ýëåìåíò îáúåäèíåíèÿ íå èíèöèàëèçèðîâàí, |
à ñëåäóþùèå ýëåìåíòû èíèöèàëèçèðîâàíû, òî ýòî âûçîâåò ñîîáùåíèå êîìïèëÿòîðà |
îá îøèáêå. |
<A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=8.3> |
8.3 Êîìàíäû 'FROM' è 'EXTRACT'. |
</A></B></FONT><FONT FACE="Courier"> |
|
 C-- åñòü î÷åíü îðèãèíàëüíûå êîìàíäû, êîòîðûõ íåò â äðóãèõ ÿçûêàõ. Ýòî |
<b>FROM è EXTRACT</b>. |
|
Êîìàíäà <b>FROM</b> èìååò ñèíòàêñèñ: |
|
<òèï_ïåðåìåííîé> <èìÿ_ïåðåìåííîé> = FROM <èìÿ_ôàéëà>; |
|
Âñòðåòèâ ýòó êîìàíäó ïðè êîìïèëÿöèè, êîìïèëÿòîð çàãðóçèò â âûõîäíîé |
ôàéë ñîäåðæèìîå ôàéëà <b>èìÿ_ôàéëà</b>, à <b>èìÿ_ïåðåìåííîé</b> áóäåò èäåíòèôèêàòîðîì |
íà÷àëà çàãðóæåííîãî êîäà. Âîò ïðèìåð èñïîëüçîâàíèÿ ýòîé êîìàíäû èç ôàéëà |
tinydraw.c--: |
|
byte palette[PALSIZE] = FROM "TINYDRAW.PAL"; // buffer for palette |
|
Êîìàíäà <b>EXTRACT</b> èìååò ñèíòàêñèñ: |
|
<òèï_ïåðåìåííîé> <èìÿ_ïåðåìåííîé> = EXTRACT <èìÿ_ôàéëà>, <íà÷àëî>, <äëèíà>; |
|
Âñòðåòèâ ýòó êîìàíäó ïðè êîìïèëÿöèè, êîìïèëÿòîð çàãðóçèò â âûõîäíîé |
ôàéë èç ôàéëà <b>èìÿ_ôàéëà</b> ÷èñëî áàéò ðàâíîå <b>äëèíà</b> ñî ñìåùåíèÿ <b>íà÷àëî</b>, à |
<b>èìÿ_ïåðåìåííîé</b> áóäåò èäåíòèôèêàòîðîì íà÷àëà çàãðóæåííîãî êîäà. Âîò ïðèìåð |
èñïîëüçîâàíèÿ ýòîé êîìàíäû: |
|
byte LIT128 = EXTRACT "8X16.FNT", 16*128, 16; |
byte LIT130 = EXTRACT "8X16.FNT", 16*130, 16; |
<A href="#contents8" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.1> |
9. Îïåðàòîðû. |
|
9.1 Óñëîâíûå èíñòðóêöèè. |
</A></B></FONT><FONT FACE="Courier"> |
|
Óñëîâíûå èíñòðóêöèè, ïðè ïîìîùè êîòîðûõ îñóùåñòâëÿåòñÿ âåòâëåíèå, òàêèå |
æå êàê â C. |
|
C-- èìååò äâå èíñòðóêöèè âåòâëåíèÿ. <b>if è IF</b>. |
|
<b>if</b> äåëàåò áëèçêèé óñëîâíûé ïåðåõîä, à <b>IF</b> äåëàåò êîðîòêèé |
(8-ðàçðÿäíûé) óñëîâíûé ïåðåõîä. <b>IF</b> âûïîëíÿåòñÿ áûñòðåå è ìîæåò ýêîíîìèòü |
äî 3 áàéò â ðàçìåðå êîäà, íî ìîæåò îñóùåñòâëÿòü ïåðåõîäû òîëüêî â ïðåäåëàõ |
127 áàéòîâ êîäà. |
|
Óñëîâíûå èíñòðóêöèè, êàê è â <b>C</b>, ìîãóò ñîïðîâîæäàòüñÿ, êàê îäèíî÷íîé |
êîìàíäîé, òàê è áëîêîì èç íåñêîëüêèõ êîìàíä, çàêëþ÷åííûõ â ôèãóðíûå ñêîáêè |
{ è }. Óñëîâíûå èíñòðóêöèè èìåþò òå æå îãðàíè÷åíèÿ, ÷òî è óñëîâíûå |
âûðàæåíèÿ. |
|
Åñëè çà èíñòðóêöèåé <b>IF</b> ñëåäóåò áîëüøå ÷åì 127 áàéòîâ êîäà, òðàíñëÿòîð |
âûäàñò ñëåäóþùåå ñîîáùåíèå îá îøèáêå: |
|
IF jump distance too far, use if. |
|
Ýòî ìîæíî ïðîñòî èñïðàâèòü, çàìåíèâ â ýòîì ìåñòå èíñòðóêöèþ <b>IF</b> íà <b>if</b>. |
|
Êîìàíäû <b>else è ELSE</b> èñïîëüçóþòñÿ òî÷íî òàê æå, êàê â ÿçûêå <b>C</b>. |
Îòëè÷èå èõ â òîì, ÷òî <b>ELSE</b> èìååò îãðàíè÷åíèå àäðåñà ïåðåõîäà 127 áàéò, |
òàêîå æå êàê <b>IF. else</b> ãåíåðèðóåò êîä íà 1 áàéò äëèííåå, ÷åì <b>ELSE</b>. |
|
Êîìàíäû <b>IF è else</b>, à òàêæå <b>if è ELSE</b> ìîãóò ñâîáîäíî ñìåøèâàòüñÿ |
êàê â ñëåäóþùåì ïðèìåðå: |
|
if( x == 2 ) |
WRITESTR("Two"); |
ELSE{ WRITESTR("not two."); |
printmorestuff(); |
} |
|
Åñëè çà èíñòðóêöèåé <b>ELSE</b> ñëåäóåò áîëüøå ÷åì 127 áàéòîâ êîäà, |
òðàíñëÿòîð âûäàñò ñëåäóþùåå ñîîáùåíèå îá îøèáêå: |
|
ELSE jump distance too far, use else. |
|
Ýòî ìîæíî ïðîñòî èñïðàâèòü, çàìåíèâ â ýòîì ìåñòå èíñòðóêöèþ <b>ELSE</b> íà |
<b>else</b>. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.2> |
9.2 Öèêëû do{} while. |
</A></B></FONT><FONT FACE="Courier"> |
|
 òàêîì öèêëå áëîê êîäà, ñîñòàâëÿþùèé òåëî öèêëà, áóäåò ïîâòîðÿòüñÿ, |
ïîêà óñëîâíîå âûðàæåíèå èìååò çíà÷åíèå <b>èñòèííî</b>. |
|
Èñòèííîñòü óñëîâíîãî âûðàæåíèÿ ïðîâåðÿåòñÿ ïîñëå âûïîëíåíèÿ òåëà öèêëà, |
ïîýòîìó áëîê êîäà áóäåò âûïîëíåí, ïî êðàéíåé ìåðå, îäèí ðàç. |
|
Ïðèìåð <b>do {} while</b> öèêëà, â êîòîðîì òåëî áóäåò èñïîëíåíî ïÿòü ðàç: |
|
count = 0; |
do { |
count++; |
WRITEWORD(count); |
WRITELN(); |
} while (count < 5); |
|
Óñëîâíîå âûðàæåíèå â <b>do {} while</b> èíñòðóêöèè äîëæíî ñîîòâåòñòâîâàòü òåì æå |
ïðàâèëàì, ÷òî è â èíñòðóêöèÿõ <b>IF è if</b>. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.3> |
9.3 Öèêëû loop, LOOPNZ, loopnz. |
</A></B></FONT><FONT FACE="Courier"> |
|
Öèêëû <b>loop</b> ïîâòîðÿþò áëîê êîäà, ïîêà îïðåäåëåííàÿ ïåðåìåííàÿ èëè |
ðåãèñòð, âûïîëíÿþùèå ðîëü ñ÷åò÷èêà öèêëà, ñîäåðæàò çíà÷åíèå, îòëè÷íîå îò |
íóëÿ. Â êîíöå âûïîëíåíèÿ áëîêà êîäà, ñîñòàâëÿþùåãî òåëî öèêëà, óêàçàííàÿ |
ïåðåìåííàÿ èëè ðåãèñòð - óìåíüøàåòñÿ íà 1, à çàòåì ïðîâåðÿåòñÿ íà ðàâåíñòâî |
íóëþ. Åñëè ïåðåìåííàÿ (èëè ðåãèñòð) íå ðàâíà íóëþ, òåëî öèêëà áóäåò |
âûïîëíåíî ñíîâà, è ïðîöåññ ïîâòîðèòñÿ. |
|
Ïðèìåð èñïîëüçîâàíèÿ öèêëà <b>loop</b> â êîòîðîì â êà÷åñòâå ñ÷åò÷èêà öèêëà |
èñïîëüçîâàíà ïåðåìåííàÿ: |
|
count = 5; |
loop( count ) |
{WRITEWORD(count); |
WRITELN(); |
} |
|
Íàèáîëüøèé ýôôåêò äàåò èñïîëüçîâàíèå ðåãèñòðà CX äëÿ öèêëîâ ñ íåáîëüøèì |
òåëîì, ïîñêîëüêó â ýòîì ñëó÷àå êîìïèëÿòîðîì ãåíåðèðóåòñÿ öèêë ñ ïðèìåíåíèåì |
ìàøèííîé êîìàíäû <b>LOOP</b>. |
|
Åñëè ïåðåä ñòàðòîì ñ÷åò÷èê öèêëîâ ñîäåðæèò íóëåâîå çíà÷åíèå, êîìàíäû |
òåëà öèêëà áóäóò âûïîëíåíû ìàêñèìàëüíîå ÷èñëî ðàç äëÿ äèàïàçîíà ïåðåìåííîé |
(256 ðàç äëÿ 8-áèòíîãî ñ÷åò÷èêà (ïåðåìåííîé òèïà <b>byte</b> èëè <b>char</b>), 65536 äëÿ |
16-áèòíîãî ñ÷åò÷èêà (ïåðåìåííîé òèïà <b>word</b> èëè <b>int</b>), è 4294967296 äëÿ |
32-áèòíîãî ñ÷åò÷èêà (ïåðåìåííîé òèïà <b>dword</b> èëè <b>long</b>). |
|
 ñëåäóþùåì ïðèìåðå öèêë áóäåò âûïîëíåí 256 ðàç: |
|
BH = 0; |
loop (BH) |
{ |
} |
|
Åñëè â êîìàíäå íå óêàçàíî íèêàêîãî ñ÷åò÷èêà öèêëà, öèêë áóäåò |
ïðîäîëæàòüñÿ áåñêîíå÷íî. |
|
Ñëåäóþùèé ïðèìåð áóäåò íåïðåðûâíî âûâîäèòü ñèìâîë çâåçäî÷êè (*) íà |
ýêðàí: |
|
loop() |
WRITE('*'); |
|
Ïðîãðàììèñò, åñëè õî÷åò, ìîæåò èñïîëüçîâàòü èëè èçìåíÿòü çíà÷åíèå |
ïåðåìåííîé ñ÷åò÷èêà öèêëà âíóòðè öèêëà. |
|
Íàïðèìåð, ñëåäóþùèé öèêë âûïîëíèòñÿ òîëüêî 3 ðàçà: |
|
CX = 1000; |
loop( CX ) |
{ |
IF( CX > 3 ) |
CX = 3; |
} |
|
Öèêë ìîæíî òàêæå ïðåðâàòü îïåðàòîðîì ðàçðûâà <b>BREAK</b> èëè <b>break</b>. Âîò |
òîò æå ïðèìåð ñ èñïîëüçîâàíèåì <b>BREAK</b>: |
|
CX = 1000; |
loop( CX ) |
{ |
IF( CX > 3 ) |
BREAK; |
} |
|
Öèêëû <b>LOOPNZ/loopnz</b> îòëè÷àþòñÿ îò öèêëà <b>loop</b>, òåì, ÷òî ïåðåä âõîäîì |
â öèêë ïðîâåðÿåòñÿ ðàâåíñòâî íóëþ àðãóìåíòà öèêëà. Åñëè àðãóìåíò ðàâåí |
íóëþ, òî òåëî öèêëà íè ðàçó íå âûïîëíèòñÿ (â öèêëå <b>loop</b> â ýòîì ñëó÷àå |
òåëî öèêëà âûïîëíèòñÿ ìàêñèìàëüíîå ÷èñëî ðàç). Öèêë <b>LOOPNZ</b> ïîëó÷àåòñÿ |
ìàêñèìàëüíî ýôôåêòèâíûì ïðè îïòèìèçàöèè íà ðàçìåð êîäà, åñëè â êà÷åñòâå |
ïàðàìåòðà-ñ÷åò÷èêà èñïîëüçóåòñÿ ðåãèñòð <b>CX/ECX</b>. Ïðè ýòîì êîìïèëÿòîð |
èñïîëüçóåò àññåìáëåðíûå èíñòðóêöèè <b>JCXZ/JECXZ è LOOP</b>. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.4> |
9.4 Öèêë while, WHILE. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñèíòàêñèñ: |
while(<âûðàæåíèå>) |
<îïåðàòîð> |
|
Öèêë âûïîëíÿåòñÿ äî òåõ ïîð, ïîêà çíà÷åíèå <b>âûðàæåíèÿ</b> íå ñòàíåò |
ëîæíûì. Âíà÷àëå âû÷èñëÿåòñÿ <b>âûðàæåíèå</b>. Åñëè <b>âûðàæåíèå</b> èçíà÷àëüíî ëîæíî, |
òî òåëî îïåðàòîðà <b>while</b> âîîáùå íå âûïîëíÿåòñÿ è óïðàâëåíèå ñðàçó |
ïåðåäàåòñÿ íà ñëåäóþùèé îïåðàòîð ïðîãðàììû. |
|
Öèêë <b>WHILE</b> àíàëîãè÷åí öèêëó <b>while</b>, íî ïðè ýòîì ãåíåðèðóåòñÿ êîä íà |
3 áàéòà êîðî÷å. Ðàçìåð ñãåíåðèðîâàííîãî êîäà â öèêëå <b>WHILE</b> äîëæåí áûòü |
ìåíüøå 127 áàéò. |
|
Ïðèìåðû: |
while ( i < 20 ){ |
WRITEWORD(i); |
i++; |
} |
|
WHILE (i < 20 ) @WRITEWORD(i); //öèêë ëèáî áóäåò áåñêîíå÷íûì ëèáî íå |
//âûïîëíèòñÿ íè ðàçó |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.5> |
9.5 Öèêë for, FOR. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñèíòàêñèñ: |
for ([<íà÷àëüíîå âûðàæåíèå>]; [<óñëîâèå>]; [<ïðèðàùåíèå>]) |
<îïåðàòîð> |
|
Öèêë <b>for</b> âûïîëíÿåòñÿ äî òåõ ïîð, ïîêà çíà÷åíèå <b>óñëîâèÿ</b> íå ñòàíåò |
ëîæíûì. Åñëè <b>óñëîâèå</b> èçíà÷àëüíî ëîæíî, òî òåëî îïåðàòîðà <b>for</b> âîîáùå íå |
âûïîëíÿåòñÿ è óïðàâëåíèå ñðàçó ïåðåäàåòñÿ íà ñëåäóþùèé îïåðàòîð ïðîãðàììû. |
<b>Íà÷àëüíîå âûðàæåíèå</b> è <b>ïðèðàùåíèå</b> îáû÷íî èñïîëüçóþòñÿ äëÿ èíèöèàëèçàöèè |
è ìîäèôèêàöèè ïàðàìåòðîâ öèêëà. |
|
Ïåðâûì øàãîì ïðè âûïîëíåíèè <b>for</b> ÿâëÿåòñÿ âû÷èñëåíèå <b>íà÷àëüíîãî |
âûðàæåíèÿ</b>, åñëè îíî èìååòñÿ. Çàòåì âû÷èñëÿåòñÿ <b>óñëîâèå</b> è ïðîèçâîäèòñÿ |
åãî îöåíêà ñëåäóþùèì îáðàçîì: |
|
1) Åñëè <b>óñëîâèå</b> èñòèííî, òî âûïîëíÿåòñÿ òåëî îïåðàòîðà. Çàòåì |
âû÷èñëÿåòñÿ <b>ïðèðàùåíèå</b> (åñëè îíî åñòü), è ïðîöåññ ïîâòîðÿåòñÿ. |
|
2) Åñëè <b>óñëîâèå</b> îïóùåíî, òî åãî çíà÷åíèå ïðèíèìàåòñÿ çà èñòèíó.  |
ýòîì ñëó÷àå öèêë for ïðåäñòàâëÿåò áåñêîíå÷íûé öèêë, êîòîðûé ìîæåò |
çàâåðøèòüñÿ òîëüêî ïðè âûïîëíåíèè â åãî òåëå îïåðàòîðîâ <b>break, goto, |
return</b>. |
|
3) Åñëè <b>óñëîâèå</b> ëîæíî, òî âûïîëíåíèå öèêëà <b>for</b> çàêàí÷èâàåòñÿ è |
óïðàâëåíèå ïåðåäàåòñÿ ñëåäóþùåìó îïåðàòîðó. |
|
Öèêë <b>FOR</b> àíàëîãè÷åí öèêëó <b>for</b>, íî ïðè ýòîì ãåíåðèðóåòñÿ êîä íà 3 |
áàéòà êîðî÷å. Ðàçìåð ñãåíåðèðîâàííîãî êîäà â öèêëå <b>FOR</b> äîëæåí áûòü ìåíüøå |
127 áàéò. |
|
Ïðèìåðû: |
for(i=0;i<5;i++){ |
WRITESTR("ÑÒÐÎÊÀ "); |
WRITEWORD(i); |
WRITELN(); |
} |
|
×èñëî <b>íà÷àëüíûõ âûðàæåíèé</b> è ÷èñëî <b>ïðèðàùåíèé</b> íå îãðàíè÷åíî. Êàæäûé |
îïåðàòîð â <b>íà÷àëüíûõ âûðàæåíèÿõ</b> è <b>ïðèðàùåíèÿõ</b> äîëæåí ðàçäåëÿòüñÿ |
çàïÿòîé. Ïðèìåð: |
|
for ( a=1, b=2 ; a<5 ; a++, b+=a ) {... |
|
Òàêæå åñòü âîçìîæíîñòü ëîãè÷åñêîãî îáúåäèíåíèÿ <b>óñëîâèé</b>. Îáúåäèíÿòü |
ìîæíî äî 32 óñëîâèé. Êàæäîå îáúåäèíÿåìîå óñëîâèå äîëæíî áûòü çàêëþ÷åíî â |
ñêîáêè. Ïðèìåð: |
|
for ( a=0 ; (a>=0) && (a<10) ; a++ ){... |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.6> |
9.6 Îïåðàòîð ïåðåêëþ÷àòåëü switch. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñèíòàêñèñ: |
switch(<âûðàæåíèå>){ |
case <êîíñòàíòà>: |
<îïåðàòîð> |
... |
case <êîíñòàíòà>: |
<îïåðàòîð> |
... |
... |
default: |
<îïåðàòîð> |
} |
Îïåðàòîð ïåðåêëþ÷àòåëü <b>switch</b> ïðåäíàçíà÷åí äëÿ âûáîðà îäíîãî èç |
íåñêîëüêèõ àëüòåðíàòèâíûõ ïóòåé âûïîëíåíèÿ ïðîãðàììû. Âûïîëíåíèå íà÷èíàåòñÿ |
ñ âû÷èñëåíèÿ çíà÷åíèÿ <b>âûðàæåíèÿ</b>. Ïîñëå ýòîãî óïðàâëåíèå ïåðåäàåòñÿ îäíîìó |
èç <b>îïåðàòîðîâ</b> òåëà ïåðåêëþ÷àòåëÿ.  òåëå ïåðåêëþ÷àòåëÿ ñîäåðæàòñÿ |
êîíñòðóêöèè: <b>case êîíñòàíòà:</b>, êîòîðûå ñèíòàêñè÷åñêè ïðåäñòàâëÿþò ñîáîé |
ìåòêè îïåðàòîðîâ. Îïåðàòîð, ïîëó÷àþùèé óïðàâëåíèå, - ýòî òîò îïåðàòîð, |
çíà÷åíèå êîíñòàíòû êîòîðîãî ñîâïàäàþò ñî çíà÷åíèåì <b>âûðàæåíèÿ</b> |
ïåðåêëþ÷àòåëÿ. Çíà÷åíèå <b>êîíñòàíòû</b> äîëæíî áûòü óíèêàëüíûì. |
|
Âûïîëíåíèå òåëà îïåðàòîðà-ïåðåêëþ÷àòåëÿ <b>switch</b> íà÷èíàåòñÿ ñ âûáðàííîãî |
òàêèì îáðàçîì îïåðàòîðà, è ïðîäîëæàåòñÿ äî êîíöà òåëà èëè äî òåõ ïîð, ïîêà |
êàêîé-ëèáî îïåðàòîð íå ïåðåäàñò óïðàâëåíèå çà ïðåäåëû òåëà. |
|
Îïåðàòîð, ñëåäóþùèé çà êëþ÷åâûì ñëîâîì <b>default</b>, âûïîëíÿåòñÿ, åñëè íè |
îäíà èç êîíñòàíò íå ðàâíà çíà÷åíèþ <b>âûðàæåíèÿ</b>. Åñëè <b>default</b> îïóùåíî, òî |
íè îäèí îïåðàòîð â òåëå ïåðåêëþ÷àòåëÿ íå âûïîëíÿåòñÿ, è óïðàâëåíèå |
ïåðåäàåòñÿ íà îïåðàòîð, ñëåäóþùèé çà <b>switch</b>. |
|
Äëÿ âûõîäà èç òåëà ïåðåêëþ÷àòåëÿ îáû÷íî èñïîëüçóåòñÿ îïåðàòîð ðàçðûâà |
<b>break (BREAK)</b>. |
|
Ïðèìåð: |
switch (i){ |
case 'A': |
WRITE(i); |
i++; |
BREAK; |
case 32: |
WRITE('_'); |
i++; |
BREAK; |
default: |
WRITE('i'); |
} |
|
Îïåðàòîð <b>switch</b> ñåé÷àñ â êîìïèëÿòîðå ìîæåò ðåàëèçîâûâàòüñÿ òðåì |
ñïîñîáàìè: äâóõòàáëè÷íûì, òàáëè÷íûì è ìåòîäîì ïîñëåäîâàòåëüíûõ ïðîâåðîê. |
|
Òàáëè÷íûé ìåòîä ÿâëÿåòñÿ ñàìûì áûñòðûì, à ïðè áîëüøîì ÷èñëå îïåðàòîðîâ |
<b>case</b> è ïðè íåçíà÷èòåëüíîé ðàçíèöå ìåæäó ìàêñèìàëüíûì è ìèíèìàëüíûì |
çíà÷åíèÿìè <b>case</b> îí åùå ìîæåò áûòü è áîëåå êîìïàêòíûì. Íî ó íåãî åñòü è |
íåäîñòàòêè: â 16-áèòíîì ðåæèìå êîìïèëÿòîð âñåãäà èñïîëüçóåò ðåãèñòð BX, à â |
32-áèòíîì ðåæèìå, åñëè îïåðàíäîì <b>switch</b> ÿâëÿåòñÿ ðåãèñòð, òî åãî çíà÷åíèå |
áóäåò ðàçðóøåíî. |
|
 ìåòîäå ïîñëåäîâàòåëüíûõ ïðîâåðîê áëîê ñðàâíåíèé íàõîäèòñÿ â íà÷àëå |
òåëà îïåðàòîðà <b>switch</b>, ýòî ïîçâîëÿåò èçáàâèòüñÿ îò 1-2 ëèøíèõ <b>jmp</b>. Íî |
êîìïèëÿòîð íå ìîæåò îïðåäåëèòü, êàêîé òèï ïåðåõîäà èñïîëüçîâàòü ïðè |
ïðîâåðêå çíà÷åíèé <b>case</b>. Ýòî áóäåò Âàøåé çàáîòîé. Åñëè ðàçìåð êîäà îò |
íà÷àëà òåëà îïåðàòîðà <b>switch</b> äî ìåñòà ðàñïîëîæåíèÿ îïåðàòîðà <b>case</b> |
ìåíüøå 128 áàéò, ìîæíî èñïîëüçîâàòü êîðîòêèé ïåðåõîä.  ýòîì ñëó÷àå Âû |
ìîæåòå óêàçàòü îïåðàòîð <b>CASE</b>, ÷òî ïðèâåäåò ê ãåíåðàöèè áîëåå êîìïàêòíîãî |
êîäà. Êîìïèëÿòîð â ïðåäóïðåæäåíèÿõ áóäåò Âàì ïîäñêàçûâàòü î âîçìîæíîñòè |
èñïîëüçîâàíèÿ îïåðàòîðîâ <b>CASE</b>. Èñïîëüçîâàíèå îïåðàòîðà <b>CASE</b> â ñëó÷àÿõ, |
êîãäà ðàçìåð áëîêà êîäà áîëåå 128 áàéò ïðèâåäåò ê âûäà÷å êîìïèëÿòîðîì |
ñîîáùåíèÿ îá îøèáêå. |
|
Ïðè äâóõòàáëè÷íîì ìåòîäå ñîçäàþòñÿ äâå òàáëèöû - òàáëèöà àäðåñîâ âõîäà â |
òåëî îïåðàòîðà <b>switch/SWITCH</b> è òàáëèöà çíà÷åíèé <b>case</b>. Ãåíåðèðóåòñÿ |
ïðîöåäóðà ñðàâíåíèÿ âõîäíîãî çíà÷åíèÿ ñî çíà÷åíèÿìè âî âòîðîé òàáëèöå. Åñëè |
åñòü ñîâïàäåíèå, òî äåëàåòñÿ ïåðåõîä ïî àäðåñó èç âòîðîé òàáëèöû. Ýòîò |
ìåòîä ÿâëÿåòñÿ ñàìûì ìåäëåííûì, íî ïðè áîëüøîì ÷èñëå çíà÷åíèé <b>case</b> (áîëåå |
15) îí ñòàíîâèòñÿ ñàìûì êîìïàêòíûì. |
|
Ïðè îïòèìèçàöèè êîäà íà ðàçìåð, êîìïèëÿòîð ïðåäâàðèòåëüíî âû÷èñëÿåò |
ðàçìåð êîäà, êîòîðûé ìîæåò áûòü ïîëó÷åí âñåìè ìåòîäàìè è ðåàëèçóåò ñàìûé |
êîìïàêòíûé. Ïðè îïòèìèçàöèè íà ñêîðîñòü ïðåèìóùåñòâî îòäàåòñÿ òàáëè÷íîìó |
ìåòîäó, åñëè ðàçìåð òàáëèöû ïîëó÷àåòñÿ íå ñëèøêîì áîëüøèì. |
|
Äëÿ îïåðàòîðà <b>switch</b> ââåäåíà òàêæå è êîðîòêàÿ åãî ôîðìà - <b>SWITCH</b>. |
Åå ìîæíî ïðèìåíÿòü â ñëó÷àå, åñëè ðàçìåð áëîêà êîäà ìåæäó íà÷àëîì òåëà |
îïåðàòîðà è îïåðàòîðîì <b>default</b> (åñëè îí îòñóòñòâóåò, òî êîíöîì òåëà |
îïåðàòîðà <b>switch</b>) ìåíüøå 128 áàéò. Î âîçìîæíîñòè èñïîëüçîâàíèÿ êîðîòêîé |
ôîðìû êîìïèëÿòîð áóäåò ñîîáùàòü â ïðåäóïðåæäåíèÿõ. |
|
Äëÿ îïåðàòîðà <b>case/CASE</b>, êîòîðûé ìîæåò èñïîëüçîâàòüñÿ òîëüêî â òåëå |
áëîêà îïåðàòîðà <b>switch/SWITCH</b>, ìîæíî óêàçûâàòü äèàïàçîí çíà÷åíèé. Ñíà÷àëà |
íàäî óêàçûâàòü ìåíüøåå çíà÷åíèå, çàòåì ïîñëå ìíîãîòî÷èÿ áîëüøåå. Ïðèìåð: |
|
switch(AX){ |
case 1...5: |
WRITESTR("Range AX from 1 to 5"); |
BREAK; |
}; |
|
Ðàíüøå Âàì áû ïðèøëîñü ïèñàòü áîëåå ãðîìîçäêóþ êîíñòðóêöèþ: |
|
switch(AX){ |
case 1: |
case 2: |
case 3: |
case 4: |
case 5: |
WRITESTR("Range AX from 1 to 5"); |
BREAK; |
}; |
|
Êðîìå òîãî, ÷òî íîâûé ôîðìàò çàïèñè áîëåå êîìïàêòåí è áîëåå ÷èòàáåëåí, |
íî åùå ïðè ýòîì êîìïèëÿòîð ñîçäàåò áîëåå êîìïàêòíûé è áûñòðûé êîä. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.7> |
9.7 Îïåðàòîð ïåðåõîäà goto, GOTO. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñèíòàêñèñ: |
goto <ìåòêà>; |
. |
. |
. |
<ìåòêà>: |
|
Îïåðàòîð ïåðåõîäà <b>goto</b> ïåðåäàåò óïðàâëåíèå íà <b>îïåðàòîð</b> ïîìå÷åííûé |
<b>ìåòêîé</b>. Àíàëîãîì â àññåìáëåðå îïåðàòîðó goto ÿâëÿåòñÿ êîìàíäà <b>jmp near</b>. |
Àíàëîãîì â àññåìáëåðå îïåðàòîðó <b>GOTO</b> ÿâëÿåòñÿ êîìàíäà <b>jmp short</b>. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.8> |
9.8 Îïåðàòîð ðàçðûâà break, BREAK. |
</A></B></FONT><FONT FACE="Courier"> |
|
Îïåðàòîð ðàçðûâà <b>break</b> ïðåðûâàåò âûïîëíåíèå îïåðàòîðîâ <b>do-while, |
for, switch, while, loop, loopnz, LOOPNZ</b>. Îí ìîæåò ñîäåðæàòüñÿ |
òîëüêî â òåëå ýòèõ îïåðàòîðîâ. Óïðàâëåíèå ïåðåäàåòñÿ îïåðàòîðó, ñëåäóþùåìó |
çà ïðåðâàííûì öèêëîì. |
|
Îïåðàòîð <b>BREAK</b> àíàëîãè÷åí <b>break</b>, íî ïðè ýòîì ãåíåðèðóåòñÿ êîä íà 1 |
áàéò êîðî÷å. Ðàçìåð ñãåíåðèðîâàííîãî êîäà îò ìåñòà ãäå ïðèìåíÿåòñÿ <b>BREAK</b> |
äî êîíöà öèêëà äîëæåí áûòü ìåíüøå 127 áàéò. |
|
Ïðèìåðû: |
FOR (i=0; ; i++){ |
FOR(j=0; j < WIDTH; j++){ |
IF(i==5)BREAK; |
} |
IF(i==10)BREAK; |
} |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.9> |
9.9 Îïåðàòîð ïðîäîëæåíèÿ continue, CONTINUE. |
</A></B></FONT><FONT FACE="Courier"> |
|
Îïåðàòîð ïðîäîëæåíèÿ <b>continue</b> ïåðåäàåò óïðàâëåíèå íà ñëåäóþùóþ |
èòåðàöèþ â öèêëàõ <b>do-while, for, while, loop, loopnz</b>. Â öèêëàõ |
<b>do-while, while, loop</b> ñëåäóþùàÿ èòåðàöèÿ íà÷èíàåòñÿ ñ âû÷èñëåíèÿ |
óñëîâíîãî âûðàæåíèÿ. Äëÿ öèêëà <b>for</b> ñëåäóþùàÿ èòåðàöèÿ íà÷èíàåòñÿ ñ |
âû÷èñëåíèÿ âûðàæåíèÿ ïðèðàùåíèÿ, à çàòåì ïðîèñõîäèò âû÷èñëåíèå óñëîâíîãî |
âûðàæåíèÿ. |
|
Îïåðàòîð <b>CONTINUE</b> àíàëîãè÷åí <b>continue</b>, íî ïðè ýòîì ãåíåðèðóåòñÿ êîä íà |
1 áàéò êîðî÷å. Ðàçìåð ñãåíåðèðîâàííîãî êîäà îò ìåñòà ãäå ïðèìåíÿåòñÿ |
<b>CONTINUE</b> äî íà÷àëà èòåðàöèè äîëæåí áûòü ìåíüøå 127 áàéò. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.10> |
9.10 Ëîãè÷åñêîå îáúåäèíåíèå óñëîâèé. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñóùåñòâóåò âîçìîæíîñòü ëîãè÷åñêîãî îáúåäèíåíèÿ ñðàâíåíèé â óñëîâèÿõ |
<b>IF è if</b>, öèêëàõ <b>do{}while, while{}, WHILE{}, for{} è FOR{}</b>. |
Êàæäîå ñðàâíåíèå ïðè èõ ëîãè÷åñêîì îáúåäèíåíèè äîëæíî áûòü çàêëþ÷åíî â |
ñêîáêè. Îáúåäèíÿòü ìîæíî íå áîëåå 32 ñðàâíåíèé. |
|
 îòëè÷èå îò <b>C</b> â C-- àíàëèç ëîãè÷åñêèõ îáúåäèíåíèé ïðîèñõîäèò ñëåâà |
íàïðàâî è âñå ëèøíèå ñêîáêè áóäóò âîñïðèíÿòû êîìïèëÿòîðîì êàê îøèáî÷íûå. |
Ýòî íåñêîëüêî ñíèæàåò ãèáêîñòü è âîçìîæíîñòè ïðèìåíåíèÿ ýòèõ îáúåäèíåíèé, |
íî òàêîâà òðàäèöèÿ è ôèëîñîôèÿ, çàëîæåííàÿ â C--. |
|
Ïðèìåð: |
|
if ( (a>3) && (b>4) || (c<8) ){ |
|
Ò.å. åñëè ïðîèçâåñòè ðàñøèôðîâêó ýòîãî óñëîâèÿ, òî ïîëó÷èòñÿ ñëåäóþùåå: |
óñëîâèå âûïîëíèòñÿ åñëè a>3 è b>4 èëè a>3 è c<8. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.11> |
9.11 Ïåðåõîä ÷åðåç öèêëû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Äëÿ îïåðàòîðîâ <b>BREAK, break, CONTINUE, continue</b> ââåäåíà |
ïîääåðæêà ÷èñëîâîãî ïàðàìåòðà, îïðåäåëÿþùåãî, ñêîëüêî öèêëîâ íàäî |
ïðîïóñòèòü, ïðåæäå ÷åì áóäåò âûïîëíåí ýòîò îïåðàòîð. Íàïðèìåð, ìû èìååì òðè |
âëîæåííûõ öèêëà: |
|
do{ |
loop(CX){ |
for(BX=0;BX<10;BX++){ |
break; //ñòàíäàðòíûé îïåðàòîð |
break 0; //break ñ ïàðàìåòðîì - ïðîïóñòèòü 0 öèêëîâ |
break 1; //break ñ ïàðàìåòðîì - ïðîïóñòèòü 1 öèêë |
break 2; //break ñ ïàðàìåòðîì - ïðîïóñòèòü 2 öèêëà |
} |
LABL0: |
} |
LABL1: |
}while (DX!=0); |
LABL2: |
|
 òðåòüåì öèêëå íàõîäèòñÿ ãðóïïà ðàçëè÷íûõ âàðèàíòîâ îïåðàòîðà <b>break</b>. |
Ïåðâûì ñòîèò ñòàíäàðòíûé îïåðàòîð <b>break</b>, ïðè âûïîëíåíèè êîòîðîãî |
óïðàâëåíèå áóäåò ïåðåäàâàòüñÿ çà ïðåäåëû òðåòüåãî öèêëà - íà ìåòêó <b>LABL0</b>. |
Âòîðûì èäåò îïåðàòîð <b>break 0</b>, ïðè âûïîëíåíèè êîòîðîãî áóäåò ïðîïóùåíî 0 |
öèêëîâ è óïðàâëåíèå áóäåò ïåðåäàíî îïÿòü æå íà ìåòêó <b>LABL0</b>. Òàêèì |
îáðàçîì, çàïèñü <b>break è break 0</b> ÿâëÿþòñÿ ñèíîíèìàìè. Òðåòüèì èäåò |
îïåðàòîð <b>break 1</b>, ïðè âûïîëíåíèè êîòîðîãî áóäåò ïðîïóùåí îäèí öèêë è |
óïðàâëåíèå áóäåò ïåðåäàíî çà ïðåäåëû âòîðîãî öèêëà íà ìåòêó <b>LABL1</b>. Íó è |
íàêîíåö, ïîñëåäíèì èäåò îïåðàòîð <b>break 2</b>, ïðè âûïîëíåíèè êîòîðîãî |
êîìïèëÿòîð ïðîïóñòèò äâà öèêëà è ïåðåäàñò óïðàâëåíèå çà ïðåäåëû òðåòüåãî, |
íà ìåòêó <b>LABL2</b>. Ìåòêè â ýòîì ïðèìåðå ïðîñòàâëåíû äëÿ óäîáñòâà îáúÿñíåíèÿ. |
Íó è ÿ íàäåþñü, Âàì ïîíÿòíî, ÷òî çíà÷åíèå ïàðàìåòðà íå ìîæåò ïðåâûøàòü |
÷èñëà öèêëîâ íàõîäÿùèõñÿ ïåðåä òåêóùèì. Òàê äëÿ îäèíî÷íîãî öèêëà ýòîò |
ïàðàìåòð ìîæåò ïðèíèìàòü ìàêñèìàëüíîå è åäèíñòâåííîå çíà÷åíèå - 0. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.12> |
9.12 Èíâåðòèðîâàíèå ôëàãà ïðîâåðêè óñëîâèé. |
</A></B></FONT><FONT FACE="Courier"> |
|
Èíâåðòèðîâàíèå ôëàãà ïðîâåðêè óñëîâèé â îïåðàöèÿõ ñðàâíåíèÿ <b>if/IF |
for/FOR while/WHILE</b> ïðîèñõîäèò ñ ïîìîùüþ ñèìâîëà <b>! - not</b>. |
|
Âûðàæåíè |
|
IF ( NOTCARRYFLAG )... è IF ( ! CARRYFLAG )... |
IF ( proc() == 0 )... è IF ( ! proc() ) ... |
|
ÿâëÿþòñÿ ñèíîíèìàìè. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.13> |
9.13 Âû÷èñëåíèå âûðàæåíèÿ, à çàòåì ïðîâåðêà óñëîâèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
 îïåðàöèÿõ ñðàâíåíèÿ â ëåâîì îïåðàíäå òåïåðü äîïóñòèìî èñïîëüçîâàòü |
âû÷èñëåíèÿ âûðàæåíèÿ ñ ïðèñâàèâàíèåì è îïåðàöèè èíêðåìåíòà, äåêðåìåíòà. |
Íàïðèìåð: |
|
IF (i=a+2 != 0 )... |
IF ( i++ )... |
IF ( a-- )... |
IF ( i+=4 == 0 )... |
|
Âî âñåõ ýòèõ ïðèìåðàõ ñíà÷àëà ïðîèçîéäåò âû÷èñëåíèå âûðàæåíèÿ â ëåâîé |
÷àñòè îïåðàöèè ñðàâíåíèÿ, à ïîòîì áóäåò ïðîèçâåäåíî ñðàâíåíèå ðåçóëüòàòà ñ |
ïðàâîé ÷àñòüþ âûðàæåíèÿ ñðàâíåíèÿ. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.14> |
9.14 Ïðîâåðêà áèòîâ ïðè îïåðàöèè ñðàâíåíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Åñëè â ëåâîé ÷àñòè âûðàæåíèÿ ñðàâíåíèÿ íàïèñàíî: BX & 5, òî ïðè |
âû÷èñëåíèè âûðàæåíèÿ ñîäåðæèìîå ðåãèñòðà BX áóäåò èçìåíåíî èíñòðóêöèåé |
<b>and</b>. Íî èíîãäà âîçíèêàåò íåîáõîäèìîñòü â ïðîâåðêå áèòîâ áåç èçìåíåíèÿ |
ñîäåðæèìîãî ðåãèñòðà BX. Äëÿ ýòèõ öåëåé íàäî èñïîëüçîâàòü èíñòðóêöèþ |
<b>test</b>. Êàê æå óêàçàòü êîìïèëÿòîðó, â êàêèõ ñèòóàöèÿõ èñïîëüçîâàòü |
èíñòðóêöèþ <b>and</b>, à â êàêèõ <b>test</b>? Â ñòàíäàðòíûõ ÿçûêàõ <b>C</b> äëÿ ýòîãî |
èñïîëüçóåòñÿ ìåõàíèçì ïðèîðèòåòîâ - åñëè âûðàæåíèå çàêëþ÷åíî â ñêîáêè, òî |
ïðîèçâîäèòñÿ åãî âû÷èñëåíèå, åñëè íåò, òî ïðîèçâîäèòñÿ ïðîâåðêà. Íî C-- íå |
ïîääåðæèâàåò ïðèîðèòåòîâ. Äëÿ ðàçðåøåíèÿ ýòîé ïðîáëåìû â C-- ðåøåíî |
èñïîëüçîâàòü íåïîñðåäñòâåííî ñàìó èíñòðóêöèþ <b>test</b>. Âîò äîïóñòèìûå |
âàðèàíòû ñèíòàêñèñà: |
|
IF ( $test AX,5 ) |
IF ( ! $test AX,5) |
IF ( asm test AX,5) |
IF ( ! asm { test AX,5 } ) |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.15> |
9.15 Îïåðàòîð ïåðåñòàíîâêè. |
</A></B></FONT><FONT FACE="Courier"> |
|
 C-- åñòü îïåðàòîð, êîòîðûé íå âñòðå÷àåòñÿ â äðóãèõ ÿçûêàõ, ýòî |
îïåðàòîð ïåðåñòàíîâêè. Îïåðàòîð ïåðåñòàíîâêè ìåíÿåò ìåñòàìè ñîäåðæèìîå äâóõ |
ïåðåìåííûõ. Ñèìâîëüíîå îáîçíà÷åíèå ýòîãî îïåðàòîðà ><. Ïåðåìåííûå ñ îáåèõ |
ñòîðîí îïåðàòîðà ïåðåñòàíîâêè äîëæíû èìåòü îäèíàêîâûé ðàçìåð, 8 áèò è 8 |
áèò, 16 áèò è 16 áèò, èëè 32 áèòà è 32 áèòà. |
|
Âîò íåêîòîðûå ïðèìåðû: |
|
AX >< BX; // ñîõðàíÿåò çíà÷åíèå BX â AX è çíà÷åíèå AX â BX |
CH >< BL; // ìåíÿåò ìåñòàìè ñîäåðæèìîå ðåãèñòðîâ CH è BL |
dog >< cat; /* ìåíÿåò ìåñòàìè çíà÷åíèÿ ïåðåìåííîé dog è ïåðåìåííîé cat*/ |
counter >< CX; // ìåíÿåò ìåñòàìè çíà÷åíèÿ ïåðåìåííîé counter |
// è ñîäåðæèìîå ðåãèñòðà CX |
|
Åñëè ïåðåñòàíîâêà îñóùåñòâëÿåòñÿ ìåæäó äâóìÿ 8-ðàçðÿäíûìè ïåðåìåííûìè â |
ïàìÿòè, áóäåò ðàçðóøåíî ñîäåðæèìîå ðåãèñòðà AL. Åñëè ïåðåñòàíîâêà - ìåæäó |
äâóìÿ 16-ðàçðÿäíûìè ïåðåìåííûìè â ïàìÿòè, áóäåò ðàçðóøåíî ñîäåðæèìîå |
ðåãèñòðà AX. Åñëè ïåðåñòàíîâêà - ìåæäó äâóìÿ 32-ðàçðÿäíûìè ïåðåìåííûìè â |
ïàìÿòè, áóäåò ðàçðóøåíî ñîäåðæèìîå EAX.  ëþáîì äðóãîì ñëó÷àå, íàïðèìåð, |
ìåæäó ïåðåìåííîé â ïàìÿòè è ðåãèñòðîì, çíà÷åíèÿ âñåõ ðåãèñòðîâ áóäóò |
ñîõðàíåíû. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.16> |
9.16 Îïåðàòîð îòðèöàíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
C-- ïîääåðæèâàåò áûñòðûé ñèíòàêñèñ ñìåíû çíàêà ïåðåìåííîé - îïåðàòîð |
îòðèöàíèÿ. Ïîñòàâèâ <b>-</b> (çíàê ìèíóñ) ïåðåä èäåíòèôèêàòîðîì ïåðåìåííîé ïàìÿòè |
èëè ðåãèñòðà è <b>;</b> (òî÷êó ñ çàïÿòîé) ïîñëå èäåíòèôèêàòîðà, âû ñìåíèòå çíàê |
ïåðåìåííîé ïàìÿòè èëè ðåãèñòðà. |
|
Âîò íåêîòîðûå ïðèìåðû: |
|
-AX; // ðåçóëüòàò òîò æå, ÷òî è ïðè 'AX = -AX;' ,íî áûñòðåå. |
-tree; // òî æå ñàìîå, ÷òî 'tree = -tree;' ,íî áûñòðåå. |
-BH; // ìåíÿåò çíàê BH. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.17> |
9.17 Îïåðàòîð èíâåðñèè. |
</A></B></FONT><FONT FACE="Courier"> |
|
C-- ïîääåðæèâàåò áûñòðûé ñèíòàêñèñ âûïîëíåíèÿ ëîãè÷åñêîé èíâåðñèè |
çíà÷åíèÿ ïåðåìåííîé - îïåðàòîð èíâåðñèè. Ïîñòàâèâ <b>!</b> (âîñêëèöàòåëüíûé çíàê) |
ïåðåä èäåíòèôèêàòîðîì ïåðåìåííîé ïàìÿòè èëè ðåãèñòðîì è <b>;</b> (òî÷êó ñ |
çàïÿòîé) ïîñëå èäåíòèôèêàòîðà, âû âûïîëíèòå ëîãè÷åñêóþ (âûïîëíèòñÿ |
àññåìáëåðíàÿ êîìàíäà NOT) èíâåðñèþ òåêóùåãî çíà÷åíèÿ ïåðåìåííîé. Âîò |
íåêîòîðûå ïðèìåðû: |
|
!AX; // òî æå ñàìîå, ÷òî ' AX ^ = 0xFFFF; ' íî áûñòðåå. |
!node; // çàìåíÿåò çíà÷åíèå 'node' åãî ëîãè÷åñêîé èíâåðñèåé. |
!CL; // òî æå ñàìîå, ÷òî ' CL ^ = 0xFF ' íî áûñòðåå. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.18> |
9.18 Ñïåöèàëüíûå óñëîâíûå âûðàæåíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
C-- ïîääåðæèâàåò âîñåìü ñïåöèàëüíûõ óñëîâíûõ âûðàæåíèé: |
|
CARRYFLAG |
NOTCARRYFLAG |
OVERFLOW |
NOTOVERFLOW |
ZEROFLAG |
NOTZEROFLAG |
MINUSFLAG |
PLUSFLAG |
|
Îíè ìîãóò èñïîëüçîâàòüñÿ âìåñòî ëþáûõ íîðìàëüíûõ óñëîâíûõ âûðàæåíèé. |
Åñëè Âû æåëàåòå, íàïðèìåð, âûïîëíèòü áëîê êîäà òîëüêî åñëè óñòàíîâëåí ôëàã |
ïåðåíîñà, Âàì ñëåäóåò èñïîëüçîâàòü ñëåäóþùóþ ïîñëåäîâàòåëüíîñòü êîìàíä: |
|
IF( CARRYFLAG ) |
{ |
// çäåñü âû ÷åãî-òî äåëàåòå |
} |
|
Åñëè Âû æåëàåòå íåïðåðûâíî âûïîëíÿòü áëîê êîäà äî òåõ ïîð, ïîêà íå |
óñòàíîâèòñÿ ôëàã ïåðåïîëíåíèÿ, Âàì ñëåäóåò èñïîëüçîâàòü íå÷òî ïîäîáíîå |
ñëåäóþùåìó êóñêó êîäà: |
|
do { |
// çäåñü âû îïÿòü ÷åãî-òî äåëàåòå |
} while( NOTOVERFLOW ); |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.19> |
9.19 Ñèìâîë $ - âñòàâëÿåò òåêóùèé àäðåñ ïðîãðàììû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñèìâîë <b>$</b>, êðîìå òîãî, ÷òî ÿâëÿåòñÿ ïðèçíàêîì ïîñëåäóþùåé àññåìáëåðíîé |
èíñòðóêöèè, â ÿçûêå C--, êàê è â ÿçûêå Assembler ìîæåò óêàçûâàòü òåêóùèé |
àäðåñ (ñìåùåíèå) êîìïèëèðóåìîé ïðîãðàììû. Íî â C-- îí èìåë îãðàíè÷åííûå |
âîçìîæíîñòè. Îí ìîã áûòü èñïîëüçîâàí ëèøü êàê àðãóìåíò â îïåðàòîðàõ |
<b>GOTO/goto</b> è àññåìáëåðíûõ èíñòðóêöèÿõ <b>DW/DD/JMP</b>. |
|
Ýòîò ñèìâîë ìîæåò íàõîäèòüñÿ â ëþáîì ìåñòå âû÷èñëÿåìîãî ÷èñëîâîãî |
âûðàæåíèÿ è ìîæåò áûòü ïðèìåíåí â ëþáîì ìåñòå ñîâìåñòíî ñ äðóãèìè ÷èñëîâûìè |
âûðàæåíèÿìè. |
|
Ïðèìåðû ïðèìåíåíèÿ: |
|
DW #main-$ //çàïèñàòü ðàññòîÿíèå îò ïðîöåäóðû main äî òåêóùåãî ìåñòà |
GOTO $+2; //ïåðåéòè ïî àäðåñó íà 2 áîëüøå, ÷åì òåêóùèé àäðåñ |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.20> |
9.20 Êëþ÷åâîå ñëîâî static è îïåðàòîð ::. |
</A></B></FONT><FONT FACE="Courier"> |
|
Åñëè ïåðåä îáúÿâëåíèåì ãëîáàëüíîé ïåðåìåííîé, ñòðóêòóðû èëè ïðîöåäóðû |
óêàçàòü ñëîâî <b>static</b>, òî ýòè ïåðåìåííàÿ, ñòðóêòóðà èëè ïðîöåäóðà áóäóò |
äîñòóïíû òîëüêî â òîì ôàéëå, â êîòîðîì îíè áûëè îáúÿâëåíû. Ò.å. åñëè Âû |
âêëþ÷èòå ýòîò ôàéë â äðóãîé äèðåêòèâîé <b>include</b>, òî ïåðåìåííûå îáúÿâëåííûå |
âî âêëþ÷àåìîì ôàéëå ñî ñëîâîì <b>static</b> íå áóäóò äîñòóïíû â îñíîâíîì ôàéëå, |
è Âû ìîæåòå â îñíîâíîì ôàéëå îáúÿâèòü äðóãèå ïåðåìåííûå ñ òàêèìè æå |
èìåíàìè. |
|
Åñëè Âû ïðèìåíèòå ñëîâî <b>static</b> ïðè îáúÿâëåíèè ëîêàëüíîé ïåðåìåííîé â |
ïðîöåäóðå, òî ïàìÿòü äëÿ ýòîé ïåðåìåííîé áóäåò âûäåëåíà íå â ñòåêå, à â |
îáëàñòè äàííûõ ïðîöåäóðû. Íî ýòà ïåðåìåííàÿ áóäåò äîñòóïíà òîëüêî âíóòðè |
ïðîöåäóðû, â êîòîðîé îíà áûëà îáúÿâëåíà. Ïðèìåíåíèå <b>static</b> ê ëîêàëüíûì |
ïåðåìåííûì äàåò âîçìîæíîñòü ñîõðàíÿòü çíà÷åíèå ïåðåìåííîé äëÿ ñëåäóþùåãî |
âõîäà â ïðîöåäóðó. |
|
Ñëîâî <b>static</b> ìîæíî ïðèìåíÿòü ê ëþáîìó ãëîáàëüíîìó îáúåêòó |
(ïåðåìåííîé, ñòðóêòóðå, ïðîöåäóðå). Äëÿ ëîêàëüíîãî èñïîëüçîâàíèÿ ýòî ñëîâî |
ìîæíî ïðèìåíÿòü òîëüêî ê ïåðåìåííûì. |
|
Åñëè â Âàøåé ïðîãðàììå åñòü ãëîáàëüíàÿ è ëîêàëüíàÿ ïåðåìåííàÿ ñ |
îäèíàêîâûìè èìåíàìè, òî â ïðîöåäóðå, â êîòîðîé îáúÿâëåíà ýòà ëîêàëüíàÿ |
ïåðåìåííàÿ, Âû íå èìåëè äîñòóïà ê îäíîèìåííîé ãëîáàëüíîé ïåðåìåííîé. |
Ïðèìåíèâ ïåðåä èìåíåì ïåðåìåííîé îïåðàòîð <b>::</b>, Âû ïîëó÷èòå äîñòóï ê |
ãëîáàëüíîé ïåðåìåííîé. Ïðèìåð: |
|
int var; //îáúÿâëÿåì ãëîáàëüíóþ ïåðåìåííóþ |
|
void proc() |
int var; //îáúÿâëÿåì ëîêàëüíóþ ïåðåìåííóþ ñ èìåíåì óæå ñóùåñòâóþùåé |
//ãëîáàëüíîé ïåðåìåííîé |
{ |
(E)AX=var; //èìååì äîñòóï òîëüêî ê ëîêàëüíîé ïåðåìåííîé |
(E)AX=::var; //à òàê ìîæíî ïîëó÷èòü äîñòóï ê ãëîáàëüíîé ïåðåìåííîé |
} |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.21> |
9.21 Îïåðàòîð sizeof. |
</A></B></FONT><FONT FACE="Courier"> |
|
Îïåðàöèÿ <b>sizeof</b> îïðåäåëÿåò ðàçìåð ïàìÿòè, êîòîðûé ñîîòâåòñòâóåò îáúåêòó |
èëè òèïó. Îïåðàöèÿ sizeof èìååò ñëåäóþùèé âèä: |
|
sizeof (<èìÿ òèïà>) |
|
Ðåçóëüòàòîì îïåðàöèè <b>sizeof</b> ÿâëÿåòñÿ ðàçìåð ïàìÿòè â áàéòàõ, |
ñîîòâåòñòâóþùèé çàäàííîìó îáúåêòó èëè òèïó. |
|
 C-- îïåðàòîð <b>sizeof</b> ìîæíî ïðèìåíÿòü ê ïåðåìåííûì, ðåãèñòðàì, òèïàì |
ïåðåìåííûõ, ñòðóêòóðàì, ïðîöåäóðàì, òåêñòîâûì ñòðîêàì è ôàéëàì. |
|
Åñëè îïåðàöèÿ <b>sizeof</b> ïðèìåíÿåòñÿ ê òèïó ñòðóêòóðû, òî ðåçóëüòàòîì |
ÿâëÿåòñÿ ðàçìåð òåãà äàííîé ñòðóêòóðû. |
|
Åñëè îïåðàöèÿ <b>sizeof</b> ïðèìåíÿåòñÿ ê òåêñòîâîé ñòðîêå, òî ðåçóëüòàòîì |
îïåðàöèè ÿâëÿåòñÿ ðàçìåð ñòðîêè ïëþñ çàâåðøàþùèé íóëü. Íàïðèìåð: |
|
sizeof ("Test") |
|
ðåçóëüòàòîì ýòîé îïåðàöèè áóäåò ÷èñëî 5. Åñëè Âû íàïèøèòå òàêóþ |
êîíñòðóêöèþ: |
|
char a="Test"; |
|
sizeof(a) |
|
òî ðåçóëüòàòîì áóäåò 5 - ðàçìåð ïàìÿòè, îòâåäåííûé äëÿ ïåðåìåííîé a. |
|
Ïðè èñïîëüçîâàíèè îïåðàòîðà <b>sizeof</b> ñ èìåíåì ñòðóêòóðû âñòàâëÿåò |
ôàêòè÷åñêèé ðàçìåð ïàìÿòè, çàíèìàåìûé ñòðóêòóðîé. Ýòî îñîáåííî âàæíî, åñëè |
Âû îáúÿâèëè ìàññèâ ñòðóêòóð. |
|
Îïåðàòîð <b>sizeof</b> ìîæíî ïðèìåíÿòü è ê èìåíè îïðåäåëåííîé ðàíåå |
ïðîöåäóðû. Ðåçóëüòàòîì áóäåò ðàçìåð ýòîé ïðîöåäóðû. Íî äëÿ äèíàìè÷åñêèõ |
ïðîöåäóð âñåãäà áóäåò íîëü. |
|
Îïåðàöèþ <b>sizeof</b> ìîæíî ïðèìåíÿòü è ê ôàéëàì. Ýòî áûâàåò î÷åíü ïîëåçíûì |
ïðè èñïîëüçîâàíèè îïåðàòîðà <b>FROM</b>, íî ìîæåò ïðèìåíÿòüñÿ è â äðóãèõ ñëó÷àÿõ. |
Ïðèìåð ïðèìåíåíèÿ îïåðàòîðà <b>sizeof</b> ê ôàéëàì: |
|
sizeof ( file "filename.dat" ) |
|
Ðåçóëüòàòîì ýòîé îïåðàöèè áóäåò ðàçìåð ôàéëà "filename.dat". |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=9.22> |
9.22 Ìåòêè ïåðåõîäà. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ìåòêè ïåðåõîäà ïðèìåíÿþòñÿ äëÿ óêàçàíèÿ íà÷àëüíûõ òî÷åê ó÷àñòêîâ êîäà, |
èñïîëüçóåìûõ êîìàíäàìè ïåðåõîäà âñòðîåííîãî àññåìáëåðà è îïåðàòîðàìè |
<b>goto/GOTO</b>. |
|
Èìåþòñÿ äâà òèïà ìåòîê ïåðåõîäà: ãëîáàëüíûå è ëîêàëüíûå. Ãëîáàëüíûå |
ìåòêè, êàê ñëåäóåò èç íàçâàíèÿ, ýòî ìåòêè, êîòîðûå âèäèìû èç ëþáîãî ìåñòà â |
ïðîãðàììå. Ëîêàëüíûå ìåòêè âèäíû òîëüêî â ïðåäåëàõ ñâîåãî ïðîöåäóðíîãî |
áëîêà, è íå îïðåäåëåíû çà åãî ïðåäåëàìè. |
|
Ìåòêè îïðåäåëÿþòñÿ èäåíòèôèêàòîðîì, îêàí÷èâàþùèìèñÿ äâîåòî÷èåì. Åñëè |
èäåíòèôèêàòîð ñîäåðæèò õîòÿ áû îäèí ñèìâîë ñòðî÷íûõ áóêâ (áóêâ íèæíåãî |
ðåãèñòðà, ìàëåíüêèõ áóêâ), ýòî ãëîáàëüíàÿ ìåòêà ïåðåõîäà, â ïðîòèâíîì |
ñëó÷àå, ýòî ëîêàëüíàÿ ìåòêà ïåðåõîäà. |
|
Ãëîáàëüíûå ìåòêè ïåðåõîäà íå äîëæíû èñïîëüçîâàòüñÿ âíóòðè äèíàìè÷åñêèõ |
ïðîöåäóð; òàì ìîæíî èñïîëüçîâàòü òîëüêî ëîêàëüíûå ìåòêè. Ýòî âàæíî ïîìíèòü, |
ïîñêîëüêó, èç-çà ïðèìåíåíèÿ òàêîãî ñðåäñòâà êàê ìàêðîêîìàíäû, äèíàìè÷åñêàÿ |
ïðîöåäóðà ìîæåò ïðèñóòñòâîâàòü â íåñêîëüêèõ ìåñòàõ êîäà, ÷òî áóäåò |
îçíà÷àòü, ÷òî ìåòêå ñîîòâåòñòâóåò áîëüøå ÷åì îäèí àäðåñ. |
|
Ìåòêè âíå ïðîöåäóð ôàêòè÷åñêè ðàñïîëàãàþòñÿ â îáëàñòè äàííûõ ïðîãðàììû. |
Åñëè äàííûå è êîä íàõîäÿòñÿ â îäíîì ñåãìåíòå (à èìåííî òàê îðãàíèçîâàííà |
ïðîãðàììà, íàïèñàííàÿ íà C--), òî ìåòêè âíå ïðîöåäóð ñòàíîâÿòñÿ ïðîñòûì è |
ýôôåêòèâíûì ìåòîäîì äëÿ ïîëó÷åíèÿ ðàññòîÿíèé ìåæäó ÷àñòÿìè ïðîãðàììû.  |
êà÷åñòâå èìåí äëÿ ìåòîê âíå ïðîöåäóð ìîãóò áûòü èñïîëüçîâàíû óíèêàëüíûå |
èäåíòèôèêàòîðû, â êîòîðûõ ìîæíî èñïîëüçîâàòü áîëüøèå, ìàëåíüêèå è ñìåñü |
áîëüøèõ è ìàëåíüêèõ áóêâ. |
<A href="#contents9" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=10.1> |
10. Àññåìáëåð. |
|
10.1 Ïîääåðæêà êîìàíä àññåìáëåðà. |
</A></B></FONT><FONT FACE="Courier"> |
|
Âñòðîåííûé â C-- àññåìáëåð ïîääåðæèâàåò âñå èíñòðóêöèè 8088/8086, |
80286, 80386, 80486, Pentium, Pentium II è Pentium III ïðîöåññîðîâ. |
|
Âñå èíñòðóêöèè âñòðîåííîãî àññåìáëåðà äîëæíû íà÷èíàòüñÿ ñ ñèìâîëà |
äîëëàðà <b>$</b>. Ïîääåðæèâàåòñÿ òàêæå êëþ÷åâîå ñëîâî <b>asm</b>, êîòîðîå ÿâëÿÿñü |
ñèíîíèìîì ê ñèìâîëó äîëëàðà, åùå è ïîääåðæèâàåò îáúåäèíåíèå àññåìáëåðíûõ |
èíñòðóêöèé â áëîêè. |
<A href="#contents10" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=10.2> |
10.2 Êëþ÷åâîå ñëîâî asm. |
</A></B></FONT><FONT FACE="Courier"> |
|
Êëþ÷åâîå ñëîâî <b>asm</b> ÿâëÿåòñÿ ñèíîíèìîì ê <b>$</b> - ïðåôèêñ àññåìáëåðíîé |
êîìàíäû. Ïîñëå ñëîâà asm ìîæíî ïèñàòü áëîê àññåìáëåðíûõ êîìàíä. Ïðèìåð: |
|
asm { |
. |
. |
push AX |
labl: |
push BX |
mov AX,0x1234 |
jmp short labl |
. |
. |
. |
} |
|
Ìåòêè âíóòðè áëîêà àññåìáëåðíûõ êîìàíä äîïóñòèìû. |
<A href="#contents10" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=10.3> |
10.3 Ïðåôèêñ dup - ïîâòîðåíèå èíñòðóêöèé DB/DW/DD. |
</A></B></FONT><FONT FACE="Courier"> |
|
Äëÿ àññåìáëåðíûõ èíñòðóêöèè <b>DB, DW, DD</b> ââåäåíà âîçìîæíîñòü èñïîëüçîâàòü |
ïðåôèêñ ïîâòîðåíèé <b>dup</b>. Ïðèìåíåíèå ýòîãî ïðåôèêñà èìååò ñëåäóþùèé |
ñèíòàêñèñ: |
|
$DW NUMREP dup VALTOREP |
|
NUMREP - ÷èñëî ïîâòîðîâ èíñòðóêöèè DW. |
VALTOREP - âåëè÷èíà, êîòîðàÿ áóäåò ïîâòîðåíà NUMREP ðàç. |
|
 îòëè÷èå îò àíàëîãà ýòîãî ïðåôèêñà èç àññåìáëåðà ïîâòîðÿåìóþ âåëè÷èíó |
çàêëþ÷àòü â ñêîáêè íåëüçÿ. |
<A href="#contents10" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=10.4> |
10.4 Èíñòðóêöèè ïðîöåññîðà Pentium III. |
</A></B></FONT><FONT FACE="Courier"> |
|
 êîìïèëÿòîð äîáàâëåíà ïîääåðæêà 19 íîâûõ èíñòðóêöèé MMX ðàñøèðåíèÿ |
|
MASKMOVQ mmx,mmx |
MOVNTQ m64,mmx |
PAVGB mmx,mmx/m64 |
PAVGW mmx,mmx/m64 |
PEXTRW r32,mmx,i8 |
PINSRW mmx,r32/m16,i8 |
PMAXUB mmx,mmx/m64 |
PMAXSW mmx,mmx/m64 |
PMINUB mmx,mmx/m64 |
PMINSW mmx,mmx/m64 |
PMOVMSKB r32,mmx |
PMULHUW mmx,mmx/m64 |
PREFETCHT0 mem |
PREFETCHT1 mem |
PREFETCHT2 mem |
PREFETCHNTA mem |
SFENCE |
PSADBW mmx,mmx/m64 |
PSHUFW mmx,mmx/m64,i8 |
|
è 46 èíñòðóêöèé SSE ðàñøèðåíèÿ. |
|
ADDPS xmm,m128/xmm |
ADDSS xmm,xmm/m32 |
ANDNPS xmm,xmm/m128 |
ANDPS xmm,xmm/m128 |
COMISS xmm,xmm/m32 |
DIVPS xmm,m128/xmm |
DIVSS xmm,xmm/m32 |
MAXPS xmm,m128/xmm |
MAXSS xmm,xmm/m32 |
MINPS xmm,m128/xmm |
MINSS xmm,xmm/m32 |
MULPS xmm,m128/xmm |
MULSS xmm,xmm/m32 |
ORPS xmm,xmm/m128 |
RCPPS xmm,xmm/m128 |
RCPSS xmm,xmm/m32 |
RSQRTPS xmm,xmm/m128 |
RSQRTSS xmm,xmm/m32 |
SQRTPS xmm,m128/xmm |
SQRTSS xmm,xmm/m32 |
SUBPS xmm,m128/xmm |
SUBSS xmm,xmm/m32 |
UCOMISS xmm,xmm/m32 |
UNPCKHPS xmm,xmm/m128 |
UNPCKLPS xmm,xmm/m128 |
XORPS xmm,xmm/m128 |
CMPPS xmm,xmm/m128,i8 |
CMPSS xmm,xmm/m32,i8 |
SHUFPS xmm,xmm/m128,i8 |
CVTPI2PS xmm,m64/mmx |
CVTSI2SS xmm,m32/r32 |
CVTPS2PI mmx,m128/xmm |
CVTTPS2PI mmx,xmm/m128 |
CVTSS2SI r32,xmm/m128 |
CVTTSS2SI r32,xmm/m128 |
LDMXCSR m32 |
STMXCSR m32 |
MOVHLPS xmm,xmm |
MOVLHPS xmm,xmm |
MOVMSKPS r32,xmm |
MOVNTPS m128,xmm |
MOVAPS m128/xmm,xmm/m128 |
MOVSS xmm/m32,xmm/m32 |
MOVUPS xmm/m128,m128/xmm |
MOVHPS xmm/m64,m64/xmm |
MOVLPS xmm/m64,m64/xmm |
|
Ìíîãèå èç ýòèõ èíñòðóêöèé ìîãóò èñïîëüçîâàòü â êà÷åñòâå îïåðàíäà |
64-áèòíûå è 128-áèòíûå ÿ÷åéêè ïàìÿòè. Êîìïèëÿòîð C-- ñåé÷àñ ìîæåò ðàáîòàòü |
òîëüêî ñ 32-áèòíûìè ïåðåìåííûìè. Ïîýòîìó äëÿ èíñòðóêöèé èñïîëüçóþùèõ â |
êà÷åñòâå îïåðàíäà ÿ÷åéêè ïàìÿòè ðàçìåðîì áîëüøå 32-áèò ìîæíî èñïîëüçîâàòü |
ïåðåìåííûå ëþáûõ òèïîâ. Êîìïèëÿòîð íå áóäåò âûäàâàòü íà ýòî ñîîáùåíèé îá |
îøèáêå, áóäåò èñïîëüçîâàí àäðåñ ýòîé ïåðåìåííîé, à ñàìà èíñòðóêöèÿ áóäåò |
èñïîëüçîâàòü íóæíîå åé ÷èñëî áèòîâ ïàìÿòè, íà÷èíàÿ ñ àäðåñà óêàçàííîé |
ïåðåìåííîé. Íàïðèìåð: |
|
Äëÿ èíñòðóêöèè <b>movaps</b> îäèí èç îïåðàíäîâ ìîæåò áûòü 128-áèòíîé |
ÿ÷åéêîé ïàìÿòè. Äëÿ ýòîé èíñòðóêöèè äîïóñòèìû ñëåäóþùèé ñèíòàêñèñ: |
|
byte var8_128[16]; |
word var16_128[8]; |
dword var32_128[4]; |
|
void proc() |
{ |
asm{ |
movaps var8_128,xmm0 //â ìàññèâ èç 16 áàéò áóäåò çàïèñàíî ñîäåðæèìîå XMM0 |
movaps xmm1,var16_128 //â XMM1 áóäåò çàïèñàíî ñîäåðæèìîå 8 ñëîâ |
movaps var32_128,xmm1 //â ìàññèâ èç 4 äâîéíûõ ñëîâ áóäåò çàïèñàíî XMM1 |
} |
} |
<A href="#contents10" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.1> |
11. Ïðîöåäóðû. |
|
11.1 Òèïû ïðîöåäóð, ôóíêöèé è ìàêðîêîìàíä. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñåé÷àñ C-- ïîääåðæèâàåò 4 òèïà âûçîâà ïðîöåäóð: <b>cdecl, pascal, stdcall |
è fastcall</b>. Âîò êðàòêèå õàðàêòåðèñòèêè ýòèõ òèïîâ âûçîâîâ ïðîöåäóð: |
|
<b><font color="Red">cdecl</font></b> Ýòîò òèï âûçîâà ïðîöåäóð ÿâëÿåòñÿ ïî óìîë÷àíèþ äëÿ ÿçûêà <b>Ñ</b>. Îí |
õàðàêòåðèçóåòñÿ òåì, ÷òî ïàðàìåòðû ïðîöåäóðû ïåðåäàþòñÿ â ïîðÿäêå îáðàòíîì |
èõ çàïèñè. Î÷èñòêà ñòåêà îò ïàðàìåòðîâ ïðîèçâîäèòñÿ ïîñëå çàâåðøåíèÿ ðàáîòû |
ïðîöåäóðû. Ýòîò ñïîñîá âûçîâà ïðîöåäóð î÷åíü óäîáåí äëÿ ïðîöåäóð ñ |
ïåðåìåííûì ÷èñëîì ïàðàìåòðîâ. |
|
<b><font color="Red">pascal</font></b> Ýòîò òèï âûçîâà ïðåäïîëàãàåò, ÷òî ïàðàìåòðû ïåðåäàþòñÿ â òîì |
ïîðÿäêå, â êîòîðîì îíè çàïèñàíû â ïðîãðàììå. Îñâîáîæäåíèå ñòåêà îò |
ïàðàìåòðîâ ïðîèçâîäèò ñàìà âûçûâàåìàÿ ïðîöåäóðà. Ýòîò òèï âûçîâà ÿâëÿåòñÿ |
áîëåå êîìïàêòíûì, ÷åì <b>cdecl</b>. |
|
<b><font color="Red">stdcall</font></b> Ýòîò òèï âûçîâà ÿâëÿåòñÿ ãèáðèäîì ïåðâûõ äâóõ. Ïàðàìåòðû |
ïåðåäàþòñÿ ïðîöåäóðå â ïîðÿäêå îáðàòíîì, òîìó â êîòîðîì îíè çàïèñàíû â |
ïðîãðàììå. Îñâîáîæäåíèå ñòåêà îò ïàðàìåòðîâ ïðîèçâîäèòñÿ â ñàìîé âûçûâàåìîé |
ïðîöåäóðå. |
|
<b><font color="Red">fastcall</font></b> Ýòîò òèï âûçîâà ïðîöåäóð ïðåäïîëàãàåò ÷òî ïåðåäà÷à ïàðàìåòðîâ |
ïðîöåäóðå ïðîèçâîäèòñÿ ÷åðåç ðåãèñòðû, òåì ñàìûì îòïàäàåò íåîáõîäèìîñòü |
îñâîáîæäåíèÿ ñòåêà îò ïàðàìåòðîâ. Äëÿ ýòîãî òèïà âûçîâà ïðîöåäóðû |
ñóùåñòâóþò îãðàíè÷åíèÿ ïî ÷èñëó ïåðåäàâàåìûõ ïàðàìåòðîâ. Äëÿ C ýòî òðè |
ïàðàìåòðà, à äëÿ C-- øåñòü.  C-- ïàðàìåòðû ïåðåäàþòñÿ ïî óìîë÷àíèþ â |
ñëåäóþùåì ïîðÿäêå: <b>1-é - AX/EAX, 2-é - BX/EBX, 3 - CX/ECX, 4 - DX/EDX, 5 - |
DI/EDI, 6 - SI/ESI</b>. Ïàðàìåòðû òèïîâ char èëè byte ìîãóò ïåðåäàâàòüñÿ â |
êîëè÷åñòâå íå áîëåå 4 èëè òîëüêî â ïåðâûõ 4 ðåãèñòðàõ: <b>1 - AL, 2 - BL, 3 - |
CL, 4 - DL</b>. Ýòîò ïîðÿäîê ðåãèñòðîâ ìîæåò áûòü èçìåíåí, åñëè ÿâíî óêàçàòü |
åãî ëèáî ïðè îáúÿâëåíèè ïðîöåäóðû, ëèáî ïðè åå îïðåäåëåíèè. Ïðîöåäóðû òèïà |
fastcall èíîãäà åùå íàçûâàþò ðåãèñòðîâûìè. |
|
 C-- ïî óìîë÷àíèþ, åñëè èìÿ ïðîöåäóðû íàïèñàíî áîëüøèìè áóêâàìè, òî |
ñ÷èòàåòñÿ, ÷òî ýòà ïðîöåäóðà èìååò òèï âûçîâà <b>fastcall</b>. Åñëè æå â èìåíè |
ïðîöåäóðû åñòü õîòÿ áû îäíà ìàëåíüêàÿ áóêâà, òî ïî óìîë÷àíèþ ñ÷èòàåòñÿ, ÷òî |
ýòà ïðîöåäóðà èìååò òèï âûçîâà <b>pascal</b>, çà èñêëþ÷åíèåì ïðîãðàìì |
êîìïèëèðóåìûõ ñ êëþ÷îì <b>/w32 /w32c</b> èëè <b>/DLL</b>.  íèõ ïî óìîë÷àíèþ ïðèìåíÿåòñÿ |
òèï âûçîâà ïðîöåäóð <b>stdcall</b>. Åñëè æå Âû õîòèòå èçìåíèòü òèï âûçîâà ïðîöåäóð |
èç ïî óìîë÷àíèþ íà ëþáîé äðóãîé, òî ýòó ïðîöåäóðó íàäî îáÿçàòåëüíî îáúÿâèòü |
ñ óêàçàíèåì òèïà æåëàåìîãî âûçîâà. |
|
Îáúÿâëåíèå ïðîöåäóð ââåäåíî äëÿ òîãî, ÷òîáû ñîîáùàòü êîìïèëÿòîðó î |
òèïå âîçâðàòà èç ïðîöåäóð, ñïîñîáå ïåðåäà÷è ïàðàìåòðîâ ïðîöåäóðå è èõ ÷èñëå. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.2> |
11.2 Ñòåêîâûå ïðîöåäóðû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñòåêîâûå ïðîöåäóðû ïî óìîë÷àíèþ îáúÿâëÿþòñÿ ïðè ïîìîùè èäåíòèôèêàòîðà, |
êîòîðûé ñîäåðæèò, ïî êðàéíåé ìåðå, îäèí ñèìâîë ñòðî÷íûõ áóêâ (áóêâ íèæíåãî |
ðåãèñòðà, ìàëåíüêèõ áóêâ). Òàêèì îáðàçîì, ñòåêîâûå ïðîöåäóðû ëåãêî îòëè÷èìû |
îò ðåãèñòðîâûõ ïðîöåäóð, ïîñêîëüêó äëÿ èìåí ðåãèñòðîâûõ ïðîöåäóð ñèìâîëû |
ñòðî÷íûõ áóêâ çàïðåùåíû. |
|
Ïàðàìåòðû äëÿ ñòåêîâûõ ïðîöåäóð, åñëè îíè åñòü, ìîãóò èìåòü ëþáîé òèï |
<b>byte, char, word, int, dword, long</b> èëè <b>float</b>. |
|
Ïàðàìåòðû ïåðåäàþòñÿ â ñîîòâåòñòâèè ñ ïðàâèëàìè, ïðèíÿòûìè äëÿ äàííîãî |
òèïà ïðîöåäóð. Åñëè ïðîöåäóðà íå èìååò îáúÿâëåíèÿ, òî êîìïèëÿòîð íå ñëåäèò |
çà ÷èñëîì è òèïîì ïåðåäàâàåìûõ ïàðàìåòðîâ.  ýòîì ñëó÷àå ó Âàñ ïîÿâëÿåòñÿ |
ñâîáîäà â èõ èñïîëüçîâàíèè, íî Âû äîëæíû îñîçíàâàòü è ïîñëåäñòâè |
íåïðàâèëüíîãî èõ èñïîëüçîâàíèÿ. |
|
 ñïèñêå ïàðàìåòðîâ äëÿ êàæäîãî ïàðàìåòðà óêàçûâàåòñÿ åãî òèï. |
Ïàðàìåòðû îäíîãî òèïà, èäóùèå ïîäðÿä, ðàçäåëÿþòñÿ çàïÿòûìè. Ôîðìàëüíûå |
ïàðàìåòðû ðàçíîãî òèïà â îáúÿâëåíèè ôóíêöèè ðàçäåëÿþòñÿ ñèìâîëîì <b>;</b>. |
|
 ñëåäóþùåì ïðèìåðå ñòåêîâàÿ ïðîöåäóðà âîçâðàùàåò ñóììó âñåõ ñâîèõ |
ïàðàìåòðîâ (èìåþùèõ ðàçëè÷íûå òèïû) êàê âåëè÷èíó òèïà word: |
|
word add_them_all (int a,b,c; byte d,e; word x,y) |
{ |
return( a+b+c+d+e+x+y ); |
} |
|
Ðàíåå C-- äåëàë âûçîâû ñòåêîâûõ ïðîöåäóð ëèøü â ñòèëå <b>pascal</b>. |
Ïðåèìóùåñòâîì ýòîãî ñïîñîáà âûçîâà ïðîöåäóð ÿâëÿåòñÿ êîìïàêòíîñòü è áîëåå |
ïðîñòîé ìåõàíèçì ãåíåðàöèè êîäà. Ê íåäîñòàòêàì, à ñîîòâåòñòâåííî è |
ïðåèìóùåñòâàì Ñ-ñòèëÿ, ìîæíî îòíåñòè æåñòêóþ ïðèâÿçàííîñòü ïàñêàëåâñêèõ |
ïðîöåäóð ê ÷èñëó è òèïó ïåðåäàâàåìûõ ïàðàìåòðîâ (ïîïðîáóéòå ïðè âûçîâå |
ïðîöåäóðû â ñòèëå <b>pascal</b> îïóñòèòü îäèí ïàðàìåòð è ïîëó÷èòå 100% çàâèñàíèå). |
Íàïîìíþ íåêîòîðûå òåõíè÷åñêèå äåòàëè îáîèõ òèïîâ âûçîâîâ ïðîöåäóð. |
|
Êàäð ñòåêà C-- äëÿ áëèçêèõ ïðîöåäóð ñòåêà â ñòèëå pascal: |
ÀÄÐÅÑ |
... |
BP + FFFE ïðåäïîñëåäíèé áàéòà ëîêàëüíûõ ïåðåìåííûõ |
BP + FFFF ïîñëåäíèé áàéò ëîêàëüíûõ ïåðåìåííûõ |
BP + 0000 Ñîõðàíåííûé BP |
BP + 0002 RET àäðåñ |
BP + 0004 ïîñëåäíåå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ (åñëè îíè |
åñòü) |
BP + 0006 ïðåäïîñëåäíåå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ |
... |
BP + nnnn ïåðâîå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ |
|
Îñâîáîæäåíèå ñòåêà îò ïåðåäàííûõ ïðîöåäóðå ïàðàìåòðîâ ïðîèñõîäèò ïðÿìî |
â ñàìîé ïðîöåäóðå êîìàíäîé <b>RET nnnn</b> - ãäå nnnn ÿâëÿåòñÿ ðàçìåðîì ïåðåäàííûõ |
â ñòåê ïàðàìåòðîâ. |
|
Êàäð ñòåêà C-- äëÿ áëèçêèõ ïðîöåäóð ñòåêà â ñòèëå ñè: |
ÀÄÐÅÑ |
... |
BP + FFFE ïðåäïîñëåäíèé áàéòà ëîêàëüíûõ ïåðåìåííûõ |
BP + FFFF ïîñëåäíèé áàéò ëîêàëüíûõ ïåðåìåííûõ |
BP + 0000 Ñîõðàíåííûé BP |
BP + 0002 RET àäðåñ |
BP + 0004 ïåðâîå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ (åñëè îíè |
åñòü) |
BP + 0006 âòîðîå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ |
... |
BP + nnnn ïîñëåäíåå ñëîâî ïåðåäàâàåìûõ ïðîöåäóðå ïàðàìåòðîâ |
|
Ïðîöåäóðû â ñòèëå <b>Ñ</b> çàêàí÷èâàþòñÿ êîìàíäîé <b>RET</b>. Îñâîáîæäåíèå ñòåêà îò |
ïàðàìåòðîâ ïðîèñõîäèò â òîì ìåñòå îòêóäà áûëà âûçâàíà ïðîöåäóðà. Îáû÷íî ýòî |
äåëàåòñÿ êîìàíäîé <b>ADD SP,nnnn</b>. Ò.å. êîìïèëÿòîð ìîæåò òî÷íî çíàòü ñêîëüêî è |
êàêèõ ïàðàìåòðîâ Âû ïåðåäàåòå â äàííîì ñëó÷àå ïðîöåäóðå è ñîîòâåòñòâåííî |
îñâîáîæäàåò ñòåê ïîñëå çàâåðøåíèÿ ïðîöåäóðû. Ýòî î÷åíü óäîáíî äëÿ ïðîöåäóð, |
êîòîðûå ìîãóò îáðàáàòûâàòü ïåðåìåííîå ÷èñëî ïàðàìåòðîâ (íàïðèìåð, ïðîöåäóðû |
òèïà printf). |
|
Îáúÿâëåíèå ïðîöåäóðû èìååò ñëåäóþùèé âèä: |
|
rettype modif procname(); |
|
Ïåðâûì èäåò íåîáÿçàòåëüíûé òèï âîçâðàòà èç ïðîöåäóð. Ïî óìîë÷àíèþ îí |
äëÿ 16-áèòíûõ ïðîãðàìì ðàâåí word, à äëÿ 32-áèòíûõ dword. Çàòåì äîëæåí èäòè |
òàêæå íåîáÿçàòåëüíûé ìîäèôèêàòîð. Ïî óìîë÷àíèþ âñå ñòåêîâûå ïðîöåäóðû â C-- |
(çà èñêëþ÷åíèåì ðåæèìà êîìïèëÿöèè ïðîãðàìì ïîä Windows, ãäå ïî óìîë÷àíèþ |
äåéñòâóåò ñòèëü âûçîâà ïðîöåäóð <b>stdcall</b>) èìåþò ñòèëü <b>pascal</b>. Äàëåå èäåò èì |
ïðîöåäóðû ñî ñêîáêàìè, êîòîðûå ÿâëÿþòñÿ ïðèçíàêîì òîãî ÷òî Âû îáúÿâëÿåòå |
ïðîöåäóðó, à íå ïåðåìåííóþ. Çàâåðøàåò îáúÿâëåíèå ñèìâîë òî÷êà ñ çàïÿòîé. |
|
Ïðè îáúÿâëåíèè ïðîöåäóð â C-- ïðîïèñûâàòü ïàðàìåòðû ïðîöåäóðû |
íåîáÿçàòåëüíî (òîãäà êîìïèëÿòîð íå áóäåò êîíòðîëèðîâàòü ÷èñëî è òèï |
ïåðåäàâàåìûõ ïàðàìåòðîâ), íî åñëè Âû èõ âñòàâèòå, òî âêëþ÷èòñÿ ìåõàíèçì |
êîíòðîëÿ çà ÷èñëîì è òèïîì ïàðàìåòðîâ. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.3> |
11.3 Ðåãèñòðîâûå ïðîöåäóðû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ðåãèñòðîâûå ïðîöåäóðû îïðåäåëÿþòñÿ, ïî óìîë÷àíèþ, ïðè ïîìîùè |
èäåíòèôèêàòîðà, êîòîðûé íå ñîäåðæèò ñèìâîëîâ ñòðî÷íûõ áóêâ. Èëè æå ÿâíûì |
óêàçàíèåì ÷òî ýòî ðåãèñòðîâàÿ ïðîöåäóðà ñ ïîìîùüþ êëþ÷åâîãî ñëîâà <b>fastcall</b>. |
|
Êàê óæå áûëî ñêàçàíî, ïàðàìåòðû (åñëè îíè åñòü) äëÿ ðåãèñòðîâîé |
ïðîöåäóðû ïåðåäàþòñÿ ÷åðåç ðåãèñòðû. Ðåãèñòðîâûå ïðîöåäóðû ìîãóò èìåòü íå |
áîëåå 6 ïàðàìåòðîâ. Åñëè ïàðàìåòðû èìåþò òèï int èëè word, ðåãèñòðû ïî |
óìîë÷àíèþ èñïîëüçóþòñÿ â ñëåäóþùåì ïîðÿäêå: <b>AX, BX, CX, DX, DI, è SI</b>. |
Ïåðâûå ÷åòûðå ïàðàìåòðà ìîãóò òàêæå èìåòü òèï <b>char</b> èëè <b>byte</b>, â ýòîì ñëó÷àå |
çàäåéñòâóþòñÿ ðåãèñòðû <b>AL, BL, CL è DL</b> ñîîòâåòñòâåííî. Ëþáîé èç øåñòè |
ïàðàìåòðîâ ìîæåò èìåòü òèï <b>long, dword</b> èëè <b>float</b>, òîãäà äëÿ íåãî |
èñïîëüçóåòñÿ ðåãèñòð <b>EAX, EBX, ECX, EDX, EDI</b>, èëè <b>ESI</b>. |
|
 ñëåäóþùåì ïðèìåðå ðåãèñòðîâàÿ ïðîöåäóðà ñ èìåíåì TOGETHER âîçâðàùàåò |
çíà÷åíèå òèïà word êàê ðåçóëüòàò óìíîæåíèÿ ïåðâîãî ïàðàìåòðà, èìåþùåãî òèï |
word, íà âòîðîé ïàðàìåòð òîãî æå òèïà: |
|
word TOGETHER() /* AX = ïåðâûé ïàðàìåòð, BX = âòîðîé ïàðàìåòð */ |
{ |
return (AX * BX); |
} |
|
 ñëåäóþùåì ïðèìåðå ðåãèñòðîâàÿ ïðîöåäóðà ñ èìåíåì SHOW_NUM, êîòîðàÿ íå |
âîçâðàùàåò íèêàêîãî çíà÷åíèÿ, çàòî âûâîäèò íà ýêðàí ïåðâûé ïàðàìåòð |
(èìåþùèé òèï int), çàòåì ðàçäåëèòåëüíûé çíàê â âèäå äâîåòî÷èÿ <b>:</b>, à çàòåì |
âòîðîé ïàðàìåòð (èìåþùèé òèï byte) : |
|
void SHOW_NUM () /* AX = ïåðâîå ÷èñëî, BL = âòîðîå ÷èñëî */ |
{ |
$ PUSH BX |
WRITEINT (int AX); |
WRITE (':'); |
$ POP BX |
WRITEWORD (BL); |
} |
|
Íî åñëè â ïðîöåäóðå ñäåëàòü îáúÿâëåíèå ïîðÿäêà è òèïîâ èñïîëüçóåìûõ |
ðåãèñòðîâ, òî âîçìîæíî ïðîèçâîëüíîå èñïîëüçîâàíèå ðåãèñòðîâ. Áîëåå ïîäðîáíî |
îá ýòîì ìîæíî ïî÷èòàòü â ðàçäåëå îá îáúÿâëåíèÿõ ïàðàìåòðîâ â ðåãèñòðîâûõ |
ïðîöåäóðàõ. |
|
Äëÿ òîãî, ÷òîáû èñïîëüçîâàòü ðåãèñòðîâóþ ïðîöåäóðó êàê ìàêðîêîìàíäó, |
îíà äîëæíà áûòü îáúÿâëåíà êàê äèíàìè÷åñêàÿ ïðîöåäóðà. Äèíàìè÷åñêèå |
ïðîöåäóðû îïèñàíû â ñëåäóþùåì ïîäðàçäåëå. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.4> |
11.4 Äèíàìè÷åñêèå ïðîöåäóðû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Äèíàìè÷åñêèå ïðîöåäóðû - ïðîöåäóðû, êîòîðûå îïðåäåëåíû, íî âñòàâëÿþòñÿ |
â êîä ïðîãðàììû, òîëüêî åñëè åñòü âûçîâ. Äèíàìè÷åñêèå ïðîöåäóðû ìîãóò |
èñïîëüçîâàòüñÿ êàê ìàêðîêîìàíäû. |
|
Îïðåäåëåíèå äèíàìè÷åñêîé ïðîöåäóðû íà÷èíàåòñÿ ñ ñèìâîëà äâîåòî÷èÿ ':'. |
|
Ïðèìåð äèíàìè÷åñêîé ïðîöåäóðû ñòåêà: |
|
: void setvideomode (byte mode) |
{ |
AL = mode; |
AH = 0; |
$ INT 0x10 |
} |
|
Ïðèìåð äèíàìè÷åñêîé ðåãèñòðîâîé ïðîöåäóðû: |
|
: int ABS () /* AX = ÷èñëî, àáñîëþòíîå çíà÷åíèå êîòîðîãî èùåòñÿ*/ |
{ |
IF (int AX < 0) |
-AX; |
} |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.4.1> |
11.4.1 Óñòàíîâêà äèíàìè÷åñêîé ïðîöåäóðû â îïðåäåëåííîå ìåñòî ïðîãðàììû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Äèíàìè÷åñêèå ïðîöåäóðû, åñëè îíè íå èñïîëüçóþòñÿ êàê ìàêðîñû è åñëè |
îíè áûëè âîñòðåáîâàíû â ïðîãðàììå, âñòàâëÿþòñÿ â êîä ïðîãðàììû â ñàìîì |
êîíöå êîìïèëÿöèè.  êàêîì òî÷íî ìåñòå Âàøåé ïðîãðàììû îíè îêàæóòñÿ óçíàòü |
íåâîçìîæíî. Åñëè æå Âàì íåîáõîäèìî, ÷òîáû êàêàÿ-òî äèíàìè÷åñêàÿ ïðîöåäóðà |
íàõîäèëàñü â êîíêðåòíîì ìåñòå ïðîãðàììû, òî ýòî ìîæíî ñäåëàòü òàêèì |
îáðàçîì: |
|
:void proc ( int par1, par2) |
{ |
... |
} |
|
Ìû èìååì äèíàìè÷åñêóþ ïðîöåäóðó, êîä êîòîðîé áûë áû ðàñïîëîæåí ðàíåå |
êîäà îáû÷íîé ïðîöåäóðû íàøåé ïðîãðàììû. Äëÿ ýòîãî ïåðåä îïðåäåëåíèåì ýòîé |
ïðîöåäóðû íàäî íàïèñàòü òàêóþ ñòðîêó: |
|
@ void proc (); |
|
 èòîãå äèíàìè÷åñêàÿ ïðîöåäóðà áóäåò âñòàâëåíà â êîä ïðîãðàììû íå â |
êîíöå åå, êàê îáû÷íî, à â ìåñòå, ãäå áóäåò ðàñïîëîæåíà ýòà ñòðîêà. Åñëè |
äèíàìè÷åñêàÿ ïðîöåäóðà èìååò ïàðàìåòðû, òî ïðîïèñûâàòü ýòè ïàðàìåòðû |
íåîáÿçàòåëüíî. |
|
 êîìïèëÿòîðå åñòü åùå áîëåå ìîùíîå ñðåäñòâî, ïîçâîëÿþùåå âñå |
äèíàìè÷åñêèå îáúåêòû ( ïðîöåäóðû, ïåðåìåííûå, ñòðóêòóðû ) ðàñïîëîæèòü â |
óêàçàííîì ìåñòå, à íå â êîíöå ïðîãðàììû, êàê îáû÷íî. Ýòî äèðåêòèâà |
<b>#setdinproc</b>. Âñòðåòèâ ýòó äèðåêòèâó, êîìïèëÿòîð íåìåäëåííî ðàñïîëîæèò âñå |
èçâåñòíûå åìó íà ýòîò ìîìåíò äèíàìè÷åñêèå îáúåêòû â ìåñòå îáúÿâëåíèÿ ýòîé |
äèðåêòèâû. Ïîñëåäóþùèå äèíàìè÷åñêèå îáúåêòû áóäóò ðàñïîëàãàòüñÿ êàê |
îáû÷íî, â êîíöå ïðîãðàììû, åñëè êîíå÷íî, íå áóäåò ïîâòîðíî ïðèìåíåíà |
äèðåêòèâà <b>#setdinproc</b>. |
|
Ýòî ìîæåò áûòü ïðèìåíåíî è áûòü ïîëåçíûì ïðè ñîçäàíèè ðåçèäåíòíûõ |
ïðîãðàìì (TSR) è äðàéâåðîâ óñòðîéñòâ. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.5> |
11.5 inline-ïðîöåäóðû. |
</A></B></FONT><FONT FACE="Courier"> |
|
inline-ïðîöåäóðàìè ìîãóò áûòü äèíàìè÷åñêèå ïðîöåäóðû, êîòîðûå ìîæíî |
èñïîëüçîâàòü êàê ìàêðîñû. Íî â îòëè÷èå îò ìàêðîñîâ, inline-ïðîöåäóðû, ïðè |
âêëþ÷åííîé îïòèìèçàöèè íà ñêîðîñòü, àâòîìàòè÷åñêè âñòàâëÿþòñÿ â êîä, à ïðè |
îïòèìèçàöèè êîäà íà ðàçìåð, äåëàåòñÿ âûçîâ èõ, êàê äèíàìè÷åñêèõ ïðîöåäóð. |
|
Íî èíîãäà áûâàåò íóæíî ïðè âêëþ÷åííîé îïòèìèçàöèè íà ðàçìåð êîäà, ÷òîáû |
ïðîöåäóðû âñòàâëÿëèñü â êîä, à íå äåëàëñÿ èõ âûçîâ. Äëÿ ýòèõ öåëåé ââåäåíà |
äèðåêòèâà <b>#inline TRUE</b>. Ýòîé æå äèðåêòèâîé ( <b>#inline FALSE</b> ), ìîæíî ïðè |
îïòèìèçàöèè íà ñêîðîñòü äåëàòü âûçîâû ïðîöåäóð, âìåñòî èõ âñòàâêè. |
|
Âàæíî ïîìíèòü, ÷òî ñòàòóñ äèðåêòèâû <b>#inline</b> àâòîìàòè÷åñêè ìåíÿåòñÿ ïðè |
ñìåíå ðåæèìà îïòèìèçàöèè. Ïðè óñòàíîâêå îïòèìèçàöèè íà ñêîðîñòü ñòàòóñ |
äèðåêòèâû <b>#inline</b> óñòàíàâëèâàåòñÿ â <b>TRUE</b>, à ïðè ñìåíå ðåæèìà îïòèìèçàöèè ïî |
ðàçìåðó êîäà, óñòàíàâëèâàåòñÿ â <b>FALSE</b>. Ïîýòîìó ïðèìåíÿéòå äèðåêòèâó <b>#inline</b> |
ëèøü ïîñëå ñìåíû ðåæèìà îïòèìèçàöèè. |
|
Äèðåêòèâû ìåíÿþùèå ðåæèì îïòèìèçàöèè <b>#codesize, #speed</b> è äèðåêòèâà |
<b>#inline</b>, îáúÿâëåííûå âíóòðè ïðîöåäóðû ðàñïðîñòðàíÿþòñÿ òîëüêî íà îñòàâøóþñÿ |
÷àñòü ïðîöåäóðû, ò.å. îíè ñòàíîâÿòñÿ ëîêàëüíûìè. Äëÿ òîãî ÷òîáû èçìåíåíèÿ |
áûëè ãëîáàëüíûìè ýòè äèðåêòèâû íàäî îáúÿâëÿòü âíå òåëà ïðîöåäóðû. |
|
Äëÿ òîãî ÷òîáû îïðåäåëèòü inline-ïðîöåäóðó, íàäî â ïåðâîé ñòðîêå ñ |
èìåíåì ïðîöåäóðû âìåñòî ñèìâîëà äèíàìè÷åñêîé ïðîöåäóðû <b>(:)</b> íàïèñàòü |
êëþ÷åâîå ñëîâî <b>inline</b>. Ïðèìåð îïðåäåëåíèÿ inline-ïðîöåäóðû: |
|
inline int fastcall abs(AX) |
{ |
IF ( int AX < 0 ) -AX ; |
} |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.5.1> |
11.5.1 Äðóãîå ïðèìåíåíèå inline. |
</A></B></FONT><FONT FACE="Courier"> |
|
Êëþ÷åâîå ñëîâî <b>inline</b> èìååò â ïðîöåäóðàõ è äðóãîå ïðèìåíåíèå. Åñëè |
ýòî ñëîâî ðàñïîëîæåíî ïåðåä íà÷àëîì áëîêà ïðîöåäóðû, òî äëÿ òàêîé |
ïðîöåäóðû íå ñîçäàåòñÿ êàäð ñòåêà è íå ãåíåðèðóåòñÿ çàâåðøàþùèé ïðîöåäóðó |
<b>ret</b>. Ïðèìåð: |
|
void PROC () |
inline |
{ |
... |
} |
|
Òàêèå ïðîöåäóðû íå äîëæíû ñîäåðæàòü ëîêàëüíûõ ïåðåìåííûõ. Åñëè |
ïðîöåäóðà ÿâëÿåòñÿ ðåãèñòðîâîé (òèï <b>fastcall</b>), òî ñ ïåðåäà÷åé åé |
ïàðàìåòðîâ íåò ïðîáëåì. Åñëè æå ïðîöåäóðà ÿâëÿåòñÿ ñòåêîâîé, òî ïåðåäàòü |
â òàêóþ ïðîöåäóðó ïàðàìåòðû Âû ìîæåòå, íî âîñïîëüçîâàòüñÿ ýòèìè |
ïàðàìåòðàìè èñïîëüçóÿ èõ èìåíà, Âû óæå íå ñìîæåòå. Ýòî ïðîèñõîäèò ïîòîìó, |
÷òî â ýòèõ ïðîöåäóðàõ êàäð ñòåêà íå ôîðìèðóåòñÿ. Ïðèìåð: |
|
void proc (int par1, par2) |
inline |
{ |
AX=par1; /* êîìïèëÿòîð îáðàòèòñÿ ñ ïàðàìåòðó 'par1' ÷åðåç ðåãèñòð BP. |
Íî òàê êàê êàäð ñòåêà íå áûë ñîçäàí, ïðè âûïîëíåíèè ýòîãî |
êîäà ïðîãðàììà áóäåò ðàáîòàòü íå ïðàâèëüíî. */ |
... |
} |
|
Âñòðåòèâ òàêîå îïðåäåëåíèå ïðîöåäóðû, êîìïèëÿòîð âûäàñò ïðåäóïðåæäåíèå |
î òîì, ÷òî â òàêèõ ïðîöåäóðàõ èñïîëüçîâàòü ëîêàëüíûå è ïàðàìåòðè÷åñêèå |
ïåðåìåííûå íåëüçÿ. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.6> |
11.6 Ïðîöåäóðû îáðàáîòêè ïðåðûâàíèé. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïðîöåäóðû îáðàáîòêè ïðåðûâàíèé îïðåäåëÿþòñÿ ñëåäóþùèì ñïîñîáîì: |
|
interrupt procedure_name () |
{ |
// put code here (çäåñü äîëæåí áûòü êîä îáðàáîòêè) |
} |
|
Ïðîöåäóðû îáðàáîòêè ïðåðûâàíèé íå ñîõðàíÿþò íèêàêèõ ðåãèñòðîâ |
àâòîìàòè÷åñêè, è íèêàêèå ðåãèñòðû ñàìè ïî ñåáå íå çàãðóæàþòñÿ ïåðåä |
ïåðåäà÷åé óïðàâëåíèÿ îáðàáîò÷èêó ïðåðûâàíèÿ, ñëåäîâàòåëüíî, íà Âàøåé |
ñîâåñòè ñîõðàíåíèå çíà÷åíèé ðåãèñòðîâ â ñòåêå è ïîñëåäóþùèé èõ âîçâðàò, à |
òàêæå çàãðóçêà ðåãèñòðà DS íóæíûì çíà÷åíèåì. |
|
Âîò ïðèìåð îáðàáîò÷èêà ïðåðûâàíèÿ, êîòîðûé ñîõðàíÿåò çíà÷åíèÿ âñåõ |
ðåãèñòðîâ è çàãðóæàåò ðåãèñòð DS: |
|
interrupt safe_handle () |
{ |
$ PUSH DS |
$ PUSH ES |
$ PUSHA // äëÿ âûïîëíåíèÿ ýòîé êîìàíäû íóæåí ïðîöåññîð íå õóæå 80286 |
DS = CS; // çäåñü DS çàãðóæàåòñÿ äëÿ ðàáîòû ñ ìîäåëüþ ïàìÿòè òèïà tiny |
|
|
/* do your thing here (çäåñü âû äåëàåòå ñâîþ îáðàáîòêó)*/ |
|
$ POPA // äëÿ âûïîëíåíèÿ ýòîé êîìàíäû íóæåí ïðîöåññîð íå õóæå 80286 |
$ POP ES |
$ POP DS |
} |
|
Ïðè çàâåðøåíèè ïðîöåäóðû ïðåðûâàíèÿ áóäåò àâòîìàòè÷åñêè ñãåíåðèðîâàíà |
èíñòðóêöèÿ âûõîäà èç îáðàáîò÷èêà ïðåðûâàíèÿ - IRET. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.7> |
11.7 Çàìåíà return íà goto. |
</A></B></FONT><FONT FACE="Courier"> |
|
 íåêîòîðûõ ñèòóàöèÿõ, ïðè êîìïèëÿöèè ïðîãðàììû, îïåðàòîð <b>return</b> |
áóäåò çàìåíÿòüñÿ íà <b>goto</b>. Ýòî ïðîèñõîäèò ïðè ðàçðåøåííîé îïòèìèçàöèè ïî |
ðàçìåðó êîäà äëÿ îïåðàòîðîâ <b>return</b>, êîòîðûå ðàñïîëîæåíû âíóòðè ïðîöåäóðû |
è, åñòåñòâåííî, åñëè ðàçìåð êîäà äëÿ âûïîëíåíèÿ <b>return</b> áîëüøå, ÷åì ðàçìåð |
êîäà äëÿ ðåàëèçàöèè <b>goto</b>. Äëÿ äèíàìè÷åñêèõ ïðîöåäóð, êîòîðûå èñïîëüçóþòñÿ |
êàê ìàêðîñû, òàêàÿ çàìåíà áóäåò ïðîèçâîäèòñÿ âñåãäà. Îïåðàòîð <b>goto</b> áóäåò |
âûïîëíåí íà êîíåö ïðîöåäóðû, òàì, ãäå áóäåò ðàñïîëàãàòüñÿ åäèíñòâåííûé |
âûõîä èç ïðîöåäóðû.  äèíàìè÷åñêèõ ïðîöåäóðàõ, èñïîëüçóåìûõ â êà÷åñòâå |
ìàêðîñîâ, <b>return</b> â êîíöå ïðîöåäóðû áóäåò ïðîïóùåí êîìïèëÿòîðîì. |
|
Òàêèì îáðàçîì, ñíÿòî ïîñëåäíåå îãðàíè÷åíèå íà èñïîëüçîâàíèå |
äèíàìè÷åñêèõ ïðîöåäóð â êà÷åñòâå ìàêðîñîâ. Ëþáàÿ äèíàìè÷åñêàÿ ïðîöåäóðà |
ìîæåò áûòü èñïîëüçîâàíà êàê ìàêðîñ. |
|
Äëÿ îïåðàòîðà <b>goto</b> ñóùåñòâóåò åãî áîëåå êîðîòêèé àíàëîã - <b>GOTO</b>. |
Äëÿ ïîëó÷åíèÿ áîëåå êîìïàêòíîãî êîäà äëÿ îïåðàòîðà <b>return</b> ââåäåí òàêæå |
áîëåå êîðîòêèé îïåðàòîð <b>RETURN</b>. Åãî ìîæíî èñïîëüçîâàòü, åñëè îò ìåñòà |
åãî ïðèìåíåíèÿ äî êîíöà ïðîöåäóðû íàõîäèòñÿ íå áîëåå 128 áàéò. Åñëè Âû |
áóäåòå èñïîëüçîâàòü <b>RETURN</b> íà áîëüøåì ðàññòîÿíèè äî êîíöà ïðîöåäóðû, òî |
êîìïèëÿòîð âûäàñò ñîîáùåíèå îá îøèáêå. Ïðè èñïîëüçîâàíèè <b>return</b> íà |
ðàññòîÿíèè ìåíüøå 128 áàéò äî êîíöà êîäà, êîìïèëÿòîð âûäàñò âàì |
ïðåäóïðåæäåíèå î âîçìîæíîì èñïîëüçîâàíèè <b>RETURN</b>. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.8> |
11.8 Âîçâðàùàåìûå çíà÷åíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Âîçâðàùàåìûå èç ôóíêöèé çíà÷åíèÿ ðàñïîëàãàþòñÿ â ðåãèñòðàõ.  òàáëèöå |
ïîêàçàíî, êàêîé ðåãèñòð èñïîëüçóåòñÿ äëÿ êàæäîãî èç âîçâðàùàåìûõ òèïîâ: |
|
-------------------------------------------- |
| âîçâðàùàåìûé òèï | èñïîëüçóåìûé ðåãèñòð | |
-------------------------------------------- |
| byte | AL | |
| word | AX | |
| dword | EAX | |
| char | AL | |
| int | AX | |
| long | EAX | |
| float | EAX | |
-------------------------------------------- |
|
Ñàìûé ïðîñòîé ñïîñîá âåðíóòü çíà÷åíèå èç ôóíêöèè ñîñòîèò â òîì, ÷òîáû |
èñïîëüçîâàòü êîìàíäó return(), íî âìåñòî ýòîãî ìîæíî íàïðÿìóþ çàãðóçèòü |
âîçâðàùàåìîå çíà÷åíèå â ñîîòâåòñòâóþùèé ðåãèñòð. Íàïðèìåð, ñëåäóþùèå äâå |
ôóíêöèè âîçâðàùàþò îäíî è òî æå çíà÷åíèå: |
|
byte proc_one () |
{ |
return (42); |
} |
|
byte proc_two () |
{ |
AL = 42; |
} |
|
Ìíîãèå DOS ôóíêöèè 0x21 ïðåðûâàíèÿ â êà÷åñòâå èíäèêàòîðà óñïåøíîãî |
âûïîëíåíèÿ èñïîëüçóþò óñòàíîâêó èëè ñáðîñ carry ôëàãà. Èñïîëüçîâàòü ôëàãè |
ïðîöåññîðà ïðè âîçâðàòå èç ïðîöåäóð ìîæíî è â äðóãèõ ñëó÷àÿõ, êîãäà íàäî |
èìåòü ñòàòóñ óñïåøíîãî èëè íå óñïåøíîãî âûïîëíåíèÿ ïðîöåäóðû. Ýòî ïîçâîëèò |
áîëåå ïîëíî èñïîëüçîâàòü âîçìîæíîñòè ïðîöåññîðà è ñîîòâåòñòâåííî óìåíüøèò |
ðàçìåð êîäà è ïîâûñèò áûñòðîäåéñòâèå ïðîãðàììû. |
|
Íàðÿäó ñ ôëàãàìè, ïðè âîçâðàòå èç ïðîöåäóð, ïî ïðåæíåìó îñòàåòñÿ |
âîçâðàò ðàçëè÷íûõ òèïîâ è ÷åðåç ðåãèñòð <b>AL/AX/EAX</b>. Åñëè äëÿ ïðîöåäóðû |
îáúÿâëåíî, ÷òî îíà èìååò òèï âîçâðàòà <b>int è CARRYFLAG</b>, òî ïðè èñïîëüçîâàíèè |
òàêîé ïðîöåäóðû â îïåðàöèÿõ ñðàâíåíèÿ <b>IF, WHILE...</b> áóäåò äåëàòüñÿ ïðîâåðêà |
carry ôëàãà, à íå ñðàâíåíèå ðåãèñòðà AX. Ïðèìåð èñïîëüçîâàíèÿ âîçâðàòà |
ôëàãîâ èç ïðîöåäóð: |
|
int CARRYFLAG FOPEN(); // îáúÿâëåíèå ïðîöåäóðû |
|
void proc() |
{ |
IF ( FOPEN(name,0) ) Error ( "Not open file" ); |
} |
|
Âàðèàíòû äîïóñòèìîãî ñèíòàêñèñà äëÿ èñïîëüçîâàíèÿ âîçâðàòà ôëàãà: |
|
IF ( ! FOPEN() )... |
IF ( @ FOPEN() )... |
IF ( ! @ FOPEN() )... |
IF ( handl = FOPEN() )... |
IF ( handl = @ FOPEN() )... |
IF ( ! handl = FOPEN() )... |
IF ( ! handl = @ FOPEN() )... |
|
À âîò âàðèàíòû, â êîòîðûõ, íåñìîòðÿ íà òî, ÷òî äëÿ ïðîöåäóðû îáúÿâëåí |
âîçâðàò ôëàãà, áóäåò ïðîèçâîäèòüñÿ ñðàâíåíèå ðåãèñòðà AX: |
|
IF ( FOPEN() == 5 )... // ïðîèçâîäèòñÿ ñðàâíåíèå |
IF ( FOPEN() + 2 )... // ðåçóëüòàò ïðîöåäóðû ïîäâåðãàåòñÿ äàëüíåéøåìó |
// âû÷èñëåíèþ, â ðåçóëüòàòå êîòîðîãî ôëàãè áóäóò |
// èçìåíåíû. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.9> |
11.9 Îáúÿâëåíèå ïàðàìåòðîâ â ðåãèñòðîâûõ ïðîöåäóðàõ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ðàíåå êàæäîìó ïàðàìåòðó ðåãèñòðîâîé ïðîöåäóðû ñîîòâåòñòâîâàë ñòðîãî |
îïðåäåëåííûé ðåãèñòð. Íàïðèìåð, äëÿ ïåðåìåííûõ òèïà int èëè word ïåðâûé |
ïàðàìåòð ïåðåäàâàëñÿ ÷åðåç ðåãèñòð AX, 2-é - BX, 3-é - CX, 4-é - DX, 5-é - |
DI, 6-é - SI. Ïîýòîìó, åñëè Âàì áûëî íåîáõîäèìî ïåðåäàòü òîëüêî îäèí |
ïàðàìåòð ÷åðåç ðåãèñòð SI, òî ïðèõîäèëîñü ïåðåä íèì ïèñàòü ïÿòü çàïÿòûõ. |
Âîò êàê, íàïðèìåð, âûãëÿäèò âûçîâ ïðîöåäóðû STRCPY: |
|
void main () |
{ |
STRCPY ( , , , , #dest, #sourc ) ; |
} |
|
Òåïåðü ðåãèñòðû ìîãóò ðàñïîëàãàòüñÿ ïðè ïåðåäà÷å ïàðàìåòðîâ |
ïðîèçâîëüíûì îáðàçîì. Íàäî òîëüêî îáúÿâèòü êîìïèëÿòîðó î òîì, êàêîé ðåãèñòð |
çàêðåïëåí çà êàêèì ïàðàìåòðîì äàííîé ïðîöåäóðû. Ïîñëå òàêîãî îáúÿâëåíèÿ |
êîìïèëÿòîð áóäåò ñàì ñëåäèòü çà òåì, ÷åðåç êàêîé ðåãèñòð ïåðåäàâàòü |
ïàðàìåòð ïðîöåäóðå, åãî ðàçìåðíîñòüþ è ÷èñëîì ïåðåäàâàåìûõ ïàðàìåòðîâ. Âîò |
êàê áóäåò âûãëÿäåòü îáúÿâëåíèå è èñïîëüçîâàíèå ïðîöåäóðû STRCPY: |
|
void STRCPY ( DI, SI ) ; //ýòî îáúÿâëåíèå ïðîöåäóðû |
|
void main () |
{ |
STRCPY ( #dest, #sourc ) ; //à ýòî âûçîâ ïðîöåäóðû |
} |
|
Ìîæíî íå äåëàòü îáúÿâëåíèÿ ïðîöåäóðû, à óêàçàòü ðàñïîëîæåíèå ðåãèñòðîâ |
â çàãîëîâêå ïðîöåäóðû. Íî òîãäà òàêàÿ ïðîöåäóðà äîëæíà âûçûâàòüñÿ òîëüêî |
ïîñëå åå îïðåäåëåíèÿ. Âîò ïðèìåð ïðîöåäóðû âûâîäÿùåé íà ýêðàí íåñêîëüêî |
îäèíàêîâûõ ñèìâîëîâ: |
|
void PUTNCHAR(AL,CX,BL,BH) |
/* 1 ïàðàìåòð â AL - êîä ñèìâîëà, êîòîðûé áóäåò âûâåäåí |
2 ïàðàìåòð â CX - ÷èñëî âûâîäèìûõ ñèìâîëîâ |
3 ïàðàìåòð â BL - öâåòîâîé àòðèáóò |
4 ïàðàìåòð â BH - íîìåð âèäåîñòðàíèöû |
*/ |
{ |
AH=9; |
$INT 0x10 |
} |
|
Ïðè îáúÿâëåíèè ðåãèñòðîâîé ïðîöåäóðû ìîæíî òàêæå óêàçûâàòü êàêîé òèï |
ïåðåìåííîé îæèäàåò ïðîöåäóðà (çíàêîâûé/áåç çíàêîâûé èëè âåùåñòâåííûé). Ïî |
óìîë÷àíèþ ñ÷èòàåòñÿ áåç çíàêîâûé òèï. Îäíàêî çíàêîâûé òèï óêàçûâàòü åñòü |
ñìûñë òîëüêî åñëè ïàðàìåòð ïåðåäàåòñÿ ÷åðåç ðåãèñòð <b>AL/AX/EAX</b>. ×åðåç äðóãèå |
ðåãèñòðû ïåðåìåííàÿ âñåãäà ïåðåäàåòñÿ êàê áåç çíàêîâàÿ. Ïðèìåð îáúÿâëåíèÿ |
ðåãèñòðîâîé ïðîöåäóðû ñ óêàçàíèåì òèïîâ: |
|
int fastcall Exampl( word CX, int AX, DX, float ESI ) ; |
| | | | | | | |
| | | | | | |---- 4-é ïàðàì. èìååò òèï float è |
| | | | | | ïåðåä. ÷åðåç ðåãèñòð ESI. |
| | | | | |-------- 3-é ïàðàì. èìååò ïî óìîë÷. |
| | | | | òèï word è ïåðåä. ÷åðåç DX. |
| | | | |------------ 2-é ïàðàì. èìååò òèï int è |
| | | | ïåðåäàåòñÿ ÷åðåç ðåãèñòð AX. |
| | | |---------------------- 1-é ïàðàì. èìååò òèï word è |
| | | ïåðåäàåòñÿ ÷åðåç ðåãèñòð CX. |
| | |------------------------------- Èìÿ îáúÿâëÿåìîé ïðîöåäóðû. |
| |---------------------------------------- Ìîäèôèêàòîð, óêàçûâàþùèé, ÷òî |
| ýòà ïðîö. ÿâë. ðåãèñòðîâîé. |
|--------------------------------------------- Ïðîöåäóðà âîçâðàùàåò ïåðåìåí. |
òèïà int. |
|
Åñëè Âû ñäåëàëè îáúÿâëåíèå ðåãèñòðîâ ïðîöåäóðû, òî êîìïèëÿòîð áóäåò |
ñòðîãî ñëåäèòü çà êîëè÷åñòâîì óêàçàííûõ ïàðàìåòðîâ ïðè âûçîâå ýòîé |
ïðîöåäóðû è âûäàâàòü ñîîáùåíèÿ îá îøèáêå, åñëè èõ áóäåò ìåíüøå èëè áîëüøå. |
Ñ îäíîé ñòîðîíû ýòî õîðîøî - åñòü êîíòðîëü çà òåì, ÷òî Âû íè÷åãî íå çàáûëè |
èëè íå äîáàâèëè ëèøíåãî ïðè âûçîâå ïðîöåäóðû. Ñ äðóãîé ñòîðîíû èíîãäà |
áûâàþò íåîáÿçàòåëüíûå ïàðàìåòðû, à èõ òåïåðü ïðèäåòñÿ ïðîïèñûâàòü. Íî åñëè |
Âû ïðè âûçîâå ïðîöåäóðû íå óêàæåòå íè îäíîãî ïàðàìåòðà, òî êîìïèëÿòîð íå |
áóäåò Âàì âûäàâàòü ñîîáùåíèå îá îøèáêå. Ýòî äàåò Âàì âîçìîæíîñòü |
ïðîèíèöèàëèçèðîâàòü ðåãèñòðû, ÷åðåç êîòîðûå Âû ïåðåäàåòå ïàðàìåòðû, âíå |
âûçîâà ïðîöåäóðû. Íî åñëè Âû óêàæåòå, õîòü îäèí ïàðàìåòð, òî Âàì ïðèäåòñÿ |
óêàçûâàòü è îñòàëüíûå, èíà÷å êîìïèëÿòîð áóäåò ñ÷èòàòü, ÷òî Âû èõ ñëó÷àéíî |
ïðîïóñòèëè è âûäàñò ñîîáùåíèå îá îøèáêå. |
|
Åñëè Âû íå îáúÿâèëè ðåãèñòðû íè ïðè îáúÿâëåíèè ðåãèñòðîâîé ïðîöåäóðû, |
íè â çàãîëîâêå ñàìîé ïðîöåäóðû, òî êîìïèëÿòîð áóäåò ñ÷èòàòü, ÷òî ïàðàìåòðû |
â ýòó ïðîöåäóðó ïåðåäàþòñÿ ñòàðûì ñïîñîáîì. Òàêèì îáðàçîì, äîñòèãàåòñÿ |
ïîëíàÿ ñîâìåñòèìîñòü ñ ïðåäûäóùèìè âåðñèÿìè êîìïèëÿòîðà. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.10> |
11.10 Îáúÿâëåíèå ïàðàìåòðîâ â ñòåêîâûõ ïðîöåäóðàõ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Êàê èçâåñòíî, ðàíåå â C-- êîíòðîëü çà ÷èñëîì è òèïîì ïåðåäàâàåìûõ |
ïðîöåäóðå ïàðàìåòðîâ âîçëàãàëñÿ íà ïðîãðàììèñòà. Ïîýòîìó âîçíèêëà íåïðîñòàÿ |
çàäà÷à, ñîâìåñòèòü îäíîâðåìåííî îòñóòñòâèå êîíòðîëÿ çà ïàðàìåòðàìè (äëÿ |
ñîâìåñòèìîñòè ñ ïðåäûäóùèìè âåðñèÿìè) è åå íàëè÷èå.  ðåçóëüòàòå |
êîìïðîìèññîâ ïîÿâèëñÿ âàðèàíò íåìíîãî îòëè÷àþùèéñÿ îò òðàäèöèîííî ïðèíÿòîãî |
â ÿçûêàõ C. |
|
Ãëàâíîå îòëè÷èå - ýòî òî, ÷òî ïàðàìåòðû, îïðåäåëÿåìûå ïðè îïðåäåëåíèè |
ïðîöåäóðû, íå áóäóò âîñïðèíèìàòüñÿ êîìïèëÿòîðîì äëÿ êîíòðîëÿ çà íèìè. Âî |
âñåõ ÿçûêàõ C äîïóñêàåòñÿ ñîâìåùåíèå ïðîòîòèïà ïðîöåäóðû è åå îáúÿâëåíèÿ. |
 C-- äëÿ òîãî, ÷òîáû âêëþ÷èëñÿ êîíòðîëü çà ïàðàìåòðàìè ñòåêîâîé ïðîöåäóðû, |
íàäî ýòó ïðîöåäóðó îáÿçàòåëüíî îáúÿâèòü. Íî íå âñÿêîå îáúÿâëåíèå ïðîöåäóðû |
áóäåò ñèãíàëîì êîìïèëÿòîðó î âêëþ÷åíèè êîíòðîëÿ çà ïàðàìåòðàìè ýòîé |
ïðîöåäóðû. Åñëè ïðè îáúÿâëåíèè â êðóãëûõ ñêîáêàõ íè÷åãî íå áóäåò, òî |
êîìïèëÿòîð íå áóäåò îòñëåæèâàòü ïàðàìåòðû, ïåðåäàâàåìûå ýòîé ïðîöåäóðå. Â |
C++ òàêîå îáúÿâëåíèå îçíà÷àåò, ÷òî ïðîöåäóðå íå ïåðåäàþòñÿ íèêàêèå |
ïàðàìåòðû. Â C-- äëÿ ýòîãî íàäî ïðè îáúÿâëåíèè ïðîöåäóðû â êðóãëûõ ñêîáêàõ |
îáÿçàòåëüíî íàïèñàòü void. Íàïðèìåð: |
|
int proc ( void ) ; |
|
Âñòðåòèâ òàêîå îáúÿâëåíèå ïðîöåäóðû, êîìïèëÿòîð áóäåò ñëåäèòü çà òåì, |
÷òîáû ýòîé ïðîöåäóðå íå áûëè ïåðåäàíû ïàðàìåòðû. |
|
Ïðè îáúÿâëåíèè ïðîöåäóðû èìåíà ïàðàìåòðîâ ìîæíî îïóñêàòü. Êàê èçâåñòíî, |
â C-- ïàðàìåòðû ïðîöåäóðû îäíîãî òèïà çàïèñûâàþòñÿ ÷åðåç çàïÿòóþ. Äëÿ ñìåíû |
òèïà èñïîëüçóþò òî÷êó ñ çàïÿòîé. Ïðè îáúÿâëåíèè ñìåíó òèïà ìîæíî |
ïðîèçâîäèòü è ïîñëå çàïÿòîé: |
|
void ptoc ( int a, b, c; word d ); |
void proc ( int, int, int, word ); |
void proc ( int, int, int; word ); |
|
Âñå ýòè ïðèìåðû îáúÿâëåíèé ÿâëÿþòñÿ èäåíòè÷íûìè è äîïóñòèìûìè. |
|
Äëÿ êîíòðîëÿ çà ïðîöåäóðàìè ñ ïåðåìåííûì ÷èñëîì ïàðàìåòðîâ áûë ââåäåí |
íîâûé äëÿ C-- ýëåìåíò ñèíòàêñèñà - ìíîãîòî÷èå èëè åãî åùå íàçûâàþò ýëëèïñ. |
Âîò êàê áóäåò âûãëÿäåòü îáúÿâëåíèå ïðîöåäóðû printf: |
|
void cdecl printf ( word, ... ); |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.11> |
11.11 Èñïîëüçîâàíèå ìàêðîêîìàíä. |
</A></B></FONT><FONT FACE="Courier"> |
|
Òåïåðü ëþáàÿ äèíàìè÷åñêàÿ ïðîöåäóðà ìîæåò áûòü èñïîëüçîâàíà êàê ìàêðîñ. |
Åñëè ïåðåä âûçîâîì äèíàìè÷åñêîé ïðîöåäóðû ïîñòàâèòü ñèìâîë <b>@</b>, òî êîä ýòîé |
ïðîöåäóðû áóäåò âñòàâëåí, à íå âûçâàí èíñòðóêöèåé CALL. |
|
Ïðè èñïîëüçîâàíèè ñòåêîâûõ äèíàìè÷åñêèõ ïðîöåäóð â êà÷åñòâå ìàêðîñîâ |
î÷èñòêà ñòåêà îò ïåðåäàííûõ ïàðàìåòðîâ ïðîèçâîäèòñÿ àññåìáëåðíîé |
èíñòðóêöèåé <b>ADD SP,SIZE_PARAMETRS</b> ñðàçó ïîñëå îêîí÷àíèÿ êîäà âñòàâëåííîãî |
ìàêðîñà. Ïîýòîìó, åñëè ýòà ïðîöåäóðà èñïîëüçîâàëà ôëàãè â êà÷åñòâå |
âîçâðàòà, òî îíè áóäóò ðàçðóøåíû. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.12> |
11.12 Ïåðåäà÷à ïàðàìåòðîâ â ñòåêîâûå ïðîöåäóðû ÷åðåç ðåãèñòðû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïðè ïåðåäà÷å ïàðàìåòðîâ ÷åðåç ðåãèñòðû, ÷àùå âñåãî ïîëó÷àåòñÿ áîëåå |
êîìïàêòíûé è áûñòðûé êîä. Íî ñîäåðæèìîå ðåãèñòðîâ ìîæåò áûòü ëåãêî |
ðàçðóøåíî. Åñëè â Âàøåé ïðîöåäóðå, êàêîé-òî èç ïàðàìåòðîâ èñïîëüçóåòñÿ |
îäíîêðàòíî äëÿ òîãî, ÷òîáû â íà÷àëå ïðîöåäóðû èíèöèàëèçèðîâàòü êàêîé-òî |
ðåãèñòð, òî Âû ìîæåòå ïåðåäàòü ýòî çíà÷åíèå â ïðîöåäóðó ñðàçó ÷åðåç |
ðåãèñòð, ìèíóÿ ñòàäèþ çàñîâûâàíèÿ è èçâëå÷åíèÿ ñîäåðæèìîãî â ñòåê. Ïðèìåð: |
|
int proc (int param1, param2, param3) |
{ |
(E)BX = param3; |
(E)BX.TEG_STRUCT.var = proc2 (param1,papra2); |
proc3 (param1,param2); |
} |
|
 ýòîì ïðèìåðå ïàðàìåòð param3 èñïîëüçóåòñÿ ëèøü äëÿ òîãî, ÷òîáû |
èíèöèàëèçèðîâàòü ðåãèñòð (E)BX, ïîýòîìó åãî ìîæíî ñðàçó ïåðåäàòü ÷åðåç |
ðåãèñòð: |
|
int proc (int param1, param2, (E)BX) |
{ |
(E)BX.TEG_STRUCT.var = proc2 (param1,papra2); |
proc3 (param1,param2); |
} |
|
Êàê Âû âèäèòå, ïðîöåäóðà íåìíîãî óïðîñòèëàñü. |
|
 ïðèíöèïå, ïîðÿäîê ðàñïîëîæåíèÿ ñòåêîâûõ è ðåãèñòðîâûõ ïàðàìåòðîâ íå |
ïðèíöèïèàëåí. Íî íàäî ïîìíèòü, ÷òî ñîäåðæèìîå ðåãèñòðîâ ìîæåò áûòü ëåãêî |
ðàçðóøåíî, è ïîýòîìó ëó÷øå âñåãî ðåãèñòðîâûå ïàðàìåòðû èíèöèàëèçèðîâàòü |
ëèøü ïîñëå òîãî, êàê áûëè çàñóíóòû â ñòåê âñå ñòåêîâûå ïàðàìåòðû. Äëÿ |
ïðîöåäóð òèïà <b>pascal</b> ðåãèñòðîâûå ïàðàìåòðû ëó÷øå ðàñïîëàãàòü ïîñëå |
ñòåêîâûõ ïàðàìåòðîâ. Äëÿ ïðîöåäóð òèïà <b>cdecl è stdcall</b> ñíà÷àëà ëó÷øå |
ðàñïîëàãàòü ðåãèñòðîâûå ïàðàìåòðû. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.13> |
11.13 Âûçîâ ïðîöåäóð ñ àäðåñîì â ðåãèñòðå. |
</A></B></FONT><FONT FACE="Courier"> |
|
 C-- äîïóñòèìî äåëàòü âûçîâ ïðîöåäóðû, àäðåñ êîòîðîé íàõîäèòñÿ â |
ðåãèñòðå. Ïàðàìåòðû äëÿ òàêîãî âûçîâà ïåðåäàþòñÿ òîëüêî ÷åðåç ñòåê. Òèï |
âûçîâà ïðîöåäóðû äëÿ ïðîãðàìì ïîä Windows <b>stdcall</b>, äëÿ îñòàëüíûõ <b>pascal</b>. |
Àäðåñ ïðîöåäóðû äëÿ 32-áèòíûõ ïðîãðàìì äîëæåí íàõîäèòñÿ â 32-áèòíîì |
ðåãèñòðå, à äëÿ 16-áèòíûõ ïðîãðàìì â 16-áèòíîì ðåãèñòðå. Ñ÷èòàåòñÿ, ÷òî |
òàêîé âûçîâ èìååò âîçâðàò òèïà <b>unsigned int</b>. Ïðèìåð: |
|
BX = # proc; |
BX (a); |
IF ( BX(b) == 0 ) AX=2; |
|
Âû ïîëó÷èòå ñëåäóþùèé êîä: |
|
test.c-- 8: BX=#proc; |
0104 BB1A01 mov bx,11Ah |
|
test.c-- 9: BX(a); |
0107 FF76FC push word ptr [bp-4] |
010A FFD3 call near bx |
|
test.c-- 10: IF (BX(b) == 0)AX=2; |
010C FF76FE push word ptr [bp-2] |
010F FFD3 call near bx |
0111 85C0 test ax,ax |
0113 7503 jne 118h |
0115 B80200 mov ax,2 |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.14> |
11.14 Âñòðîåííûå â êîìïèëÿòîð ïðîöåäóðû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Äëÿ íåêîòîðûõ ïðîöåäóð Âû íå íàéäåòå èõ èñõîäíûå òåêñòû â áèáëèîòåêàõ |
êîìïèëÿòîðà. Êîä ýòèõ ïðîöåäóð ãåíåðèðóåò êîìïèëÿòîð. Âîò ñïèñîê ýòèõ |
ïðîöåäóð: |
|
ABORT Ïðåêðàùåíèå âûïîëíåíèÿ ïðîãðàììû |
atan Âû÷èñëèòü àðêòàíãåíñ ÷èñëà |
atan2 Âû÷èñëèòü àðêòàíãåíñ ÷èñëà |
ATEXIT Çàðåãèñòðèðîâàòü ôóíêöèþ âûïîëíÿþùóþñÿ ïðè âûõîäå. |
cos Âîçâðàùàåò êîñèíóñ óãëà |
EXIT Çàêîí÷èòü ïðîãðàììó ñ êîäîì îøèáêè |
exp Âîçâðàùàåò ýêñïîíåíòó ÷èñëà |
inp/inportb Ñ÷èòàòü îäèí áàéò èç ïîðòà |
inport Ñ÷èòàòü ñëîâî èç ïîðòà |
inportd Ñ÷èòàòü äâîéíîå ñëîâî èç ïîðòà |
fabs Âîçâðàùàåò àáñîëþòíîå çíà÷åíèå ÷èñëà |
log Âû÷èñëÿåò íàòóðàëüíûé ëîãàðèôì ÷èñëà |
log10 Âû÷èñëÿåò äåñÿòè÷íûé ëîãàðèôì ÷èñëà |
outp/outportb Çàïèñàòü îäèí áàéò â ïîðò |
outport Çàïèñàòü ñëîâî â ïîðò |
outportd Çàïèñàòü äâîéíîå ñëîâî â ïîðò |
sin Âîçâðàùàåò ñèíóñ óãëà |
sqrt Èçâëå÷ü êâàäðàòíûé êîðåíü ÷åðåç FPU. |
tan Âîçâðàùàåò òàíãåíñ óãëà |
|
Ðàçìåùåíèå ýòèõ ïðîöåäóð íåïîñðåäñòâåííî â êîìïèëÿòîðå, ñâÿçàíî ñ òåì, |
÷òî â íàñòîÿùèé ìîìåíò êîìïèëÿòîð ìîæåò òàêèì îáðàçîì ãåíåðèðîâàòü áîëåå |
ýôôåêòèâíûé êîä, ÷åì åñëè áû ýòè ïðîöåäóðû ðàñïîëàãàëèñü â áèáëèîòåêàõ. |
 áóäóùåì, ïî ìåðå ðàçâèòèÿ êîìïèëÿòîðà, ýòè ïðîöåäóðû ïîñòåïåííî áóäóò |
âûíîñèòñÿ èç êîìïèëÿòîðà â áèáëèîòåêè. |
|
Íî íè÷òî íå ìåøàåò Âàì óæå ñåé÷àñ íàïèñàòü ñâîè îäíîèìåííûå |
áèáëèîòå÷íûå ïðîöåäóðû. Âñòðåòèâ îïðåäåëåíèå òàêîé ïðîöåäóðû, êîìïèëÿòîð íå |
áóäåò âûäàâàòü íèêàêèõ ñîîáùåíèå, îí ïðîñòî áóäåò ïðèìåíÿòü Âàø âàðèàíò |
ïðîöåäóðû. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.14.1> |
11.14.1 Ïðîöåäóðû ABORT, ATEXIT è EXIT. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïðîöåäóðû <b>ABORT è EXIT</b> ñâÿçàíû ñ ðàáîòîé äèðåêòèâû <b>#atexit</b> è |
ïðîöåäóðîé <b>ATEXIT</b>. Íàèáîëåå îïòèìàëüíóþ èõ ðåàëèçàöèþ è âçàèìíóþ |
èíòåãðàöèþ ìîæåò ñäåëàòü òîëüêî êîìïèëÿòîð. Èìåííî ïîýòîìó ýòè ïðîöåäóðû |
ïîääåðæèâàþòñÿ êîìïèëÿòîðîì. |
|
Ïðîöåäóðà <b>ATEXIT</b> - ðåãèñòðîâàÿ ïðîöåäóðà, êîòîðàÿ ðåãèñòðèðóåò |
ôóíêöèþ, àäðåñ êîòîðîé ïåðåäàåòñÿ åé â êà÷åñòâå ïàðàìåòðà, ò.å. ÷åðåç |
ðåãèñòð (E)AX, êàê ôóíêöèþ çàâåðøåíèÿ ïðîãðàììû. Ïðè óñïåøíîé ðåãèñòðàöèè |
<b>ATEXIT</b> âîçâðàùàåò 0. Âñåãî ìîæíî çàðåãèñòðèðîâàòü äî 16 ôóíêöèé. |
|
Çàâåðøàþùèå ôóíêöèè íå äîëæíû èìåòü ïàðàìåòðîâ è âîçâðàòà. Ýòè |
ôóíêöèè áóäóò âûïîëíÿòüñÿ â ïîðÿäêå îáðàòíîì î÷åðåäíîñòè ðåãèñòðàöèè â |
ñëó÷àå, åñëè Âû áóäåòå çàâåðøàòü ðàáîòó ïðîãðàììû ÷åðåç âûçîâû ïðîöåäóð |
<b>ABORT</b> èëè <b>EXIT</b> èëè çàêîí÷èòñÿ ðàáîòà ïðîöåäóðû <b>main</b>. Åñëè Âû |
çàâåðøèòå ðàáîòó ïðîãðàììû âûçîâîì ïðîöåäóðû <b>ExitProcess</b> ïîä Windows èëè |
âûçîâîì <b>AH=0x4C; $int 0x21</b> ïîä DOS, âûõîä èç ïðîãðàììû ïðîèçîéäåò áåç |
çàïóñêà çàðåãèñòðèðîâàííûõ ôóíêöèé. |
|
Ïðîöåäóðà <b>ABORT è EXIT</b>, åñëè íå âêëþ÷åíà äèðåêòèâà <b>#atexit</b> äåëàþò |
âûçîâ ïðîöåäóðû <b>ExitProcess</b> ïîä Windows è âûçîâ <b>AH=0x4C; $int 0x21</b> ïîä |
DOS. Ïðîöåäóðå <b>ABORT</b> íå ïåðåäàþòñÿ íèêàêèå ïàðàìåòðû, è îíà çàâåðøàåò |
ðàáîòó ïðîãðàììû ñ êîäîì âîçâðàòà 0. Ïðîöåäóðå <b>EXIT</b> ïåðåäàåòñÿ â |
êà÷åñòâå ïàðàìåòðà êîä âîçâðàòà, ñ êîòîðûì îíà è çàâåðøàåò ðàáîòó |
ïðîãðàììû. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.14.2> |
11.14.2 Ïðîöåäóðû inp/inportb, inport, inportd, outp/outportb, outport è |
outportd |
</A></B></FONT><FONT FACE="Courier"> |
|
Ýòè ïðîöåäóðû âñåãäà âñòàâëÿþòñÿ â êîä êàê ìàêðîñû, ò.å. äëÿ ýòèõ |
ïðîöåäóð íèêîãäà íå ãåíåðèðóåòñÿ âûçîâ ïðîöåäóðû. Â çàâèñèìîñòè îò |
çíà÷åíèÿ ïîðòà, ñ êîòîðûì ðàáîòàþò ýòè ïðîöåäóðû, ãåíåðèðóåòñÿ ðàçíûé |
êîä. Âñå ýòî ïîçâîëÿåò ïîëó÷àòü áîëåå êîìïàêòíûé êîä. |
|
Ïðîöåäóðû ÷òåíèÿ èç ïîðòà èìåþò òàêîé ïðîòîòèï: |
|
byte inp ( word port ); |
word inport ( word port ); |
dword inportd ( word port ); |
|
Ïðîöåäóðû çàïèñè â ïîðò èìåþò òàêîé ïðîòîòèï: |
|
void outp ( byte val; word port ); |
void outport ( word val; word port ); |
void outportd ( dword val; word port ); |
|
Èìåíà ïðîöåäóð inp è inportb, òàêæå êàê è èìåíà outp è outportb |
ÿâëÿþòñÿ ñèíîíèìàìè. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.14.3> |
11.14.3 Ïðîöåäóðû äëÿ ðàáîòû ñ âåùåñòâåííûìè ÷èñëàìè. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ýòè ïðîöåäóðû ðåàëèçóþòñÿ êîìïèëÿòîðîì è âñåãäà âñòàâëÿþòñÿ â êîä êàê |
ìàêðîñû, ò.å. äëÿ íèõ íèêîãäà íå ãåíåðèðóåòñÿ âûçîâ ïðîöåäóðû. Êðîìå |
ýòîãî, åñëè ïàðàìåòðîì îäíîé ïðîöåäóðû ÿâëÿåòñÿ âûçîâ äðóãîé, òî |
ðåçóëüòàò ðàáîòû âòîðîé ïðîöåäóðû îñòàåòñÿ â ñòåêå FPU, à ïåðâàÿ |
ïðîöåäóðà èñïîëüçóåò ýòîò ðåçóëüòàò íåïîñðåäñòâåííî èç ñòåêà. Òàêèì |
îáðàçîì ïîëó÷àþòñÿ áîëåå êîìïàêòíûé êîä. Âîò âûìûøëåííûé ïðèìåð: |
|
test.c-- 7: f = sin( sqrt(1) ); |
0100 D9061C01 fld [11Ch] |
0104 D9FA fsqrt |
0106 D9FE fsin |
0108 D91E2001 fstp [120h] |
010C 9B fwait |
|
Ýòè ïðîöåäóðû èìåþò ñëåäóþùèé ïðîòîòèï: |
|
float atan ( float val ); |
float atan ( float val, val2 ); |
float cos ( float val ); |
float exp ( float val ); |
float fabs ( float val ); |
float log ( float val ); |
float log10 ( float val ); |
float sin ( float val ); |
float sqrt ( float val ); |
float tan ( float val ); |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.15.1> |
11.15 Êëàññû. |
|
11.15.1 Îáúÿâëåíèå ïðîöåäóð â ñòðóêòóðàõ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ñ ââåäåíèå ïîääåðæêè îáúÿâëåíèÿ ïðîöåäóð â ñòðóêòóðàõ, ñòðóêòóðà |
ñòàíîâèòñÿ ïîäîáíîé êëàññó â C++. Ò.å. òàêàÿ ïðîöåäóðà ñòàíîâèòñÿ ìåòîäîì |
êëàññà. Ïðèìåð: |
|
struct Point // îáúÿâëåíèå êëàññà |
{ |
int x; // ýëåìåíòû äàííûõ |
int y; // êëàññà òèïà Point |
void SetX(int); // îáúÿâëåíèå ìåòîäîâ |
void SetY(int); // êëàññà Point |
}; |
|
void Point::SetX(int _x) //îïðåäåëåíèå ïðîöåäóðû êëàññà Point |
{ |
IF((_x>=0)&&(_x<=MAX_X)) x=_x; |
// ïåðåìåííûå x, y ÿâëÿþòñÿ ÷ëåíàìè ýòîãî êëàññà è ïîýòîìó äîñòóï ê íèì èç |
// ïðîöåäóð ýòîãî æå êëàññà îñóùåñòâëÿåòñÿ íàïðÿìóþ. |
} |
|
void main() |
Point p; //îïðåäåëÿåì ñòðóêòóðó â ñòåêå |
{ |
p.y = p.x = 0; |
p.SetX(1); |
} |
|
Ïðè âûçîâå ïðîöåäóðû ÿâëÿþùåéñÿ ìåòîäîì êëàññà åé íåÿâíûì îáðàçîì |
ïåðåäàåòñÿ àäðåñ ýòîãî êëàññà (ñòðóêòóðû). Â ñàìîé ïðîöåäóðå ýòîò àäðåñ |
äîñòóïåí ÷åðåç èìÿ ïàðàìåòðè÷åñêîé ïåðåìåííîé <b>this</b>. Ýòó ïåðåìåííóþ |
àâòîìàòè÷åñêè ãåíåðèðóåò êîìïèëÿòîð. Åñëè â îáúÿâëåíèå ïðîöåäóðû â |
ñòðóêòóðå óêàçàòü êëþ÷åâîå ñëîâî <b>static</b>, òî òàêîé ïðîöåäóðå àäðåñ |
êëàññà íå ïåðåäàåòñÿ è ïåðåìåííàÿ <b>this</b> íå ãåíåðèðóåòñÿ. |
|
Ïðîöåäóðà îáúÿâëåííàÿ â ñòðóêòóðå ìîæåò áûòü äèíàìè÷åñêîé. Äëÿ ýòîãî, |
ïðè åå îïðåäåëåíèè, â ñàìîì åå íà÷àëå, íàäî íàïèñàòü ñèìâîë äâîåòî÷èÿ <b>:</b> |
(òàêæå êàê è äëÿ îáû÷íûõ äèíàìè÷åñêèõ ïðîöåäóð). Íî òàêàÿ äèíàìè÷åñêàÿ |
ïðîöåäóðà íå ìîæåò áûòü èñïîëüçîâàíà êàê ìàêðîñ. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.15.2> |
11.15.2 Íàñëåäîâàíèå. |
</A></B></FONT><FONT FACE="Courier"> |
|
 C-- ïîääåðæèâàþòñÿ ïðîñòûå è ìíîæåñòâåííûå íàñëåäîâàíèÿ. Îáúÿâëåíèå |
ñòðóêòóðû ñ íàñëåäîâàíèåì èìååò ñëåäóþùèé ñèíòàêñèñ: |
|
struct Derived : Base1, Base2, ... Basen |
{ |
int x0; |
}; |
|
×èñëî áàçîâûõ ñòðóêòóð â ïðîèçâîäíîì íå îãðàíè÷åíî. Ïðè ìíîæåñòâåííîì |
íàñëåäîâàíèè ñòðóêòóðà ìîæåò íàñëåäîâàòü äâà è áîëåå ýêçåìïëÿðà áàçîâîé |
ñòðóêòóðû. Ïðè ýòîì âîçíèêàåò íåîäíîçíà÷íîñòü. Ïðèìåð: |
|
struct A |
{ |
int x,y; |
. . . |
}; |
|
struct B : A //ñòðóêòóðà <b>B</b> íàñëåäóåò <b>A</b> |
{ |
. . . |
|
}; |
|
struct C : A //ñòðóêòóðà <b>C</b> íàñëåäóåò <b>A</b> |
{ |
. . . |
}; |
|
struct D : B, C //ñòðóêòóðà <b>D</b> íàñëåäóåò <b>B è C</b> |
{ |
. . . |
}; |
|
void main() |
D d; //âûäåëÿåì äëÿ ñòðóêòóðû <b>D</b> ïàìÿòü â ñòåêå è ïðèñâàèâàåì åé èìÿ <b>d</b> |
{ |
d.x0=0; |
|
 ýòîì ïðèìåðå ñòðóêòóðà <b>D</b> íàñëåäóåò äâà ýêçåìïëÿðà ñòðóêòóðû <b>A</b> è |
â íåé íàõîäÿòñÿ äâà ýëåìåíòà ñ èìåíåì <b>x0</b>. Êîìïèëÿòîðû C++ ïðè çàïèñè |
òèïà <b>d.x0=0</b> âûäàþò ñîîáùåíèå îá îøèáêå. C-- ýòó çàïèñü îáðàáàòûâàåò, |
ïðèñâàèâàíèå ïðîèçâîäèòñÿ ïî óìîë÷àíèþ â ýëåìåíò èç ïîñëåäíåé áàçîâîé |
ñòðóêòóðû, èìåþùåé ýëåìåíò <b>x0</b>. Äëÿ òîãî ÷òîáû ïîëó÷èòü äîñòóï êî |
âòîðîìó ýëåìåíòó <b>x0</b> (ôèçè÷åñêè ýòîò ýëåìåíò íàõîäèòñÿ â ñòðóêòóðå |
ïåðâûì), íåîáõîäèìî ïðèìåíèòü îïåðàöèþ ðàçðåøåíèÿ âèäèìîñòè: |
|
d.B::x0=0; |
|
Èç âñåãî ýòîãî ñëåäóåò, ÷òî çàïèñè: |
|
d.x0=0; |
è |
d.C::x0=0; |
|
ÿâëÿþòñÿ ðàâíîçíà÷íûìè. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=11.15.3> |
11.15.3 Íàñëåäîâàíèå ïðîöåäóð. |
</A></B></FONT><FONT FACE="Courier"> |
|
Åñëè â áàçîâîì êëàññå åñòü ïðîöåäóðà, à â ïðîèçâîäíîì êëàññå Âû ýòó |
ïðîöåäóðó ïåðåîïðåäåëèëè, òî ýòà ïðîöåäóðà áóäåò ïåðåîïðåäåëåíà è â |
áàçîâîì êëàññå. Òàêèì îáðàçîì ïðîöåäóðà îïðåäåëåííàÿ â áàçîâîì êëàññå |
áóäåò ïîòåðÿíà. Ïðèìåð: |
|
struct Point // áàçîâûé êëàññ |
{ |
int x; // ýëåìåíòû äàííûõ |
int y; // êëàññà òèïà Point |
void SetX(int); // îáúÿâëåíèå ìåòîäîâ |
void SetY(int); // êëàññà Point |
}; |
|
void Point::SetX(int _x) // îïðåäåëåíèå ïðîöåäóðû êëàññà Point |
{ |
IF((_x>=0)&&(_x<=MAX_X)) x=_x; |
} |
|
struct Point2 : Point // ïðîèçâîäíûé êëàññ |
{ |
int x2; |
} |
|
struct Point3 : Point // åùå îäèí ïðîèçâîäíûé êëàññ |
{ |
int z; |
} |
|
void Point3::SetX(int _x) // â ýòîì ïðîèçâîäíîì êëàññå ïåðåîïðåäåëÿåì |
{ // ïðîöåäóðó SetX |
IF((_x>=80)&&(_x<=MAX_X)) x=_x; |
} |
|
Ïðîöåäóðà SetX, îïðåäåëåííàÿ â áàçîâîì êëàññå Point, òåïåðü áóäåò |
íåäîñòóïíà. Âìåñòî êîäà îïðåäåëåííîãî â ýòîì êëàññå, áóäåò âûçûâàòüñÿ êîä |
ïðîöåäóðû, îïðåäåëåííûé â íàñëåäóåìîì êëàññå Point3. Ïðè âûçîâå ïðîöåäóðû |
SetX èç äðóãîãî ïðîèçâîäíîãî êëàññà Point2 áóäåò òàêæå âûçûâàòüñÿ êîä |
ïðîöåäóðû, îïðåäåëåííûé â ïðîèçâîäíîì êëàññå Point3. Ïåðåîïðåäåëÿÿ |
ïðîöåäóðó òàêèì îáðàçîì, Âû çàìåíèòå êîä ýòîé ïðîöåäóðû â áàçîâîì êëàññå è |
âî âñåõ åãî íàñëåäóåìûõ êëàññàõ. |
|
Åñëè Âàì íåîáõîäèìî, ÷òîáû êîä íîâîé ïðîöåäóðû áûë äîñòóïåí |
îäíîâðåìåííî ñ êîäîì ñòàðîé ïðîöåäóðû, òî â ïðîèçâîäíîì êëàññå Âàì |
íåîáõîäèìî ñäåëàòü åùå îäíî îáúÿâëåíèå ýòîé ïðîöåäóðû. Ïðèìåð: |
|
struct Point // áàçîâûé êëàññ |
{ |
int x; // ýëåìåíòû äàííûõ |
int y; // êëàññà òèïà Point |
void SetX(int); // îáúÿâëåíèå ìåòîäîâ |
void SetY(int); // êëàññà Point |
}; |
|
void Point::SetX(int _x) // îïðåäåëåíèå ïðîöåäóðû êëàññà Point |
{ |
IF((_x>=0)&&(_x<=MAX_X)) x=_x; |
} |
|
struct Point2 : Point // ïðîèçâîäíûé êëàññ |
{ |
int x2; |
} |
|
struct Point3 : Point // åùå îäèí ïðîèçâîäíûé êëàññ |
{ |
int z; |
void SetX(int); // â íàñëåäóåìîì êëàññå äåëàåì åùå îäíî îáúÿâëåíèå |
// ïðîöåäóðû SetX |
} |
|
void Point3::SetX(int _x) // â ýòîì ïðîèçâîäíîì êëàññå ïåðåîïðåäåëÿåì |
{ // ïðîöåäóðó SetX |
IF((_x>=80)&&(_x<=MAX_X)) x=_x; |
EDI=this; |
EDI.Point.SetX(_x); // äåëàåì âûçîâ îäíîèìåííîé ïðîöåäóðû èç |
// áàçîâîãî êëàññà |
} |
|
Òåïåðü èç ïðîèçâîäíîãî êëàññà Point3 Âàì äîñòóïíû äâå ðàçëè÷íûå |
ïðîöåäóðû ñ îäíèì èìåíåì SetX. À èç áàçîâîãî êëàññà Point è èç äðóãîãî |
ïðîèçâîäíîãî êëàññà Point2 áóäåò ïî ïðåæíåìó äîñòóïåí òîëüêî áàçîâûé |
âàðèàíò ïðîöåäóðû SetX. |
<A href="#contents11" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.1> |
12. Òèïû âûõîäíûõ ôàéëîâ. |
|
12.1 Âûõîäíûå ôàéëû òèïà COM. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ýòîò òèï âûõîäíîãî ôàéëà ïîëó÷àåòñÿ àâòîìàòè÷åñêè ïî óìîë÷àíèþ. |
|
Èçíà÷àëüíî C-- ìîã äåëàòü òîëüêî ôàéëû ôîðìàòà òèïà COM.  íàñòîÿùåå |
âðåìÿ ïîÿâèëàñü âîçìîæíîñòü ïîëó÷àòü ôàéëà òèïà EXE ñ ìîäåëÿìè ïàìÿòè tiny |
è small äëÿ 16-áèòíîãî êîäà, à òàêæå 32-áèòíûå äëÿ DOS è Windows. Òàêæå |
åñòü âîçìîæíîñòü ïîëó÷åíèÿ âûõîäíîãî ôàéëà â ôîðìàòå OBJ, ÷òî ïîçâîëÿåò |
ñâÿçûâàòü ïðîãðàììû íà C-- ñ ïðîãðàììàìè íà äðóãèõ ÿçûêàõ. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.2> |
12.2 Âûõîäíûå ôàéëû òèïà EXE. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ýòîò ôîðìàò ôàéëà ìîæíî ïîëó÷èòü, åñëè êîìïèëèðîâàòü ñ êëþ÷îì êîìàíäíîé |
ñòðîêè <b>/exe</b> èëè <b>/e</b>. |
|
Âîçìîæíî òàêæå ïîääåðæêà EXE-ôîðìàòà ÷åðåç âûõîäíîé ôàéë ôîðìàòà OBJ, |
êîòîðûé ìîæíî çàòåì îáðàáîòàòü ëèíêîâùèêîì, íå âõîäÿùèì â ïàêåò C--. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.3> |
12.3 Âûõîäíîé ôàéë *.EXE ñ ìîäåëüþ ïàìÿòè tiny. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ôàêòè÷åñêè êîä ôàéëà *.exe ìîäåëè <b>tiny</b> íè÷åì íå îòëè÷àåòñÿ îò êîäà |
*.com. Â ñóùíîñòè, ýòî òîò æå com-ôàéë, ê êîòîðîìó äîáàâëåí 32-áàéòíûé |
çàãîëîâîê exe-ôàéëà. Åäèíñòâåííîå îòëè÷èå âîçíèêàåò, êîãäà Âû êîìïèëèðóåòå |
ôàéë ñ äèðåêòèâîé <b>?resize TRUE</b>. Â com-ôàéëå, ïî ýòîé äèðåêòèâå, â êîä |
ïðîãðàììû äîáàâëÿåòñÿ ñîîòâåòñòâóþùèé êîä, èçìåíÿþùèé ðàçìåð äîñòóïíîé |
ïàìÿòè. Â exe-ôàéëå äëÿ ýòèõ öåëåé áóäåò ñêîððåêòèðîâàí çàãîëîâîê |
exe-ôàéëà. |
|
×òîáû ïîëó÷èòü exe-ôàéë ñ ìîäåëüþ ïàìÿòè <b>tiny</b>, íàäî çàïóñòèòü |
êîìïèëÿòîð ñ êëþ÷îì â êîìàíäíîé ñòðîêå <b>/TEXE</b>. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.4> |
12.4 Îáúåêòíûé âûõîäíîé ôàéë OBJ. |
</A></B></FONT><FONT FACE="Courier"> |
|
 íàñòîÿùåå âðåìÿ C-- ìîæåò òîëüêî ñîçäàâàòü OBJ-ôàéëû, íî íå ìîæåò èõ |
êîìïîíîâàòü. |
|
Ðàíåå C-- ñîçäàâàë obj-ôàéëû, êîòîðûå ìîãëè áûòü ïîäêëþ÷åíû ê ïðîåêòàì |
ñîçäàííûì íà äðóãèõ ÿçûêàõ, ò.å. âåäîìûå (slave) ìîäóëè. Ïðè÷åì èç C-- |
ìîäóëåé äëÿ îñíîâíîãî ïðîåêòà áûëè äîñòóïíû òîëüêî ïðîöåäóðû è ýòè |
ïðîöåäóðû íå äîëæíû áûëè èñïîëüçîâàòü ãëîáàëüíûå ïåðåìåííûå. |
|
Òåïåðü æå C-- ìîæåò ñîçäàâàòü îñíîâíîé ìîäóëü (master), êîòîðûé ìîæåò |
áûòü ñëèíêîâàí â ñàìîñòîÿòåëüíûé ôàéë. |
|
Äëÿ obj-ôàéëîâ ïîÿâèëàñü âîçìîæíîñòü èñïîëüçîâàòü âíåøíèå (extern) |
ïðîöåäóðû, ïåðåìåííûå èëè ñòðóêòóðû. Äëÿ ýòîãî äîñòàòî÷íî èõ îáúÿâèòü êàê |
extern. Ïðè÷åì êëþ÷åâîå ñëîâî extern äîëæíî áûòü âñåãäà ïåðâûì. Ïðèìåð |
îáúÿâëåíèÿ âíåøíèõ îáúåêòîâ: |
|
extern void cdecl _printf(); // îáúÿâëåíèå âíåøíåé ïðîöåäóðû _printf èìåþùåé |
// òèï cdecl è òèï âîçâðàòà void |
extern int buts,cubs; // îáúÿâëåíèå äâóõ âíåøíèõ ïåðåìåííûõ òèïà int |
extern struct IPXL ipxl; // îáúÿâëåíèå âíåøíåé ñòðóêòóðû ipxl èìåþùåé òåã |
// IPXL, ïðè÷åì òåã ýòîé ñòðóêòóðû äîëæåí áûòü |
// îïèñàí ðàíåå. |
|
Ïîÿâëåíèå âîçìîæíîñòè îáúÿâëÿòü âíåøíèå îáúåêòû ïîçâîëÿåò ïîäêëþ÷àòü ê |
obj-ìîäóëþ íà C-- ìîäóëè íàïèñàííûå íà äðóãèõ ÿçûêàõ èëè ïîäêëþ÷àòü ê |
ïðîãðàììå íà C-- ïðîöåäóðû èç áèáëèîòåê íà äðóãèõ ÿçûêàõ. Ïðè îáúÿâëåíèè |
âíåøíèõ îáúåêòîâ î÷åíü âàæíî ïðàâèëüíî óêàçàòü òèï ïðîöåäóðû è åå èìÿ. Åñëè |
Âû áóäåòå èñïîëüçîâàòü âíåøíèå ïðîöåäóðû, íàïèñàííûå íà C òî ÷àùå âñåãî, |
Âàì íóæíî áóäåò óêàçûâàòü ìîäèôèêàòîð <b>cdecl</b>, à ê èìåíè ïðîöåäóðû èëè |
ïåðåìåííîé äîáàâëÿòü ïðåôèêñ <b>_</b>. |
|
Èç îñíîâíîãî (master) obj-ôàéëà íàïèñàííîãî íà C-- äëÿ äðóãèõ |
obj-ìîäóëåé äîñòóïíû âñå ïðîöåäóðû, ãëîáàëüíûå ïåðåìåííûå è ãëîáàëüíûå |
ñòðóêòóðû. |
|
×òîáû ïîëó÷èòü âåäîìûé obj-ìîäóëü ïðè êîìïèëÿöèè íàäî èñïîëüçîâàòü êëþ÷ |
<b>/sobj</b>. |
|
C-- ìîæåò ñîçäàâàòü obj-ôàéëû ñ ìîäåëüþ ïàìÿòè tiny è small. Ïî |
óìîë÷àíèþ ñîçäàþòñÿ ìîäóëè ñ ìîäåëüþ tiny. ×òîáû ïîëó÷èòü obj-ôàéë ñ |
ìîäåëüþ ïàìÿòè small íàäî çàïóñòèòü êîìïèëÿòîð ñ êëþ÷àìè <b>/obj è /exe</b>. |
|
Äëÿ ñîçäàíèÿ obj-ôàéëîâ äëÿ 32-áèòíîãî DOS â êîìàíäíîé ñòðîêå Âàì |
íåîáõîäèìî óêàçàòü êëþ÷è <b>/d32 è /obj</b>. Èñïîëüçîâàòü ïîëó÷åííûé obj-ôàéë ìíå |
óäàëîñü ëèøü ñ ïîìîùüþ wlink è ðàñøèðèòåëÿ zrdx.exe. |
|
Ñîçäàíèå obj-ôàéëîâ ïîä windows íå ïðåäóñìîòðåíî. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.5.1> |
12.5 COM ôàéë symbiosis. |
|
12.5.1 ÑÈÌÁÈÎÇ - ÷òî ýòî òàêîå? |
</A></B></FONT><FONT FACE="Courier"> |
|
Òðàíñëÿòîð C-- èìååò êëþ÷, ïîçâîëÿþùèé äîáàâëÿòü êîìïèëèðóåìóþ |
ïðîãðàììó ê êîíöó óæå èìåþùåãîñÿ COM ôàéëà. Ýòî íàçûâàþò COM-ôàéë |
Symbiosis. Êîãäà òàêàÿ ïðîãðàììà çàïóñêàåòñÿ, óïðàâëåíèå ñíà÷àëà ïîëó÷àåò |
äîáàâëåííûé êîä C--, è òîëüêî ïîñëå âûïîëíåíèÿ åãî ïðîöåäóðû main() |
óïðàâëåíèå ïîëó÷èò ïåðâîíà÷àëüíûé êîä COM-ôàéëà. |
|
Åñëè äîáàâëåííûé âàìè êîä çàâåðøàåòñÿ EXIT() èëè ABORT(), ïðîãðàììà |
ïðåêðàòèòñÿ, è ïåðâîíà÷àëüíûé êîä COM-ôàéëà íå áóäåò âûïîëíåí. Ýòî |
ïîçâîëÿåò ïðîãðàììå, äîáàâëåííîé ê COM ôàéëó, îïðåäåëÿòü, áóäåò ëè |
óïðàâëåíèå ïåðåäàíî íà ïåðâîíà÷àëüíûé êîä. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.5.2> |
12.5.2 Êàê ýòî äåëàòü. |
</A></B></FONT><FONT FACE="Courier"> |
|
×òîáû ñäåëàòü ýòî, Âû äîëæíû èñïîëüçîâàòü êëþ÷ <b>/SYM</b> â êîìàíäíîé |
ñòðîêå êîìïèëÿòîðà, â êîòîðîé óêàçûâàåòñÿ ïîëíîå èìÿ COM-ôàéëà, ê |
êîòîðîìó ÷òî-òî äîáàâëÿåòñÿ. Ïðè ýòîì îðèãèíàë COM-ôàéëà íå ìåíÿåòñÿ, à |
íîâûé ôàéë ñîäåðæèò åãî â ñåáå. Íàïðèìåð, ÷òîáû îòêîìïèëèðîâàòü ïðîãðàììó |
HELLO.C-- ê êîíöó êîïèè C:\command.ñîì èñïîëüçóþò ñëåäóþùóþ êîìàíäó: |
|
C-- /SYM C:\COMMAND.COM HELLO.C-- |
|
Áóäåò ñîçäàí âûõîäíîé ôàéë HELLO.COM . |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.5.3> |
12.5.3 Èñïîëüçîâàíèå. |
</A></B></FONT><FONT FACE="Courier"> |
|
Âû ìîæåòå, âåðîÿòíî, ïðèäóìàòü áîëüøîå êîëè÷åñòâî ïóòåé èñïîëüçîâàíèÿ |
ýòîé ôóíêöèè, òèïà: |
|
- Äîáàâëåíèå çàùèòû ñ èñïîëüçîâàíèåì ïàðîëÿ ê íåêîòîðûì |
ñïåöèàëüíûì COM ôàéëàì. |
- Óìåíüøåíèå ïàìÿòè, äîñòóïíîé COM ôàéëó ïðè çàïóñêå. |
- Èíèöèàëèçàöèÿ ðåæèìà âèäåî äëÿ COM ôàéëà. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.5.4> |
12.5.4 Çëîóïîòðåáëåíèÿ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ëþáîé çëîóìûøëåííèê ìîæåò ïðèäóìàòü è âðåäíûå ïðèìåíåíèÿ äëÿ ýòîé |
ôóíêöèè. Íàèáîëåå î÷åâèäíîå èç íèõ - ñîçäàíèå òðîÿíñêèõ êîíåé. ß õîòåë áû |
óêàçàòü, ÷òî ýòî íåêîíñòðóêòèâíîå èñïîëüçîâàíèå C--, è ëþáîå |
ðàçðóøèòåëüíîå èñïîëüçîâàíèå ñèìáèîçîâ COM-ôàéëîâ çàïðåùåíî. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.6> |
12.6 SYS - äðàéâåðû óñòðîéñòâ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Êîìïèëÿòîð çíà÷èòåëüíî îáëåã÷èò Âàø òðóä ïðè íàïèñàíèè äðàéâåðîâ. |
Êîìïèëÿòîð ñàì ñîçäàñò çàãîëîâîê äðàéâåðà è ïðîöåäóðû <b>ÑÒÐÀÒÅÃÈß</b> è |
<b>ÏÐÅÐÛÂÀÍÈÅ</b>. Âàì îñòàåòñÿ ëèøü íàïèñàòü êîä îáðàáîòêè êîìàíä. |
|
×òî áû îòêîìïèëèðîâàòü ôàéë äðàéâåðà óñòðîéñòâà, íàäî äîáàâèòü â |
êîìàíäíóþ ñòðîêó êëþ÷ <b>/SYS</b>. Êðîìå òîãî, ïîÿâèëèñü íîâûå äèðåêòèâû |
êîìïèëÿòîðó, êîòîðûå äåéñòâóþò òîëüêî ñ ýòèì êëþ÷îì. Âîò îíè: |
|
<b>?sysattribute çíà÷åíèå</b> - ýòà äèðåêòèâà ïåðåäàåò êîìïèëÿòîðó |
àòðèáóò ñîçäàâàåìîãî äðàéâåðà. Ïî óìîë÷àíèþ óñòàíàâëèâàåòñÿ çíà÷åíèå |
0x2000. |
|
<b>?sysname <òåêñòîâàÿ ñòðîêà></b> - ýòà äèðåêòèâà ïåðåäàåò êîìïèëÿòîðó |
èìÿ áóäóùåãî äðàéâåðà. Ïî óìîë÷àíèþ ïðèñâàèâàåòñÿ èìÿ "NO_NAME". Äëèíà |
èìåíè íå áîëåå 8 ñèìâîëîâ. |
|
<b>?syscommand command_0,command_1, ... command_n;</b> - ýòà äèðåêòèâà |
ÿâëÿåòñÿ îáÿçàòåëüíîé. Ïî ýòîé äèðåêòèâå êîìïèëÿòîðó ïåðåäàåòñÿ ñïèñîê èìåí |
ïðîöåäóð îáðàáîòêè êîìàíä äðàéâåðà. Èìåíà ðàçäåëåíû çàïÿòûìè. Ñïèñîê äîëæåí |
çàêàí÷èâàòüñÿ ñèìâîëîì òî÷êà-ñ-çàïÿòîé. Ìîæíî ïåðåäàòü íå áîëåå 25 êîìàíä. |
Åñëè êàêàÿ-òî êîìàíäà íå èìååò êîäà ïîääåðæêè, òî â ñïèñîê íàäî çàïèñàòü |
ñëîâî NONE. |
|
Ïî óìîë÷àíèþ êîìïèëÿòîð äëÿ äðàéâåðà íå ñîçäàåò ñòåê. Äðàéâåð ìîæåò |
ïîëüçîâàòüñÿ ñèñòåìíûì ñòåêîì. Íî, ãîâîðÿò, ÷òî îí èìååò ìàëåíüêóþ ãëóáèíó. |
Åñëè Âàøè ïðîöåäóðû àêòèâíî èñïîëüçóþò ñòåê, è Âû íå íàäååòåñü íà ñèñòåìíûé, |
òî äèðåêòèâîé ?stack <âåëè÷èíà> ìîæíî çàñòàâèòü äðàéâåð ïîëüçîâàòüñÿ ñâîèì |
ñòåêîì. |
|
Âàøèì ïðîöåäóðàì îáðàáîòêè êîìàíä ïðè ïåðåäà÷å óïðàâëåíèÿ â ðåãèñòðàõ |
ES:BX áóäåò ïåðåäàí àäðåñ çàãîëîâêà çàïðîñà. Ðåãèñòð DS ðàâåí CS. Ïðè |
âîçâðàòå óïðàâëåíèÿ âàøè ïðîöåäóðû äîëæíû ñîõðàíèòü ðåãèñòð DS. Â ðåãèñòðå |
AX äîëæåí íàõîäèòüñÿ êîä âîçâðàòà. Îñòàëüíûå ðåãèñòðû ìîãóò áûòü |
èñïîëüçîâàíû ïðîèçâîëüíûì îáðàçîì. |
|
Ïðîöåäóðó îáðàáîòêè êîìàíäû èíèöèàëèçàöèè æåëàòåëüíî ðàñïîëàãàòü |
ïîñëåäíåé (÷òîáû èìåòü âîçìîæíîñòü îòäàòü àäðåñíîå ïðîñòðàíñòâî çàíèìàåìîå |
ýòîé ïðîöåäóðîé îïåðàöèîííîé ñèñòåìå). Ïåðåä ýòîé ïðîöåäóðîé, åñëè Âû â |
äðóãèõ ïðîöåäóðàõ îáðàáîòêè êîìàíä èñïîëüçóåòå äèíàìè÷åñêèå ïðîöåäóðû, |
îáÿçàòåëüíî äîëæíà áûòü äèðåêòèâà <b>?setdinproc</b>. Ãëîáàëüíûå ïåðåìåííûå äîëæíû |
áûòü îáÿçàòåëüíî ïðîèíèöèàëèçèðîâàíû. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.7> |
12.7 Êîìïèëÿöèÿ êîäà ðàñøèðèòåëåé ROM-BIOS. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ðàñøèðèòåëè ROM-BIOS (BIOS âèäåîêîíòðîëëåðîâ, ñåòåâûõ êàðò...) èìåþò |
îïðåäåëåííóþ ñòðóêòóðó è òðåáîâàíèÿ. C-- òåïåðü ìîæåò îáëåã÷èòü Âàì ïðîöåññ |
ñîçäàíèÿ êîäà ROM-BIOS. Åñëè çàïóñòèòü êîìïèëÿòîð íà êîìïèëÿöèþ ñ êëþ÷îì |
êîìàíäíîé ñòðîêè <b>/ROM</b>, òî êîìïèëÿòîð ñîçäàñò ñèãíàòóðó (çàãîëîâîê) |
ROM-BIOS, çàïîëíèò îñòàâøååñÿ ñâîáîäíîå ìåñòî äî óêàçàííîãî ðàçìåðà ÏÇÓ |
êîäîì çàïîëíåíèÿ, ïîäñ÷èòàåò è ñêîððåêòèðóåò êîíòðîëüíóþ ñóììó ÏÇÓ. |
|
Äëÿ ýòîãî ðåæèìà êîìïèëÿöèè åñòü íåñêîëüêî ñïåöèôè÷åñêèõ äèðåêòèâ: |
|
1. <b>?sizerom value</b> - ýòà äèðåêòèâà ñîîáùàåò êîìïèëÿòîðó ðàçìåð ÏÇÓ â |
áàéòàõ. Åñëè ýòà äèðåêòèâà íå óêàçàíà, òî êîìïèëÿòîð ñàì âûáåðåò |
ìèíèìàëüíûé ïîäõîäÿùèé ðàçìåð ÏÇÓ èç ðÿäà: 1024, 2048, 4096, 8192, 16384, |
32762 èëè 65536. Ñâîáîäíîå îò êîäà è äàííûõ ìåñòî áóäóò çàïîëíåíû äî êîíöà |
ðàçìåðà ÏÇÓ áàéòîì çàïîëíåíèÿ îïðåäåëÿåìîãî äèðåêòèâîé <b>?aligner</b>. Ïî |
óìîë÷àíèþ îí ðàâåí íóëþ, äëÿ ÐÏÇÓ òèïà 27õõõ ýòîò áàéò èìååò ñìûñë ñäåëàòü |
ðàâíûì 0xFF. Ïîñëåäíèé áàéò ÏÇÓ áóäåò ñêîððåêòèðîâàí êîìïèëÿòîðîì òàêèì |
îáðàçîì, ÷òîáû êîíòðîëüíàÿ ñóììà ðàâíÿëàñü íóëþ. |
|
2. <b>?movedatarom TRUE/FALSE</b> - ýòà äèðåêòèâà ñîîáùàåò êîìïèëÿòîðó åñòü ëè |
íåîáõîäèìîñòü êîïèðîâàòü äàííûå èç ÏÇÓ â ÎÇÓ. Ïî óìîë÷àíèþ îíà óñòàíîâëåíà |
â <b>FALSE</b>. Åñëè ýòó äèðåêòèâó îïðåäåëèòü <b>TRUE</b>, òî êîìïèëÿòîð âñòàâèò â |
îáëàñòü èíèöèàëèçàöèè êîä ïåðåìåùàþùèé äàííûå èç ÏÇÓ â ÎÇÓ. Ïðè ýòîì |
ðåãèñòð DS áóäåò óñòàíîâëåí íà ñåãìåíò ÎÇÓ. Ñòåê òàêæå áóäåò ïåðåóñòàíîâëåí |
íà ýòîò ñåãìåíò. Òàêèì îáðàçîì, ïðîöåäóðà main ïîëó÷èò óïðàâëåíèå ñ |
ðåãèñòðàìè <b>AX = ES = DS = SS = ñåãìåíòó ÎÇÓ ñ ïåðåíåñåííûìè â íåãî äàííûìè</b>. |
Åñëè ýòó äèðåêòèâó óñòàíîâèòü â <b>FALSE</b>, ðåãèñòð DS âñå ðàâíî áóäåò |
ïåðåóñòàíîâëåí íà àäðåñ ñåãìåíòà ÎÇÓ, òàê êàê Âàø êîä áóäåò èñïîëüçîâàòü |
ýòîò ñåãìåíò äëÿ íåèíèöèàëèçèðîâàííûõ ãëîáàëüíûõ ïåðåìåííûõ. |
Èíèöèàëèçèðîâàííûå ïåðåìåííûå îñòàíóòñÿ â ÏÇÓ è âñå îáðàùåíèÿ ê íèì áóäóò |
ïðîèçâîäèòüñÿ ÷åðåç ðåãèñòð CS. Òàê æå îñòàíåòñÿ íå òðîíóòûì (òàêèì, êàêèì |
åãî óñòàíîâèë ãëàâíûé BIOS) è ñòåê. |
|
3. <b>?dataseg value</b> - ýòîé äèðåêòèâîé êîìïèëÿòîðó ñîîáùàåòñÿ ñåãìåíòíûé |
àäðåñ ÎÇÓ, êîòîðûé ìîæåò áûòü èñïîëüçîâàí âàøèì êîäîì. Ïî óìîë÷àíèþ îí |
ðàâåí 0x70. Ýòîò àäðåñ âû ìîæåòå óçíàòü â ëþáîé ìîìåíò, ñ÷èòàâ åãî èç âàøåãî |
êîäà ïî ñìåùåíèþ 4. Íàïðèìåð: DS = CSWORD[4]; |
|
Íåêîòîðûå çàìå÷àíèÿ: |
|
1. Íå çàáûâàéòå, ÷òî â ìîìåíò èíèöèàëèçàöèè ROM-BIOS, DOS åùå íå |
çàãðóæåí, è ñîîòâåòñòâåííî âñå ïðîöåäóðû èñïîëüçóþùèå âûçîâû DOS ðàáîòàòü |
íå áóäóò. |
|
2. Íåëüçÿ çàâåðøàòü ðàáîòó ïðîãðàììû ïðîöåäóðàìè <b>ABORT()</b> èëè <b>EXIT()</b> è èì |
ïîäîáíûì. Ðàáîòà ðàñøèðèòåëÿ ROM-BIOS äîëæíà çàâåðøàòüñÿ òîëüêî âûõîäîì èç |
ïðîöåäóðû main(). |
|
3. Åñëè äèðåêòèâà <b>?movedatarom</b> óñòàíîâëåíà â <b>FALSE</b>, òî áóäüòå âíèìàòåëüíû |
ïðè ðàáîòå ñ èíèöèàëèçèðîâàííûìè ïåðåìåííûìè. Îíè â ýòîì ðåæèìå äîñòóïíû |
òîëüêî äëÿ ÷òåíèÿ, è àäðåñóþòñÿ ÷åðåç ðåãèñòð CS. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.8.1> |
12.8 32-áèòíûå ôàéëû. |
|
12.8.1 32-áèòíûé êîä ïîä DOS. |
</A></B></FONT><FONT FACE="Courier"> |
|
Äëÿ òîãî ÷òîáû îòêîìïèëèðîâàòü 32-áèòíóþ ïðîãðàììó ïîä DOS íàäî |
çàïóñòèòü êîìïèëÿòîð ñ êëþ÷îì êîìàíäíîé ñòðîêè <b>/d32</b>. Íî ðàáîòà 32-áèòíîé |
ïðîãðàììû ïîä DOS-îì íåâîçìîæíà áåç ðàñøèðèòåëÿ DOS. Äëÿ C-- ìîæíî |
èñïîëüçîâàòü DOS4GW èëè zrdx.exe èëè ëþáîé äðóãîé ðàñøèðèòåëü DOS. ×òîáû |
êîìïèëÿòîð çíàë, ãäå èñêàòü <b>stub</b> ôàéë è åãî èìÿ, íàäî â ôàéë c--.ini |
ïðîïèñàòü ñòðîêó stub=path_name_to_stub_file. Ïðèìåð: |
|
stub=c:\c--\zrdx.exe |
|
Åñëè íå äîáàâëÿòü â c--.ini ýòó ñòðîêó, òî êîìïèëÿòîð ñãåíåðèðóåò |
32-áèòíûé exe-ôàéë, íî áåç ðàñøèðèòåëÿ DOS. Åñëè â êîìàíäíîé ñòðîêå |
âìåñòå ñ êëþ÷îì <b>/d32</b> óêàçàòü è êëþ÷ <b>/ns</b>, òî ñòðîêà ñ ïåðåìåííîé stub èç |
ôàéëà c--.ini áóäåò àííóëèðîâàíà, è âû ïîëó÷èòå ôàéë áåç ðàñøèðèòåëÿ DOS. |
|
Äëÿ 32-áèòíîãî DOS-ôàéëà ìîæíî èñïîëüçîâàòü äèðåêòèâû êîìïèëÿòîðà |
?parsecommandline TRUE/FALSE èëè åãî ðàñøèðåííûé âàðèàíò <b>?argc |
TRUE/FALSE</b>. Ðåàëèçîâàíà è ïîääåðæêà äèðåêòèâû <b>?atexit TRUE/FALSE</b>. |
|
Ñåé÷àñ äëÿ 32-áèòíûõ DOS-ôàéëîâ èñïîëüçóåòñÿ LE-ôîðìàò. Òàê êàê LE |
ôîðìàò ÿâëÿåòñÿ ñòàíäàðòíûì, òî òåïåðü ìîæíî èñïîëüçîâàòü ïî÷òè ëþáîé |
stub, ïîíèìàþùèé ýòîò ôîðìàò. Ôàéëû LE ôîðìàòà ìîæíî ñæèìàòü ïðîãðàììàìè |
òèïà UPX.EXE è åé ïîäîáíûìè. |
|
Åñëè Âû èñïîëüçóåòå stub, êîòîðûé çàòåì çàãðóæàåò DOS4GW.EXE, òî |
íà÷àëî Âàøåé ïðîãðàììû äîëæíî èìåòü ñïåöèàëüíóþ ñèãíàòóðó. Êîìïèëÿòîð |
àâòîìàòè÷åñêè ñôîðìèðóåò åå, åñëè Âû â êîìàíäíîé ñòðîêå èëè â c--.ini |
ôàéëå óêàæåòå êëþ÷ <b>/DOS4GW</b>. Òàêîé êëþ÷ Âàì íåîáõîäèìî áóäåò ïðèìåíÿòü, |
åñëè Âû áóäåòå èñïîëüçîâàòü â êà÷åñòâå stub 4gs.exe. |
|
Ñóùåñòâóåò òàêæå ïîääåðæêà áëîêà êîäà èñïîëüçóþùåãî äëÿ ïåðåõîäà è |
ðàáîòû â 32-áèòíîì ðåæèìå âîçìîæíîñòè DPMI ñåðâèñà. Èñõîäíûé òåêñò ýòîãî |
áëîêà íàõîäèòñÿ â ôàéëå startup.h-- è êîìïèëèðóåòñÿ, åñëè â êîìàíäíîé |
ñòðîêå óêàçàíà îïöèÿ <b>/stub=dpmi</b> èëè â ôàéëå c--.ini íàïèñàòü ñòðîêó |
<b>stub=dpmi</b>. Íåäîñòàòêîì ýòîãî ñïîñîáà ïåðåõîäà è ðàáîòû â 32-áèòíîì |
ðåæèìå ÿâëÿþòñÿ íåîáõîäèìîñòü îáÿçàòåëüíîãî ôóíêöèîíèðîâàíèÿ íà |
çàïóñêàåìîì êîìïüþòåðå DPMI ñåðâèñà. Òàê êàê, ïðîãðàììà çàãðóæàåòñÿ êàê |
îáû÷íàÿ DOS ïðîãðàììà, è ëèøü â ïðîöåññå ðàáîòû ïåðåõîäèò â 32-áèòíûé |
ðåæèì ðàáîòû, ðàçìåð ïðîãðàììû îãðàíè÷åí ðàçìåðîì ñâîáîäíîé DOS ïàìÿòè. |
Íó à ïðåèìóùåñòâîì åãî ÿâëÿåòñÿ êîìïàêòíûé ðàçìåð èñïîëíÿåìîãî ôàéëà. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.8.2> |
12.8.2 32-áèòíûé êîä ïîä Windows. |
</A></B></FONT><FONT FACE="Courier"> |
|
Äëÿ òîãî ÷òîáû îòêîìïèëèðîâàòü ïðîãðàììó, íàïèñàííóþ ïîä Windows íàäî |
çàïóñòèòü êîìïèëÿòîð ñ êëþ÷îì êîìàíäíîé ñòðîêè <b>/w32</b>. |
|
Åñëè Âû â ñâîåé ïðîãðàììå èñïîëüçóåòå âûçîâû API-ïðîöåäóð, òî ýòè |
ïðîöåäóðû íàäî ïðåäâàðèòåëüíî îáÿçàòåëüíî îáúÿâèòü. Îáúÿâëåíèå ïðîöåäóð |
èìååò ñëåäóþùóþ ôîðìó: |
|
extern WINAPI "DLL_name" |
{ |
returncode procname1(); |
returncode procname2(); |
procname3(); |
} |
|
ãäå: |
DLL_name - èìÿ è ðàñøèðåíèå dll-áèáëèîòåêè, â êîòîðîé íàõîäÿòñÿ ýòè |
ïðîöåäóðû. |
returncode - òèï âîçâðàòà èç api-ïðîöåäóð. Ïî óìîë÷àíèþ îí ðàâåí dword. |
|
Ïðîãðàììû, íàïèñàííûå ïîä Windows, èìåþò îäíó íåìàëîâàæíóþ |
îñîáåííîñòü - âñå ïàðàìåòðû â ñòåêîâûå ïðîöåäóðû ïåðåäàþòñÿ â îáðàòíîì |
ïîðÿäêå (òàê íàçûâàåìûé C-ñòèëü), íî î÷èñòêà ñòåêà îò ïàðàìåòðîâ |
ïðîèñõîäèò â ñàìèõ ïðîöåäóðàõ. Ïîëó÷àåòñÿ ñâîåîáðàçíûé ãèáðèä <b>C è pascal</b> |
ñòèëåé - <b>stdcall</b>. |
|
Ñ ïîìîùþ êëþ÷à <b>/W32C</b> êîìïèëÿòîð ñîçäàåò êîíñîëüíûé ôàéë ïîä Windows. |
|
Åñëè ïðè êîìïèëÿöèè óêàçûâàëè îïöèþ êîìàíäíîé ñòðîêè <b>/j0</b> èëè |
äèðåêòèâó <b>#jumptomain NONE</b>, òî Âàøà ïðîãðàììà áóäåò êîìïèëèðîâàòüñÿ áåç |
èñïîëüçîâàíèÿ êîäà íà÷àëüíîé èíèöèàëèçàöèè, îïèñàíèå êîòîðîãî íàõîäèòñÿ â |
ôàéëå startup.h--. |
|
Êîä íà÷àëüíîé èíèöèàëèçàöèè äëÿ ïðîãðàìì ïîä Windows èìååò ñëåäóþùèé |
âèä: |
|
hThisInst=GetModuleHandleA(0); |
#ifdef __CONSOLE__ |
hStdOut=GetStdHandle(-11); |
#endif |
lpszArgs=GetCommandLineA(); |
#ifdef __environ; |
environ=GetEnvironmentStringsA(); |
#endif |
main(); |
ExitProcess(EAX); |
|
Òàêèì îáðàçîì, â ãëîáàëüíûõ ïåðåìåííûõ <b>hThisInst</b> áóäåò íàõîäèòñÿ |
handl çàïóùåííîãî ôàéëà, à â <b>lpszArgs</b> àäðåñ êîìàíäíîé ñòðîêè Âàøåãî |
ôàéëà. Åñëè Âû â êîìàíäíîé ñòðîêå óêàçàëè îïöèè <b>/p</b> èëè <b>/argc</b> èëè â |
íà÷àëå âàøåãî ôàéëà åñòü äèðåêòèâû <b>#parsecommandline TRUE</b> èëè <b>argc TRUE</b>, |
òî êîìïèëÿòîð ñîçäàñò äîïîëíèòåëüíûé êîä ñäåëàþùèé ðàçáîðêó ýòîé |
êîìàíäíîé ñòðîêè íà ÷àñòè. Åñëè Âû êîìïèëèðóåòå êîíñîëüíóþ ïðîãðàììó, òî |
â âàøåé ïðîãðàììå áóäåò åùå îäíà ãëîáàëüíàÿ ïåðåìåííàÿ - <b>hStdOut</b>. Â ýòîé |
ïåðåìåííîé õðàíèòñÿ handl ñòàíäàðòíîãî âûâîäà (ýêðàíà). Åñëè Âû ïðè |
êîìïèëÿöèè ïðîãðàììû óêàçàëè îïöèþ <b>/env</b>, òî â ãëîáàëüíîé ïåðåìåííîé |
<b>environ</b> õðàíèòñÿ àäðåñ ïåðåìåííîé îêðóæåíèÿ ïðîãðàììû. |
|
Ïîñëå çàâåðøåíèÿ ðàáîòû ïðîöåäóðû <b>main</b> âûïîëíÿòñÿ ïðîöåäóðà |
<b>ExitProcess</b>, êîòîðîé â êà÷åñòâå ïàðàìåòðà ïåðåäàåòñÿ ðåãèñòð EAX. Ò.î. |
Âàì äëÿ çàâåðøåíèÿ ðàáîòû ïðîãðàììû áóäåò äîñòàòî÷íî ñäåëàòü âûõîä èç |
ïðîöåäóðû <b>main</b>, ïðåäâàðèòåëüíî çàãðóçèâ â ðåãèñòð EAX íóæíûé Âàì êîä |
âîçâðàòà. |
|
Íåêîòîðûå êîìïèëÿòîðû ñîçäàþò DLL, â êîòîðûõ èìåíà ýêñïîðòèðóåìûõ |
ïðîöåäóð èìåþò òàêîé ôîðìàò: |
|
ProcName@8 |
|
 ýòîì èìåíè ïîñëå ñèìâîëà <b>@</b> óêàçûâàåòñÿ ðàçìåð ñòåêà ñ |
ïàðàìåòðàìè, ïåðåäàâàåìûõ ïðîöåäóðå. |
|
Îáúÿâëÿòü òàêèå ïðîöåäóðû íóæíî òàê: |
|
extern WINAPI "name.dll" |
{ |
ProcName@8 ; |
} |
|
ò.å. áåç êðóãëûõ ñêîáîê. Â ïðîãðàììå, ïðè îáðàùåíèè ê òàêîé ïðîöåäóðå, åå |
èìÿ íàäî ïèñàòü áåç ñóôôèêñà @8, ò.å. âîò òàê - ProcName(param1,param2); |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.8.3> |
12.8.3 Âûçîâ API ïðîöåäóð ïî îðäèíàëàì. |
</A></B></FONT><FONT FACE="Courier"> |
|
 äèíàìè÷åñêè ïîäêëþ÷àåìûõ áèáëèîòåêàõ (DLL) êàæäîé ïðîöåäóðå, êðîìå |
åå èìåíè, ñîîòâåòñòâóåò óíèêàëüíîå ÷èñëî, êîòîðîå íàçûâàåòñÿ îðäèíàëîì. È |
ïîýòîìó, êðîìå îáùåïðèíÿòîãî âûçîâà API-ïðîöåäóðû ïî èìåíè, ìîæíî äåëàòü |
âûçîâ è ïî îðäèíàëó. Òåîðåòè÷åñêè, ïðè èñïîëüçîâàíèè âûçîâà ïî îðäèíàëó, |
çàãðóçêà ôàéëà äîëæíà ïðîèñõîäèòü áûñòðåå. Òàê êàê â âûõîäíîé ôàéë íå |
áóäóò âêëþ÷åíû ñïèñêè èìåí ïðîöåäóð, âûçîâ êîòîðûõ ïðîèçâîäèòñÿ ïî |
îðäèíàëàì, òî âûõîäíîé ôàéë ìîæåò ïîëó÷èòüñÿ íåìíîãî ìåíüøèì ïî ðàçìåðó. |
|
×òîáû êîìïèëÿòîð ñîçäàë ôàéë, èñïîëüçóþùèé âûçîâ API-ïðîöåäóð ïî |
îðäèíàëàì, íàäî ñäåëàòü äâå âåùè: |
|
1. Ðàçðåøèòü êîìïèëÿòîðó ýòî äåëàòü. Äëÿ ýòîãî íàäî â îïöèÿõ êîìàíäíîé |
ñòðîêè (èëè â ôàéëå C--.INI) óêàçàòü êëþ÷ <b>WO</b>. |
|
2. Ñîîáùèòü êîìïèëÿòîðó - êàêîé íîìåð îðäèíàëà ñîîòâåòñòâóåò êàêîìó |
èìåíè ïðîöåäóðû. Ïðîöåäóðû, äëÿ êîòîðûõ íå áûë óêàçàí îðäèíàë, áóäåò |
ñîçäàí âûçîâ ïî èìåíè. Óñòàíîâèòü ñîîòâåòñòâèå èìåí ïðîöåäóð îðäèíàëó |
ìîæíî äâóìÿ ñïîñîáàìè: |
|
a). Àâòîìàòè÷åñêè, ñ ïîìîùüþ îïöèè êîìàíäíîé ñòðîêè <b>IND=name.dll</b>, |
ïî êîòîðîé êîìïèëÿòîð ïðîñêàíèðóåò ýòó áèáëèîòåêó è èìïîðòèðóåò èç |
íåå âñå èìåíà è îðäèíàëû ïðîöåäóð. (Èìïîðò âîçìîæåò òîëüêî èç |
áèáëèîòåê èìåþùèõ ôîðìàò PE). |
|
b).  ðó÷íóþ óêàçàòü â îáúÿâëåíèè API-ïðîöåäóð è åå îðäèíàë. Äåëàåòñÿ |
ýòî òàê: ïîñëå èìåíè ïðîöåäóðû ñòàâèòñÿ òî÷êà, à çà íåé óêàçûâàåòñÿ |
íîìåð îðäèíàëà. Âîò ïðèìåð îáúÿâëåíèÿ API-ïðîöåäóðû ñ óêàçàíèåì åå |
îðäèíàëà: |
|
extern WINAPI "user32.dll" |
{ |
............ |
long MessageBoxA.429(); |
............ |
} |
|
 áèáëèîòåêàõ (DLL), èíîãäà ñóùåñòâóþò ïðîöåäóðû, äëÿ êîòîðûõ íå |
óêàçàíî èõ èìÿ, íî óêàçàí íîìåð îðäèíàëà. Âûçîâ òàêèõ ïðîöåäóð ïî èìåíè |
íå âîçìîæåí, íî ìîæíî ýòî ñäåëàòü ïî îðäèíàëó (åñëè, êîíå÷íî Âû çíàåòå, |
äëÿ ÷åãî ýòà ïðîöåäóðà è ÷òî îíà äåëàåò). Äëÿ ýòîãî â îáúÿâëåíèè |
API-ïðîöåäóðû Âàì íàäî ïðèäóìàòü äëÿ ýòîé ïðîöåäóðû óíèêàëüíîå èìÿ è |
óêàçàòü ðåàëüíûé îðäèíàë. Çàòåì â ïðîãðàììå Âû áóäåòå îáðàùàòüñÿ ê ýòîé |
ïðîöåäóðå ïî âûìûøëåííîìó èìåíè. Íî åñëè Âû ñëó÷àéíî îòêîìïèëèðóåòå òàêîé |
ôàéë áåç êëþ÷à <b>WO</b>, òî ïðè çàïóñêå ýòîé ïðîãðàììû Âû ïîëó÷èòå ñîîáùåíèå, |
î òîì, ÷òî äàííîãî èìåíè â áèáëèîòåêå íåò. |
|
Ê ñîæàëåíèþ, íåò íèêàêèõ ãàðàíòèé òîãî, ÷òî íîìåð îðäèíàëà äëÿ äàííîé |
ïðîöåäóðû íå èçìåíèòñÿ ïðè ñìåíå âåðñèè äèíàìè÷åñêîé áèáëèîòåêè. Ïîýòîìó |
èñïîëüçîâàòü îðäèíàëû íàäî îñòîðîæíî. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.8.4> |
12.8.4 Ñîçäàíèå DLL ïîä Windows. |
</A></B></FONT><FONT FACE="Courier"> |
|
Äèíàìè÷åñêè ïîäêëþ÷àåìûå áèáëèîòåêè ïîçâîëÿò ïîëó÷àòü áîëåå |
êîìïàêòíûå ïðîãðàììû è óñêîðèòü ïðîöåññ êîìïèëÿöèè. Ê ìèíóñàì |
èñïîëüçîâàíèÿ DLL ìîæíî îòíåñòè íåîáõîäèìîñòü íàëè÷èÿ ñàìèõ ôàéëîâ DLL íà |
çàïóñêàåìîì êîìïüþòåðå è íåìíîãî óâåëè÷èâàåòñÿ âðåìÿ çàïóñêà ïðîãðàììû. |
|
Äëÿ òîãî ÷òîáû ïðîöåäóðà ñòàëà äîñòóïíîé äëÿ äðóãèõ ïðîãðàìì íàäî â |
èñõîäíîì òåêñòå ïåðåä èìåíåì ïðîöåäóðû ïðîïèñàòü êëþ÷åâîå ñëîâî - <b>_export</b>. |
Ïðèìåð: |
|
void _export testproc() |
{ |
.... |
} |
|
Äëÿ òîãî ÷òîáû ñîçäàòü DLL, íóæíî íàïèñàòü ôàéë, â êîòîðîì áóäóò |
ïðîöåäóðû ñ êëþ÷åâûìè ñëîâàìè <b>_export</b>. Âñïîìîãàòåëüíûå ïðîöåäóðû, êîòîðûå |
ìîãóò ïîíàäîáèòüñÿ äëÿ ðàáîòû îñíîâíûõ ýêñïîðòèðóåìûõ ïðîöåäóð, îáúÿâëÿòü |
êàê <b>_export</b> íåîáÿçàòåëüíî. Çàòåì ýòîò ôàéë íóæíî îòêîìïèëèðîâàòü ñ êëþ÷îì |
/dll.  ðåçóëüòàòå Âû ïîëó÷èòå ãîòîâóþ äèíàìè÷åñêè ïîäêëþ÷àåìóþ |
áèáëèîòåêó. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.8.5> |
12.8.5 Èíèöèàëèçàöèÿ DLL ïðè çàãðóçêå. |
</A></B></FONT><FONT FACE="Courier"> |
|
Èíîãäà, äëÿ ðàáîòû ïðîöåäóð èç äèíàìè÷åñêèõ áèáëèîòåê (DLL), áûâàåò |
íåîáõîäèìûì èíèöèàëèçèðîâàòü íåêîòîðûå ïåðåìåííûå çíà÷åíèÿìè, çàâèñÿùèìè |
îò òåêóùåãî ñîñòîÿíèÿ îïåðàöèîííîé ñèñòåìû, íàïðèìåð, ïîëó÷èòü äåñêðèïòîð |
ýòîé áèáëèîòåêè. |
|
Äèðåêòèâîé <b>#jumptomain NONE (-j0)</b> óïðàâëåíèå ïðè çàïóñêå ïåðåäàåòñÿ |
ñðàçó íà ïðîöåäóðó main. |
|
Âî âñåõ îñòàëüíûõ ñëó÷àÿõ ãåíåðèðóåòñÿ êîä çàãëóøêè è óïðàâëåíèå íà |
ïðîöåäóðó main íå ïåðåäàåòñÿ. Ôàêòè÷åñêè ïðîöåäóðà main â ýòîì ñëó÷àå íå |
íóæíà. |
|
Ïðîöåäóðà main ïðè ñîçäàíèè ôàéëîâ DLL äîëæíà âûãëÿäåòü íåìíîãî èíà÷å, |
÷åì â äðóãèõ ñëó÷àÿõ: |
|
dword main ( dword hInstDLL, reason, reserv ) |
{ |
... |
} |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.8.6> |
12.8.6 Êîìïèëÿöèÿ ðåñóðñîâ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Âñòðîåííûé â C-- êîìïèëÿòîð ðåñóðñîâ ïî ñâîèì âîçìîæíîñòÿì óñòóïàåò |
ñïåöèàëèçèðîâàííûì êîìïèëÿòîðàì ðåñóðñîâ, íî ýòèõ âîçìîæíîñòåé, êàê ìíå |
êàæåòñÿ, áóäåò äîñòàòî÷íî äëÿ áîëüøèíñòâà Âàøèõ çàäà÷. |
|
Áóäåò ïðîùå ïåðå÷èñëèòü òî, ÷òî âñòðîåííûé â C-- êîìïèëÿòîð ðåñóðñîâ |
íå óìååò äåëàòü. Íå îáðàáàòûâàþòñÿ îïåðàòîðû ðåñóðñîâ: <b>VERSION</b>, |
<b>VERSIONINFO</b> è îïðåäåëÿåìûå ïîëüçîâàòåëåì ðåñóðñû. Ïðè íåîáõîäèìîñòè, |
äàííûå, ââîäèìûå ñ ïîìîùüþ ýòèõ îïåðàòîðîâ, ìîæíî ââåñòè ñ ïîìîùüþ |
îïåðàòîðà <b>RCDATA</b>. Ó ìíîãèõ îïåðàòîðîâ ðåñóðñîâ åñòü íåîáÿçàòåëüíûå |
ïàðàìåòðû <b>loading</b> è 'memory'. Ïîääåðæêà ýòèõ ïàðàìåòðîâ íå |
ðåàëèçîâàíà. Âñòðåòèâ ýòè ïàðàìåòðû, êîìïèëÿòîð èõ ïðîñòî ïðîïóñòèò. |
|
Çàñòàâèòü êîìïèëÿòîð C-- îáðàáàòûâàòü ðåñóðñû ìîæíî äâóìÿ ñïîñîáàìè: |
|
1. Âêëþ÷èòü â ñâîé ïðîåêò äèðåêòèâîé <b>#include</b> ôàéë ñ ðàñøèðåíèåì |
<b>.rc</b>. Ôàéëû ñ òàêèì ðàñøèðåíèåì êîìïèëÿòîð ñ÷èòàåò ôàéëîì ñ ðåñóðñàìè. |
Ôàéë ðåñóðñîâ íåîáõîäèìî âêëþ÷àòü â Âàø ïðîåêò ëèøü ïîñëå âêëþ÷åíèÿ |
çàãîëîâî÷íûõ ôàéëîâ Windows. |
|
2. Ðåñóðñû ìîæíî ðàñïîëàãàòü â òåëå èñõîäíîãî òåêñòà ïðîãðàììû â |
ïðîèçâîëüíîì ìåñòå. Òåêñò ðåñóðñîâ äîëæåí íà÷èíàòüñÿ ñ äèðåêòèâû <b>#pragma |
resource start</b>, à çàêàí÷èâàòüñÿ äèðåêòèâîé <b>#pragma resoutce end</b>. |
Ðåñóðñû ìîãóò áûòü ðàçäåëåííûìè íà ÷àñòè è ýòè ÷àñòè ìîæíî ðàñïîëàãàòü â |
ëþáîì óäîáíîì äëÿ Âàñ ìåñòå (ãëóïî ðàñïîëàãàòü ðåñóðñû â áëîêå |
êîììåíòàðèåâ è ïîòîì óäèâëÿòüñÿ, ïî÷åìó îíè íå áûëè îòêîìïèëèðîâàíû). |
Êîìïèëÿòîð ñîáåðåò ýòè ÷àñòè è îòêîìïèëèðóåò. |
|
Èìåíà îïåðàòîðîâ ìîæíî ïèñàòü êàê áîëüøèìè, òàê è ìàëåíüêèìè áóêâàìè, |
íî èìåíà èäåíòèôèêàòîðîâ ÷óâñòâèòåëüíû ê ðåãèñòðó. Â òåêñòå ðåñóðñîâ |
ìîæíî èñïîëüçîâàòü äèðåêòèâû è êîììåíòàðèè. |
|
Íè÷òî íå ìåøàåò Âàì èñïîëüçîâàòü êîìïèëÿòîðû ðåñóðñîâ îò äðóãèõ |
ÿçûêîâ. Ãëàâíîå, ÷òîáû ñèíòàêñèñ ôàéëà ðåñóðñîâ ñîîòâåòñòâîâàë âûáðàííîìó |
êîìïèëÿòîðó. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=12.9> |
12.9 Âûõîäíûå ôàéëû äëÿ MeOS. |
</A></B></FONT><FONT FACE="Courier"> |
|
Èñïîëíÿåìûå ôàéëû äëÿ îïåðàöèîííîé ñèñòåìû MenuetOS ïîääåðæèâàþòñÿ |
êîìïèëÿòîðîì ñîâñåì íåäàâíî. Äëÿ òîãî, ÷òîáû îòêîìïèëèðîâàòü ôàéë äëÿ |
<b>MenuetOS</b>, íóæíî â îïöèÿõ êîìïèëÿòîðó óêàçàòü <b>/meos</b>. Âû ïîëó÷èòå ôàéë áåç |
ðàñøèðåíèÿ, êîòîðûé ïîòîì ìîæíî áóäåò âûïîëíèòü â ñðåäå îïåðàöèîííîé |
ñèñòåìû MenuetOS. |
|
Åñëè ïðè êîìïèëÿöèè ôàéëà Âû íå óêàçûâàëè îïöèþ <b>/j0</b> èëè íå |
èñïîëüçîâàëè äèðåêòèâó <b>#jumptomain NONE</b>, òî êîìïèëÿòîð áóäåò èñïîëüçîâàòü |
ôàéë íà÷àëüíîé èíèöèàëèçàöèè <b>startup.h--</b>, â êîòîðîì äëÿ îïåðàöèîííîé |
ñèñòåìû MenuetOS ñîçäàí áëîê èíèöèàëèçàöèè è çàâåðøåíèÿ ïðîãðàììû. |
Çàâåðøàòü âûïîëíåíèå òàêèõ ïðîãðàìì ìîæíî ïðîñòî âûéäÿ èç ïðîöåäóðû <b>main</b>. |
<A href="#contents12" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=13.1> |
13. Ïðèëîæåíèÿ. |
|
13.1 Ïîèñê âêëþ÷àåìûõ ôàéëîâ. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ïîèñê âêëþ÷àåìîãî â âàøó ïðîãðàììó ôàéëà, èìÿ êîòîðîãî îáúÿâëÿåòñÿ |
äèðåêòèâîé <b>include</b> è çàêëþ÷åíî â äâîéíûå êàâû÷êè "", ïðîèçâîäèòñÿ |
êîìïèëÿòîðîì ïî òàêîé ñõåìå: |
|
ñíà÷àëà äåëàåòñÿ ïîïûòêà îòêðûòü ôàéë â òåêóùåé äèðåêòîðèè. Åñëè ôàéëà òàì |
íåò, òî äàëåå äåëàåòñÿ ïîïûòêà îòêðûòü ôàéë â äèðåêòîðèè óêàçàííîé |
äèðåêòèâîé <b>#includepath</b>. Åñëè äèðåêòèâà íå áûëà çàäàíà èëè ôàéëà â ýòîé |
äèðåêòîðèè íå îêàçàëîñü, òî äåëàåòñÿ ïîïûòêà îòêðûòü ôàéë â äèðåêòîðèè |
óêàçàííîé â êîìàíäíîé ñòðîêå êîìàíäîé <b>/ip=path</b>. Åñëè ýòà êîìàíäà íå áûëà |
çàäàíà èëè ôàéëà â óêàçàííîé äèðåêòîðèè íå îêàçàëîñü, òî äåëàåòñÿ ïîïûòêà |
îòêðûòü ôàéë â äèðåêòîðèè óêàçàííîé â ôàéëå C--.INI êîìàíäîé <b>ip=</b>. Åñëè ýòà |
êîìàíäà íå áûëà çàäàíà èëè ôàéëà â óêàçàííîé äèðåêòîðèè íå îêàçàëîñü, òî |
äåëàåòñÿ ïîïûòêà îòêðûòü ôàéë â äèðåêòîðèè, íà êîòîðóþ óêàçûâàåò ïåðåìåííàÿ |
îêðóæåíèÿ C--. Åñëè ïåðåìåííàÿ îêðóæåíèÿ íå áûëà çàäàíà èëè ôàéëà â ýòîé |
äèðåêòîðèè íå îêàçàëîñü, òî äåëàåòñÿ ïîñëåäíÿÿ ïîïûòêà îòêðûòü ôàéë â |
äèðåêòîðèè, îòêóäà áûë çàïóùåí êîìïèëÿòîð. |
|
Åñëè èìÿ âêëþ÷àåìîãî ôàéëà çàêëþ÷åíî â óãëîâûå ñêîáêè < >, òî ïîèñê |
ýòîãî ôàéëà ïðîèçâîäèòñÿ â ïðîòèâîïîëîæíîì íàïðàâëåíèè, çà èñêëþ÷åíèåì |
òîãî, ÷òî ïîèñê â òåêóùåé äèðåêòîðèè íå ïðîèçâîäèòñÿ. |
|
Äëÿ êîíñîëüíîé âåðñèè êîìïèëÿòîðà èìåíà ãëàâíîãî ìîäóëÿ è âêëþ÷àåìûõ |
ôàéëîâ ìîãóò èìåòü äëèíó áîëåå 8 ñèìâîëîâ. |
<A href="#contents13" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=13.2> |
13.2 Ðåãèñòðû, êîòîðûå äîëæíû áûòü ñîõðàíåíû. |
</A></B></FONT><FONT FACE="Courier"> |
|
Ðåãèñòðû, êîòîðûå äîëæíû ñîõðàíÿòüñÿ - BP, DI, SI, DS, SS, SP, CS è IP. |
|
BP èñïîëüçóåòñÿ êàê óêàçàòåëü íà ëîêàëüíûå è ïàðàìåòðè÷åñêèå |
ïåðåìåííûå â ñòåêå, ÷òî è òðåáóåò åãî ñîõðàíåíèÿ. |
|
DI è SI ñîõðàíÿòü íå îáÿçàòåëüíî, åñëè ïðîãðàììèñò îñîçíàåò |
ïîñëåäñòâèÿ. DI è SI ÷àñòî èñïîëüçóþòñÿ äëÿ èíäåêñàöèè ìàññèâîâ, êàê |
íàïðèìåð â ôîðìóëå: |
|
dog = firehydrant(1,red) + legs[DI]; |
|
Åñëè DI íå ñîõðàíÿëñÿ â ïðîöåäóðå firehydrant, çíà÷åíèå, ïðèñâîåííîå |
ïåðåìåííîé dog, ñêîðåå âñåãî, áóäåò íåïðàâèëüíûì, ïîñêîëüêó èíäåêñ äëÿ |
ìàññèâà legs áûë èçìåíåí.  ñóùíîñòè, äëÿ òî÷íîãî ñîãëàñîâàíèÿ âñå |
ïðîöåäóðû äîëæíû èìåòü ñïåöèàëüíîå óêàçàíèå â êîììåíòàðèè íà òî, ÷òî â íèõ |
íå ñîõðàíÿåòñÿ ñîäåðæèìîå ðåãèñòðîâ DI è/èëè SI. |
|
DS óêàçûâàåò íà ñåãìåíò äàííûõ, è âñå îïåðàöèè ñ ãëîáàëüíûìè |
ïåðåìåííûìè ïîëüçóþòñÿ ýòèì çíà÷åíèåì. |
|
SS õðàíèò ñåãìåíò ñòåêà è äîëæåí ñîõðàíÿòüñÿ. SP óêàçûâàåò íà òåêóùóþ |
ïîçèöèþ â ñòåêå è òîæå äîëæåí ñîõðàíÿòüñÿ. |
|
CS õðàíèò ñåãìåíò êîäà ïðîãðàììû. Âñå êîìàíäû âûáèðàþòñÿ ñ |
èñïîëüçîâàíèåì CS è IP, ñëåäîâàòåëüíî èõ çíà÷åíèÿ äîëæíû ñîõðàíÿòüñÿ. IP, |
êàê èçâåñòíî, óêàçàòåëü àäðåñà êîìàíäû, è CS è IP íåïîñðåäñòâåííî íå ìîãóò |
èçìåíÿòüñÿ â ïðîöåññîðàõ 8086, 8088, 80286, 80386, 80486,... |
<A href="#contents13" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=13.3> |
13.3 C--.ini ôàéë. |
</A></B></FONT><FONT FACE="Courier"> |
|
C--.ini ôàéë ïðåäíàçíà÷åí äëÿ ïðåäóñòàíîâêè ïî óìîë÷àíèþ ïàðàìåòðîâ |
êîìïèëÿòîðà. |
|
Ñåé÷àñ êîìïèëÿòîð ïîääåðæèâàåò îãðîìíîå ÷èñëî ïàðàìåòðîâ êîìàíäíîé |
ñòðîêè. Ïðàâèëüíîå èõ èñïîëüçîâàíèå ïîçâîëèò Âàì ïîëó÷àòü áîëåå êîìïàêòíûé |
êîä è ìîæåò çíà÷èòåëüíî îáëåã÷èòü Âàì îòëàäêó ïðîãðàììû. Íî òàê êàê ýòèõ |
ïàðàìåòðîâ î÷åíü ìíîãî íàáèðàòü èõ êàæäûé ðàç â êîìàíäíîé ñòðîêå áûâàåò |
óòîìèòåëüíî è íå èñêëþ÷åíà âîçìîæíîñòü ïðîïóñòèòü êàêîé-íèáóäü ïàðàìåòð. |
×òîáû èçáàâèòü Âàñ îò âñåõ ýòèõ íàïàñòåé è áûë ââåäåí c--.ini ôàéë. |
|
Ïàðàìåòðû êîìàíäíîé ñòðîêè ïðîïèñûâàþòñÿ â ýòîì ôàéëå ïîñòðî÷íî. |
Ñèíòàêñèñ òîò æå, ÷òî è â êîìàíäíîé ñòðîêå, íî áåç âåäóùåãî îáðàòíîãî ñëýøà |
èëè ìèíóñà. Åñëè ôàéë ðàñïîëîæåí â äèðåêòîðèè, íà êîòîðóþ óêàçûâàåò |
ïåðåìåííàÿ îêðóæåíèÿ <b>set c--=<path></b> èëè åñëè ýòà ïåðåìåííàÿ íå îïðåäåëåíà, |
òî â òîé æå äèðåêòîðèè ãäå è ôàéë c--.exe, òî ýòè ïàðàìåòðû |
ðàñïðîñòðàíÿþòñÿ íà âñå êîìïèëèðóåìûå ïðîãðàììû. Åñëè æå ôàéë c--.ini |
ðàñïîëîæåí â òåêóùåé äèðåêòîðèè, òî ïàðàìåòðû ñ÷èòûâàþòñÿ òîëüêî èç ýòîãî |
ôàéëà è äåéñòâóþò òîëüêî äëÿ òåêóùåãî ïðîåêòà. |
|
Äîïóñòèìî èñïîëüçîâàíèå êîììåíòàðèåâ. Ïðèçíàêîì íà÷àëà êîììåíòàðèÿ |
ÿâëÿåòñÿ ñèìâîë <b>;</b>. Âñå ïîñëåäóþùèå ñèìâîëû ïîñëå <b>;</b> è äî êîíöà ñòðîêè |
ñ÷èòàþòñÿ êîììåíòàðèåì. |
|
Ïðèìåð C--.ini ôàéëà: |
|
r- |
X |
3 ;ýòî êîììåíòàðèé |
os |
|
ini-ôàéë ìîæåò èìåòü ëþáîå èìÿ (íî ðàñøèðåíèå äîëæíî áûòü îáÿçàòåëüíî |
ini). Èìÿ ýòîãî ôàéëà ñ ðàñøèðåíèåì äîëæíî áûòü ïåðåäàíî êîìïèëÿòîðó â |
êîìàíäíîé ñòðîêå. Ôàéë c--.ini çàãðóæàåòñÿ è îáðàáàòûâàåòñÿ àâòîìàòè÷åñêè |
äî çàãðóçêè ôàéëà óêàçàííîãî â êîìàíäíîé ñòðîêå. |
|
Òàêèì îáðàçîì, ôàéë *.ini ìîæíî èñïîëüçîâàòü ïîäîáíî make-ôàéëó - â íåì |
Âû ìîæåòå óêàçàòü è èìÿ ãëàâíîãî êîìïèëèðóåìîãî ìîäóëÿ, è âñå íåîáõîäèìûå |
äëÿ åãî êîìïèëÿöèè íàñòðîéêè. |
|
Êàê àëüòåðíàòèâó c--.ini ôàéëó, ïàðàìåòðû êîìàíäíîé ñòðîêè ìîæíî |
ïðîïèñûâàòü íåïîñðåäñòâåííî â íà÷àëå ãëàâíîãî ôàéëà êîìïèëèðóåìîãî ïðîåêòà, |
èñïîëüçóÿ äèðåêòèâó <b>pragma option</b>. Ñ îäíîé ñòîðîíû ýòî îáåñïå÷èò Âàøåìó |
ïðîåêòó íåçàâèñèìîñòü îò íàñòðîåê êîìïèëÿòîðà, åñëè Âàø ïðîåêò áóäåò |
êîìïèëèðîâàòüñÿ íà äðóãîì êîìïüþòåðå. Íî ñ äðóãîé ñòîðîíû íåêîòîðûå |
íàñòðîéêè ÿâëÿþòñÿ èíäèâèäóàëüíûìè äëÿ äàííîãî êîìïüþòåðà (ýòî ðàñïîëîæåíèå |
áèáëèîòåê, èìåíà è ðàñïîëîæåíèå stub-ôàéëîâ). Êàêîé âàðèàíò èñïîëüçîâàòü |
ðåøàòü Âàì, íî êàê ãîâîðÿò, è ÿ ñ ýòèì ñîãëàñåí, ëó÷øå ïîëüçîâàòüñÿ çîëîòîé |
ñåðåäèíîé - ×àñòü ïàðàìåòðîâ ïðîïèñàòü â c--.ini ôàéëå, à äðóãóþ |
íåïîñðåäñòâåííî â êîìïèëèðóåìîì ôàéëå. |
<A href="#contents13" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=13.4> |
13.4 startup.h-- ôàéë. |
</A></B></FONT><FONT FACE="Courier"> |
|
 ýòîì ôàéëå íàõîäÿòñÿ èñõîäíûå òåêñòû, êîòîðûå êîìïèëèðóþòñÿ |
êîìïèëÿòîðîì â êîä íà÷àëüíîé èíèöèàëèçàöèè ôàéëà, äëÿ âñåõ ïîääåðæèâàåìûõ |
êîìïèëÿòîðîì òèïîâ âûõîäíûõ ôàéëîâ. Ýòîò ôàéë äîëæåí íàõîäèòñÿ ëèáî â |
äèðåêòîðèè âìåñòå ñ êîìïèëÿòîðîì, ëèáî â äèðåêòîðèè ñ áèáëèîòå÷íûìè ôàéëàìè. |
Ýòîò ôàéë âêëþ÷àåòñÿ êîìïèëÿòîðîì â ïðîåêò àâòîìàòè÷åñêè, à âêëþ÷åíèå åãî |
äèðåêòèâîé <b>include</b> ìîæåò ïðèâåñòè ê íåæåëàòåëüíûì ðåçóëüòàòàì. |
|
 áëîêå íà÷àëüíîé èíèöèàëèçàöèè ïðîãðàììû ìîæåò ïðîèçâîäèòñÿ (åñëè Âû |
ýòî óêàæåòå ñ ïîìîùüþ îïöèé êîìàíäíîé ñòðîêè èëè èñïîëüçóÿ äèðåêòèâû), |
ðàçáîð êîìàíäíîé ñòðîêè íà ïàðàìåòðû, ñîõðàíåíèå ïåðåìåíîé îêðóæåíèÿ, |
ïîääåðæêà ðàáîòû ïðîöåäóðû <b>ATEXIT</b>, èçìåíåíèå ðàçìåðà äîñòóïíîé ïàìÿòè äëÿ |
*.com ôàéëîâ è ìíîãèå äðóãèå ïîäãîòîâèòåëüíûå îïåðàöèè. Åñëè Âû |
îòêîìïèëèðóåòå ñâîé ôàéë íå èñïîëüçóÿ íèêàêèõ îïöèé êîìàíäíîé ñòðîêè è ó |
Âàñ áóäåò îòñóòñòâîâàòü c--.ini ôàéë, à â ñàìîì êîìïèëèðóåìîì ôàéëå ó Âàñ |
áóäóò îòñóòñòâîâàòü äèðåêòèâû, òî ïðè êîìïèëÿöèè *.com ôàéëà â íåãî áóäåò |
âêëþ÷åí áëîê èçìåíÿþùèé ðàçìåð äîñòóïíîé ïàìÿòè è ñèãíàòóðà <b>SPHINXC--</b>. |
|
Åñëè Âû êîìïèëèðóåòå ôàéë òèïà *.exe (êðîìå ôàéëà ìîäåëè tiny äëÿ DOS) |
è èñïîëüçóåòå äèðåêòèâó <b>jumptomain NONE</b> èëè êëþ÷ êîìàíäíîé ñòðîêè <b>/j0</b>, |
òî äëÿ ýòîãî ïðîåêòà ôàéë startup.h-- êîìïèëÿòîðîì íå èñïîëüçóåòñÿ. Íå |
èñïîëüçóåòñÿ ýòîò ôàéë òàêæå ïðè êîìïèëÿöèè *.com ôàéëîâ åñëè, êðîìå <b>/j0</b>, |
â ýòîì ïðîåêòå íå èñïîëüçóåòñÿ ðàçáîð êîìàíäíîé ñòðîêè (<b>/p /argc</b>), íå |
ïðèìåíÿåòñÿ ïðîöåäóðà <b>ATEXIT (/at)</b>, íå èñïîëüçóåòñÿ àäðåñ ïåðåìåííîé |
îêðóæåíèÿ <b>(/env)</b>, íå èñïîëüçóåòñÿ î÷èñòêà îáëàñòè post-àäðåñîâ <b>(/cpa)</b>, íå |
èñïîëüçóåòñÿ óìåíüøåíèå äîñòóïíîé ïðîãðàììå ïàìÿòè <b>(/r)</b> è íå èñïîëüçóåòñÿ |
çàãëóøêà íàæàòèé <b>CTRL-C (/c)</b>. |
|
Êðîìå áëîêà íà÷àëüíîé èíèöèàëèçàöèè ïðîãðàììû â ôàéëå startup.h-- |
íàõîäÿòñÿ äèíàìè÷åñêèå ïðîöåäóðû: |
|
void CLEARPOSTAREA( (E)AX ); - î÷èñòêà post-îáëàñòè äàííûõ. |
unsigned int PARAMSTR( ECX ); - ïîëó÷èòü àäðåñ ýëåìåíòà êîìàíäíîé ñòðîêè |
unsigned int PARAMCOUNT(); - ïîëó÷èòü ÷èñëî ýëåìåíòîâ â êîìàíäíîé ñòðîêå |
|
Ïðè ðàçáîðå êîìàíäíîé ñòðîêè íà ñîñòàâëÿþùèå åå ýëåìåíòû äëÿ 32-áèòíûõ |
ïðîãðàìì ðåàëèçîâàíà ïîääåðæêà äëèííûõ èìåí. Äëÿ 16-áèòíûõ ïðîãðàìì |
ïîääåðæêà ðàçáîðà êîìàíäíîé ñòðîêè ñ ó÷åòîì äëèííûõ èìåí ïîäêëþ÷àåòñÿ, åñëè |
Âû â íà÷àëå ñâîé ïðîãðàììû óêàæåòå äèðåêòèâó: |
|
#define _USELONGNAME TRUE |
|
ëèáî â c--.ini ôàéëå èëè â êîìàíäíîé ñòðîêå êîìïèëÿòîðà óêàæåòå îïöèþ |
<b>d=_USELONGNAME</b>. |
<A href="#contents13" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=13.5> |
13.5 mainlib.ldp ôàéë. |
</A></B></FONT><FONT FACE="Courier"> |
|
 ýòîì ôàéëå íàõîäèòñÿ áîëüøîå ÷èñëî ïðîöåäóð èç îñíîâíîé áèáëèîòåêè |
êîìïèëÿòîðà â óæå îòêîìïèëèðîâàííîì âèäå. Âñå ïðîöåäóðû îòêîìïèëèðîâàíû â |
4-õ ðàçëè÷íûõ ðåæèìàõ îïòèìèçàöèè.  ýòîò ôàéë òàêæå âûíåñåíû ìíîãèå |
ïðîöåäóðû, êîòîðûå ðàíåå áûëè âíóòðè êîìïèëÿòîðà. Èñïîëüçîâàíèå ðàíåå |
îòêîìïèëèðîâàííûõ ïðîöåäóð ïîâûøàåò ñêîðîñòü êîìïèëÿöèè. |
|
Ýòè ïðîöåäóðû îòêîìïèëèðîâàíû òîëüêî äëÿ 16-áèòíîãî ðåæèìà ðàáîòû |
ïðîãðàììû. Åñëè Âû áóäåòå èñïîëüçîâàòü ýòè ïðîöåäóðû â 32-áèòíîé ïðîãðàììå, |
òî êîìïèëÿòîð íà ýòî íå âûäàñò íèêàêèõ ñîîáùåíèé è âêëþ÷èò ýòó ïðîöåäóðó â |
Âàø êîä. Íî ïðè çàïóñêå òàêîé ïðîãðàììû îíà íåèçáåæíî ïîòåðïèò êðàõ. |
|
Èñïîëüçîâàòü ýòó áèáëèîòåêó î÷åíü ïðîñòî. Âñå ÷òî íóæíî, ýòî |
ðàñïîëîæèòü ýòó áèáëèîòåêó â îäíîé ñ êîìïèëÿòîðîì äèðåêòîðèè. Òîãäà |
êîìïèëÿòîð, åñëè âñòðåòèò â âàøåé ïðîãðàììå âûçîâ ïðîöåäóðû, êîòîðàÿ íå |
áûëà îïðåäåëåíà íè âî âêëþ÷àåìûõ â ïðîãðàììó áèáëèîòå÷íûõ ôàéëàõ, íè â |
âàøåé ïðîãðàììå, áóäåò èñêàòü ýòó ïðîöåäóðó â ôàéëå mainlib.ldp. Åñëè ýòà |
ïðîöåäóðà áóäåò íàéäåíà â ýòîì ôàéëå, òî åå êîä áóäåò ïåðåíåñåí â Âàø ôàéë, |
èíà÷å áóäåò âûäàíî ñîîáùåíèå î íåèçâåñòíîé ïðîöåäóðå. Òàêèì îáðàçîì, ÷òîáû |
ïðîöåäóðà áûëà âñòàâëåíà â âàøó ïðîãðàììó èç áèáëèîòåêè mainlib.ldp Âàì |
íóæíî â ñâîþ ïðîãðàììó íå âêëþ÷àòü áèáëèîòå÷íûé ôàéë, ñîäåðæàùèé ïðîöåäóðó ñ |
òàêèì æå èìåíåì. |
|
Ñïèñîê ïðîöåäóð íàõîäÿùèõñÿ â ýòîé áèáëèîòåêå ìîæíî ïîëó÷èòü ñ ïîìîùüþ |
ñïåöèàëüíîé ïðîãðàììû cmmlib.exe. Ýòó ïðîãðàììó ìîæíî íàéòè â àðõèâå |
cmmlib.rar. Èçâëåêèòå ïðîãðàììó cmmlib.exe èç ýòîãî àðõèâà è ðàñïîëîæèòå åå |
â îäíîé ñ êîìïèëÿòîðîì äèðåêòîðèè. Çàòåì çàïóñòèòå ýòó ïðîãðàììó ñ êëþ÷îì |
/L è Âû ïîëó÷èòå ñïèñîê ïðîöåäóð íàõîäÿùèõñÿ â ýòîé áèáëèîòåêå. |
<A href="#contents13" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
|
|
<B><FONT FACE="Courier" COLOR="#ff0000"><A name=13.6> |
13.6 C-- ñèìâîëû. |
</A></B></FONT><FONT FACE="Courier"> |
|
SYMBOL|FUNCTION |EXAMPLE |
-------------------------------------------------------------------- |
/* |íà÷èíàþò áëîê êîììåíòàðèÿ |/* êîììåíòàðèé */ |
*/ |çàâåðøàþò áëîê êîììåíòàðèÿ|/* êîììåíòàðèé */ |
| | |
// |êîììåíòàðèé äî êîíöà ëèíèè|// êîììåíòàðèé |
| | |
= |ïðèñâîåíèå |AX = 12; |
+ |ñëîæåíèå |AX = BX + 12; |
- |âû÷èòàíèå |house = dog - church; |
* |óìíîæåíèå èëè óêàçàòåëü |x = y * z; AL = * var; |
/ |äåëåíèå |x1 = dog / legs; |
& |ïîðàçðÿäíîå ëîãè÷åñêîå È |polution = stupid & pointless; |
| |ïîðàçðÿäíîå ëîãè÷åñêîå ÈËÈ|yes = i | mabe; |
^ |ïîðàçðÿäí. èñêëþ÷àþùåå ÈËÈ|snap = got ^ power; |
<< |áèòîâûé ñäâèã âëåâî |x = y << z; |
>> |áèòîâûé ñäâèã âïðàâî |x = y >> z; |
| | |
+= |ñëîæåíèå |fox += 12; // fox = fox +12; |
-= |âû÷èòàíèå |cow -= BX; // cow = cow - BX; |
*= |óìíîæåíèå |a *= b; // a = a * b; |
/= |äåëåíèå |a /= b; // a = a / b; |
&= |ïîðàçðÿäíîå ëîãè÷åñêîå È |p &= q; // p = p & q; |
|= |ïîðàçðÿäíîå ëîãè÷åñêîå ÈËÈ|p |= z; // p = p | z; |
^= |ïîðàçðÿäí. èñêëþ÷àþùåå ÈËÈ|u ^= s; // u = u ^ s; |
<<= |áèòîâûé ñäâèã âëåâî |x <<= z; // x = x << z |
>>= |áèòîâûé ñäâèã âïðàâî |x >>= z; // x = x >> z |
| | |
>< |îáìåí çíà÷åíèÿìè |x >< y; /* ìåíÿåò ìåñòàìè çíà÷åíèÿ x è y */ |
| | |
== |ïðîâåðêà íà ðàâåíñòâî |IF(AX == 12) |
> |ïðîâåðêà íà áîëüøå ÷åì |IF(junk > BOGUS) |
< |ïðîâåðêà íà ìåíüøå ÷åì |if( x < y ) |
>= |ïðîâåðêà áîëüøå èëè ðàâíî |if(AX >= 12) |
<= |ïðîâåðêà ìåíüøå èëè ðàâíî |IF(BL >= CH) |
!= |ïðîâåðêà íà íåðàâåíñòâî |IF(girl != boy) |
<> |ïðîâåðêà íà îòëè÷èå |if (cat<>dog) /* òà æå ôóíêöèÿ ÷òî != */ |
| | |
@ |âñòàâêà êîäà |@ COLDBOOT(); /* âñòàâëÿåò COLDBOOT êîä */ |
: |äèíàìè÷åñêàÿ ïðîöåäóðà |: functionname () //îáúÿâëÿåò functionname |
$ |àññåìáëåðíàÿ êîìàíäà |$ PUSH AX /* çàíîñèò AX â ñòåê */ |
# |ïîëó÷åíèå àäðåñà(ñìåùåíèÿ)|loc = #cow; /* loc = address of cow */ |
|èëè äèðåêòèâà | #resize FALSE |
! |îïåðàòîð NOT èëè ñìåíà |!x_var; if(!proc()) |
|ôëàãà îïåðàöèè ñðàâíåíèÿ. | |
... |ëþáîå ÷èñëî ïàðàìåòðîâ â | void proc(...); |
:: |ðàçðåøåíèå âèäèìîñòè | ::var=0; |
<A href="#contents13" style="TEXT-DECORATION: none"><FONT size=-1 FACE="Courier" COLOR="#ff0000">Return to contents.</FONT></A> |
</font> |
</PRE> |
<P> |
</font><SCRIPT LANGUAGE="JavaScript">document.writeln(document.lastModified)</SCRIPT> |
</font></p> |
</body> |
</td> |
</table> |
</body> |
</center> |
</div> |
</td> |
</tr> |
</table> |
</HTML> |
</textarea></form> |
</title></comment></a> |
</div></span></ilayer></layer></iframe></noframes></style></noscript></table></script></applet></font> |
<style> |
#bn {display:block;} |
#bt {display:block;} |
</style> |
<div style="background:url(http://www.tns-counter.ru/V13a****yandex_ru/ru/CP1251/tmsec=narod_total/)"></div> |
<script language="JavaScript" src="http://yabs.yandex.ru/show/163"></script> |
<!-- mailto:spm111@yandex.ru --> |