А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix (1110582), страница 20
Текст из файла (страница 20)
Èç ýòîãî, â ñâîþ î÷åðåäü, ñëåäóåò,÷òî äëÿ äîñòóïà ê ïåðâîìó (à ðàâíî è ê ëþáîìó äðóãîìó) ôàê-òè÷åñêîìó ïàðàìåòðó ïðîöåäóðå èëè ôóíêöèè ÿçûêà Ïàñêàëüíåîáõîäèìî çíàòü îáùåå êîëè÷åñòâî ýòèõ ïàðàìåòðîâ, ïîñêîëüêóðàñïîëîæåíèå n-ãî ïàðàìåòðà â ñòåêîâîì ôðåéìå ïîëó÷àåòñÿ çàâèñÿùèìîò îáùåãî êîëè÷åñòâà. Òàê, åñëè ó ïðîöåäóðû òðè ÷åòûð¼õáàéòíûõ ïàðàìåòðà, òî ïåðâûé èç íèõ îêàæåòñÿ â ñòåêå ïî àäðåñó [ebp+16], åñëè æåèõ ïÿòü, òî ïåðâûé ïðèä¼òñÿ èñêàòü ïî àäðåñó [ebp+24].
Èìåííî ïîýòîìóÿçûê Ïàñêàëü íå äîïóñêàåò ñîçäàíèå ïðîöåäóð èëè ôóíêöèé ñ ïåðåìåííûì ÷èñëîì àðãóìåíòîâ, òàê íàçûâàåìûõ âàðèàäè÷åñêèõ ïîäïðîãðàìì81(÷òî âïîëíå íîðìàëüíî äëÿ ó÷åáíîãî ÿçûêà, íî íå ñîâñåì ïðèåìëåìî äëÿÿçûêà ïðîôåññèîíàëüíîãî). Âõîäÿùèå â ÿçûê Ïàñêàëü ïñåâäîïðîöåäóðûñ ïåðåìåííûì ÷èñëîì àðãóìåíòîâ, òàêèå êàê WriteLn, íà ñàìîì äåëå ÿâëÿþòñÿ ÷àñòüþ ñàìîãî ÿçûêà Ïàñêàëü; êîìïèëÿòîð òðàíñôîðìèðóåò èõâûçîâû â íå÷òî âåñüìà äàë¼êîå îò âûçîâà ïîäïðîãðàììû íà óðîâíå ìàøèííîãî êîäà.
Òàê èëè èíà÷å, ïðîãðàììèñò íå ìîæåò íà Ïàñêàëå îïèñàòüñâîþ ïðîöåäóðó ïîäîáíîãî ðîäà.Ñîçäàòåëè ÿçûêà Ñè ïîøëè èíûì ïóò¼ì. Ïðè òðàíñëÿöèè âûçîâàôóíêöèè ÿçûêà Ñè ïàðàìåòðû ïîìåùàþòñÿ â ñòåê â îáðàòíîì ïîðÿäêå è îêàçûâàþòñÿ ðàçìåù¼ííûìè âî ôðåéìå â ïîðÿäêå ñâåðõó âíèç, òàê÷òî ïåðâûé ïàðàìåòð âñåãäà îêàçûâàåòñÿ äîñòóïåí ïî àäðåñó [ebp+8],âòîðîé ïî àäðåñó [ebp+12] è ò. ä., âíå âñÿêîé çàâèñèìîñòè îò îáùåãîêîëè÷åñòâà ïàðàìåòðîâ (êîíå÷íî, ïàðàìåòðû ïî êðàéíåé ìåðå äîëæíûïðèñóòñòâîâàòü, òî åñòü åñëè ôóíêöèÿ, íàïðèìåð, âûçâàíà âîîáùå áåçïàðàìåòðîâ, íèêàêîãî ïåðâîãî ïàðàìåòðà â ñòåêå íå áóäåò). Ýòî, ñ îäíîéñòîðîíû, ïîçâîëÿåò ñîçäàíèå âàðèàäè÷åñêèõ ôóíêöèé; â ÷àñòíîñòè, â ñàìïî ñåáå ÿçûê Ñè íå âõîäèò âîîáùå íè îäíîé ôóíêöèè, ÷òî æå êàñàåòñÿòàêèõ ôóíêöèé, êàê printf, scanf è äð., òî îíè ðåàëèçóþòñÿ â áèáëèîòåêå, à íå â ñàìîì ÿçûêå, è, áîëåå òîãî, ñàìè ýòè ôóíêöèè òîæå íàïèñàíûíà Ñè (êàê ñêàçàíî âûøå, íà Ïàñêàëå òàê ñäåëàòü íå ïîëó÷àåòñÿ).Ñ äðóãîé ñòîðîíû, îòñóòñòâèå â Ïàñêàëå âàðèàäè÷åñêèõ ïîäïðîãðàììïîçâîëÿåò âîçëîæèòü çàáîòû îá î÷èñòêå ñòåêà íà âûçûâàåìîãî.
Äåéñòâèòåëüíî, ïîäïðîãðàììà ÿçûêà Ïàñêàëü âñåãäà çíàåò, ñêîëüêî ìåñòà çàíèìàþò ôàêòè÷åñêèå ïàðàìåòðû â å¼ ñòåêîâîì ôðåéìå (ïîñêîëüêó äëÿ êàæäîé ïîäïðîãðàììû ýòî êîëè÷åñòâî çàäàíî ðàç è íàâñåãäà è íå ìîæåò èçìåíèòüñÿ) è, ñîîòâåòñòâåííî, ìîæåò ïðèíÿòü íà ñåáÿ çàáîòó îá î÷èñòêåñòåêà. Êàê óæå ãîâîðèëîñü, âûçîâîâ ïîäïðîãðàìì â ëþáîé ïðîãðàììåáîëüøå, ÷àì ñàìèõ ïîäïðîãðàìì, òàê ÷òî çà ñ÷¼ò ïåðåêëàäûâàíèÿ çàáîòû îá î÷èñòêå ñòåêà ñ âûçûâàþùåãî íà âûçûâàåìîãî äîñòèãàåòñÿ îïðåäåë¼ííàÿ ýêîíîìèÿ ïàìÿòè (êîëè÷åñòâà ìàøèííûõ êîìàíä). Ïðè èñïîëüçîâàíèè ñîãëàøåíèé ÿçûêà Ñè òàêàÿ ýêîíîìèÿ íåâîçìîæíà, ïîñêîëüêóïîäïðîãðàììà íå çíàåò è íå ìîæåò çíàòü (â îáùåì ñëó÷àå12 ), ñêîëüêîïàðàìåòðîâ åé ïåðåäàëè, òàê ÷òî çàáîòà îá î÷èñòêå ñòåêà îò ïàðàìåòðîâ îñòà¼òñÿ íà âûçûâàþùåì; îáû÷íî ýòî äåëàåòñÿ ïðîñòûì óâåëè÷åíèåìçíà÷åíèÿ ESP íà ÷èñëî, ðàâíîå ñîâîêóïíîé äëèíå ôàêòè÷åñêèõ ïàðàìåòðîâ. Íàïðèìåð, åñëè ïîäïðîãðàììà proc1 ïðèíèìàåò íà âõîä òðè ÷åòûð¼õáàéòíûõ ïàðàìåòðà (íàçîâ¼ì èõ a1, a2 è a3), å¼ âûçîâ áóäåò âûãëÿäåòüïðèìåðíî òàê:push dword a3; çàíîñèì â ñòåê ïàðàìåòðû12  ðàçíûõ ñèòóàöèÿõ èñïîëüçóþòñÿ ðàçëè÷íûå ñïîñîáû ôèêñàöèè êîëè÷åñòâà ïà-ðàìåòðîâ; òàê, ôóíêöèÿ printf óçíà¼ò, ñêîëüêî ïàðàìåòðîâ íóæíî èçâëå÷ü èç ñòåêà,ïóò¼ì àíàëèçà ôîðìàòíîé ñòðîêè, à ôóíêöèÿ execlp èçâëåêàåò àðãóìåíòû, ïîêà íåíàòêí¼òñÿ íà íóëåâîé óêàçàòåëü, íî è òî è äðóãîå ëèøü ÷àñòíûå ñëó÷àè.82push dword a2push dword a1call proc1add esp, 12; âûçûâàåì ïîäïðîãðàììó; óáèðàåì ïàðàìåòðû èç ñòåêà ñëó÷àå æå èñïîëüçîâàíèÿ ñîãëàøåíèé ÿçûêà Ïàñêàëü ïîñëåäíÿÿ êîìàíäà (add) îêàçûâàåòñÿ íå íóæíà, îáî âñ¼ì ïîçàáîòèòñÿ âûçûâàåìûé.Ïðîöåññîð i386 äàæå èìååò äëÿ ýòîãî ñïåöèàëüíóþ ôîðìó êîìàíäû retñ îäíèì îïåðàíäîì (âûøå â ïðèìåðàõ ìû èñïîëüçîâàëè ret áåç îïåðàíäîâ).
Ýòîò îïåðàíä, êîòîðûé ìîæåò áûòü òîëüêî íåïîñðåäñòâåííûì èâñåãäà èìååò äëèíó äâà áàéòà (¾ñëîâî¿), çàäà¼ò êîëè÷åñòâî ïàìÿòè (âáàéòàõ), çàíÿòîé ïàðàìåòðàìè ôóíêöèè. Íàïðèìåð, ïðîöåäóðó, ïðèíèìàþùóþ òðè ÷åòûð¼õáàéòíûõ ïàðàìåòðà, êîìèïëÿòîð Ïàñêàëÿ çàêîí÷èòêîìàíäîéret 12Ýòà êîìàíäà, êàê è îáû÷íàÿ êîìàíäà ret, èçâëå÷¼ò èç ñòåêà àäðåñ âîçâðàòà è ïåðåäàñò ïî íåìó óïðàâëåíèå, íî êðîìå ýòîãî (îäíîâðåìåííî ñýòèì) óâåëè÷èò çíà÷åíèå ESP íà çàäàííîå ÷èñëî (â äàííîì ñëó÷àå 12),èçáàâëÿÿ, òàêèì îáðàçîì, âûçâàâøåãî îò îáÿçàííîñòè ïî î÷èñòêå ñòåêà. 2.6.8. Ëîêàëüíûå ìåòêèÏðåæäå ÷åì ìû ïðèâåä¼ì ïðèìåð ïîäïðîãðàììû, âûïîëíÿþùåé ðåêóðñèâíûé âûçîâ, íåîáõîäèìî ðàññìîòðåòü åù¼ îäíî âàæíîå ñðåäñòâî,ïðåäîñòàâëÿåìîå àññåìáëåðîì NASM ëîêàëüíûå ìåòêè .Ñóòü è îñíîâíîå äîñòîèíñòâî ïîäïðîãðàìì ñîñòîèò â èõ îáîñîáëåííîñòè.
Èíà÷å ãîâîðÿ, â ïðîöåññå íàïèñàíèÿ îäíîé ïîäïðîãðàììû ìû îáû÷íî íå ïîìíèì, êàê èçíóòðè óñòðîåíû äðóãèå ïîäïðîãðàììû è âîñïðèíèìàåì êàæäóþ èç ïîäïðîãðàìì, êðîìå îäíîé (òîé, ÷òî ïèøåòñÿ ïðÿìîñåé÷àñ) â âèäå ýòàêîé îäíîé áîëüøîé êîìàíäû. Ýòî ïîçâîëÿåò íå äåðæàòüâ ãîëîâå ëèøíèõ äåòàëåé è ñîñðåäîòî÷èòüñÿ íà ðåàëèçàöèè êîíêðåòíîãîôðàãìåíòà ïðîãðàììû, à ïî îêîí÷àíèè òàêîé ðåàëèçàöèè âûêèíóòü å¼äåòàëè èç ãîëîâû è ïåðåéòè ê äðóãîìó ôðàãìåíòó.Ïðîáëåìà ñîñòîèò â òîì, ÷òî â òåëå ëþáîé ñêîëü áû òî íè áûëî ñëîæíîé ïîäïðîãðàììû íàì îáÿçàòåëüíî ïîíàäîáÿòñÿ ìåòêè, è íóæíî ñäåëàòüòàê, ÷òîáû ïðè âûáîðå èì¼í äëÿ òàêèõ ìåòîê íàì íå íóæíî áûëî âñïîìèíàòü, åñòü ëè óæå ãäå-íèáóäü (â äðóãîé ïîäïðîãðàììå) ìåòêà ñ òàêèìæå èìåíåì.Àññåìáëåð NASM äëÿ ýòîãî ïðåäóñìàòðèâàåò ñïåöèàëüíûå ëîêàëüíûåìåòêè.
Ñèíòàêñè÷åñêè ýòè ìåòêè îòëè÷àþòñÿ îò îáû÷íûõ òåì, ÷òî íà÷èíàþòñÿ ñ òî÷êè. Àññåìáëåð ëîêàëèçóåò òàêèå ìåòêè âî ôðàãìåíòå ïðîãðàììû, îãðàíè÷åííîì ñ îáåèõ ñòîðîí îáû÷íûìè (íåëîêàëüíûìè) ìåòêàìè. Èíà÷å ãîâîðÿ, ëîêàëüíóþ ìåòêó àññåìáëåð ðàññìàòðèâàåò íå ñàìó83ïî ñåáå, à êàê íå÷òî ïîä÷èí¼ííîå ïîñëåäíåé (áëèæàéøåé ñâåðõó) íåëîêàëüíîé ìåòêå.
Íàïðèìåð, â ñëåäóþùåì ôðàãìåíòå:first_proc:; ....cycle:; ...second_proc:; ....cycle:; ...third_proc:............ïåðâàÿ ìåòêà .cycle ïîä÷èíåíà ìåòêå first_proc, à âòîðàÿ ìåòêåsecond_proc, òàê ÷òî ìåæäó ñîáîé îíè íå êîíôëèêòóþò. Åñëè ìåòêà.cycle âñòðåòèòñÿ â ïàðàìåòðàõ òîé èëè èíîé êîìàíäû ìåæäó ìåòêàìèfirst_proc è second_proc, àññåìáëåð áóäåò çíàòü, ÷òî èìååòñÿ â âèäóèìåííî ïåðâàÿ èç ìåòîê .cycle, åñëè îíà âñòðåòèòñÿ ïîñëå second_proc,íî ïåðåä third_proc òî çàäåéñòâóåòñÿ âòîðàÿ, òîãäà êàê ïîÿâëåíèåìåòêè .cycle äî first_proc èëè ïîñëå third_proc áóäåò ðàññìàòðèâàòüñÿ êàê îøèáêà. Òàêèì îáðàçîì, åñëè êàæäóþ ïîäïðîãðàììó íà÷èíàòü ñîáû÷íîé ìåòêè, à âíóòðè ïîäïðîãðàììû èñïîëüçîâàòü òîëüêî ëîêàëüíûåìåòêè, òî â ðàçíûõ ïîäïðîãðàììàõ ìû ìîæåì èñïîëüçîâàòü ëîêàëüíûåìåòêè ñ îäèíàêîâûìè èìåíàìè, è àññåìáëåð â íèõ íå çàïóòàåòñÿ.¾Íà ñàìîì äåëå, àññåìáëåð äîñòèãàåò òàêîãî ýôôåêòà çà ñ÷¼ò íå î÷åíü ÷åñòíîãî ïðè¼ìà âèäÿ ìåòêó, èìÿ êîòîðîé íà÷èíàåòñÿ ñ òî÷êè, îí ïðîñòî äîáàâëÿåò êíåé ñïåðåäè èìÿ ïîñëåäíåé âñòðå÷àâøåéñÿ åìó ìåòêè áåç òî÷êè.
Òàêèì îáðàçîì,â ïðèìåðå âûøå ðå÷ü èä¼ò íå î äâóõ îäèíàêîâûõ ìåòêàõ .cycle, à î äâóõ ðàçíûõìåòêàõ first_proc.cycle è second_proc.cycle. Ïîëåçíî ïîìíèòü îá ýòîì è íåïðèìåíÿòü â ïðîãðàììå â ÿâíîì âèäå ìåòêè, ñîäåðæàùèå òî÷êó, íåñìîòðÿ íà òî,÷òî àññåìáëåð ýòî äîïóñêàåò.¿ 2.6.9. ÏðèìåðÏðèâåä¼ì ïðèìåð ïîäïðîãðàììû, èñïîëüçóþùåé ðåêóðñèþ. Îäíà èçïðîñòåéøèõ êëàññè÷åñêèõ çàäà÷, ðåøàåìûõ ðåêóðñèâíî ýòî ñîïîñòàâëåíèå ñòðîêè ñ îáðàçöîì, å¼ ìû è èñïîëüçóåì â ïðèìåðå.Äëÿ íà÷àëà óòî÷íèì çàäà÷ó. Äàíû äâå ñòðîêè ñèìâîëîâ, äëèíà êîòîðûõ çàðàíåå íåèçâåñòíà, íî èçâåñòíî, ÷òî êàæäàÿ èç íèõ îãðàíè÷åíàíóëåâûì áàéòîì. Ïåðâóþ ñòðîêó ìû ðàññìàòðèâàåì êàê ñîïîñòàâëÿåìóþ, âòîðóþ âîñïðèíèìàåì êàê îáðàçåö.
 îáðàçöå ñèìâîë '?' ìîæåòñîïîñòàâëÿòüñÿ ñ ïðîèçâîëüíûì ñèìâîëîì, ñèìâîë '*' ñ ïðîèçâîëüíîéïîäöåïî÷êîé ñèìâîëîâ (âîçìîæíî äàæå ïóñòîé), îñòàëüíûå ñèìâîëû îáîçíà÷àþò ñàìè ñåáÿ è òîëüêî ñàìè ñ ñîáîé ñîïîñòàâëÿþòñÿ. Òàê, îáðàçöó'abc' ñîîòâåòñòâóåò òîëüêî ñòðîêà 'abc'; îáðàçöó 'a?c' ñîîòâåòñòâóåò84ëþáàÿ ñòðîêà èç òð¼õ ñèìâîëîâ, íà÷èíàþùàÿñÿ íà 'a' è çàêàí÷èâàþùàÿñÿ íà 'c' (ñèìâîë â ñåðåäèíå ìîæåò áûòü ëþáûì). Íàêîíåö, îáðàçöó'a*' ñîîòâåòñòâóåò ëþáàÿ ñòðîêà, íà÷èíàþùàÿñÿ íà 'a', íó à îáðàçöó'*a*' ñîîòâåòñòâóåò ëþáàÿ ñòðîêà, ñîäåðæàùàÿ áóêâó 'a' â ëþáîì ìåñòå.
Íåîáõîäèìî îïðåäåëèòü, ñîîòâåòñòâóåò ëè (öåëèêîì) çàäàííàÿ ñòðîêà çàäàííîìó îáðàçöó, è âåðíóòü ðåçóëüòàò 0, åñëè íå ñîîòâåòñòâóåò, èðåçóëüòàò 1, åñëè ñîîòâåòñòâóåò.Àëãîðèòì òàêîãî ñîïîñòàâëåíèÿ, åñëè ïðè ýòîì ìîæíî èñïîëüçîâàòüðåêóðñèþ, îêàæåòñÿ äîñòàòî÷íî ïðîñòûì. Íà êàæäîì øàãå ìû ðàññìàòðèâàåì îñòàâøóþñÿ ÷àñòü ñòðîêè è îáðàçöà; ñíà÷àëà ýòè îñòàâøèåñÿ÷àñòè ñîâïàäàþò ñî ñòðîêîé è îáðàçöîì, çàòåì, ïî ìåðå ïðîäâèæåíèÿàëãîðèòìà, îò íèõ îòáðàñûâàþòñÿ ñèìâîëû, ñòîÿùèå â íà÷àëå, è ìûïðåäïîëàãàåì, ÷òî äëÿ óæå îòáðîøåííûõ ñèìâîëîâ ñîïîñòàâëåíèå ïðîøëî óñïåøíî.
Ïåðâîå, ÷òî íóæíî ñäåëàòü â íà÷àëå êàæäîãî øàãà ýòîïðîâåðèòü, íå êîí÷èëñÿ ëè ó íàñ îáðàçåö. Åñëè îí êîí÷èëñÿ, òî ðåçóëüòàòçàâèñèò îò òîãî, êîí÷èëàñü ëè ïðè ýòîì è ñòðîêà òîæå. Åñëè êîí÷èëàñü,òî ìû âîçâðàùàåì åäèíèöó (èñòèíó), åñëè íå êîí÷èëàñü âîçâðàùàåì íîëü (ëîæü); äåéñòâèòåëüíî, ñ ïóñòûì îáðàçöîì ìîæíî ñîïîñòàâèòüòîëüêî ïóñòóþ ñòðîêó.Åñëè îáðàçåö åù¼ íå êîí÷èëñÿ, ïðîâåðÿåì, íå íàõîäèòñÿ ëè â íà÷àëå íåãî (òî åñòü â ïåðâîì ñèìâîëå îñòàòêà îáðàçöà) ñèìâîë '*'. Åñëèíåò, òî âñ¼ ïðîñòî: ìû ïðîèçâîäèì ñîïîñòàâëåíèå ïåðâûõ ñèìâîëîâ ñòðîêè è îáðàçöà; åñëè ïåðâûé ñèìâîë îáðàçöà íå ÿâëÿåòñÿ ñèìâîëîì '?' èíå ðàâåí ïåðâîìó ñèìâîëó ñòðîêè, òî àëãîðèòì íà ýòîì çàâåðøàåòñÿ èìû âîçâðàùàåì ëîæü, â ïðîòèâíîì ñëó÷àå ñ÷èòàåì, ÷òî î÷åðåäíûå ñèìâîëû îáðàçöà è ñòðîêè óñïåøíî ñîïîñòàâëåíû, îòáðàñûâàåì èõ (òî åñòüóêîðà÷èâàåì îñòàòêè îáåèõ ñòðîê ñïåðåäè) è âîçâðàùàåìñÿ ê íà÷àëó àëãîðèòìà.Ñàìîå èíòåðåñíîå ïðîèñõîäèò, åñëè íà î÷åðåäíîì øàãå ïåðâûé ñèìâîëîáðàçöà îêàçàëñÿ ñèìâîëîì '*'.
 ýòîì ñëó÷àå íàì íóæíî ïîñëåäîâàòåëüíî ïåðåáðàòü âîçìîæíîñòè ñîïîñòàâëåíèÿ ýòîé ¾çâ¼çäî÷êè¿ ñ ïóñòîéïîäöåïî÷êîé ñòðîêè, ñ îäíèì ñèìâîëîì ñòðîêè, ñ äâóìÿ ñèìâîëàìè è ò. ä.,ïîêà íå êîí÷èòñÿ ñàìà ñòðîêà. Äåëàåì ìû ýòî ñëåäóþùèì îáðàçîì. Çàâîäèì öåëî÷èñëåííóþ ïåðåìåííóþ I, êîòîðàÿ áóäåò ó íàñ îáîçíà÷àòü òåêóùèé ðàññìàòðèâàåìûé âàðèàíò. Ïðèñâàèâàåì ýòîé ïåðåìåííîé íîëü (íà÷èíàåì ðàññìîòðåíèå ñ ïóñòîé öåïî÷êè). Òåïåðü äëÿ êàæäîé ðàññìàòðèâàåìîé àëüòåðíàòèâû îòáðàñûâàåì îò îáðàçöà îäèí ñèìâîë (çâ¼çäî÷êó),à îò ñòðîêè ñòîëüêî ñèìâîëîâ, êàêîå ñåé÷àñ ÷èñëî â ïåðåìåííîé I.
Ïîëó÷åííûå îñòàòêè ïûòàåìñÿ ñîïîñòàâèòü, èñïîëüçóÿ äëÿ ýòîãî âûçîâòîé ñàìîé ïîäïðîãðàììû, êîòîðóþ ìû ñåé÷àñ ïèøåì, òî åñòü ïðîèçâîäèì ðåêóðñèâíûé âûçîâ ¾ñàìèõ ñåáÿ¿. Åñëè ðåçóëüòàò âûçîâà èñòèíà,òî ìû íà ýòîì çàâåðøàåìñÿ, òîæå âåðíóâ èñòèíó. Åñëè æå ðåçóëüòàò ëîæü, òî ìû ïðîâåðÿåì, ìîæíî ëè åù¼ óâåëè÷èâàòü ïåðåìåííóþ I (íå85âûëåòèì ëè ìû ïðè ýòîì çà ïðåäåëû ñîïîñòàâëÿåìîé ñòðîêè). Åñëè óâåëè÷èâàòüñÿ óæå íåêóäà, çàâåðøàåì ðàáîòó, âåðíóâ ëîæü.  ïðîòèâíîìñëó÷àå âîçâðàùàåìñÿ ê íà÷àëó öèêëà è ðàññìàòðèâàåì ñëåäóþùåå âîçìîæíîå çíà÷åíèå I.Äëÿ ÷èòàòåëåé, çíàêîìûõ ñ ÿçûêîì ïðîãðàììèðîâàíèÿ Ñè, îòìåòèì, ÷òî íàýòîì ÿçûêå âûøåîïèñàííûé àëãîðèòì ìîæåò áûòü ðåàëèçîâàí ñëåäóþùåé ôóíêöèåé:int match(const char *str, const char *pat){int i;for(;; str++, pat++) {switch(*pat) {case 0:return *str == 0;case '*':for(i=0; ; i++) {if(match(str+i, pat+1)) return 1;if(!str[i]) return 0;}case '?':if(!*str) return 0;break;default:if(*str != *pat) return 0;}}}Íà Ïàñêàëå òàêàÿ æå ôóíêöèÿ áóäåò âûãëÿäåòü íåñêîëüêî áîëåå ãðîìîçäêî.