Главная » Просмотр файлов » А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix

А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix (1110582), страница 35

Файл №1110582 А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix (А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix) 35 страницаА.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix (1110582) страница 352019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 35)

Ñ óâåëè÷åíèåì îáúåìà ïðîãðàììû, îäíàêî, ðàáîòàòü ñ îäíèì ôàéëîì ñòàíîâèòñÿ âñ¼ òðóäíåå è òðóäíåå, è òîìó ìîæíî íàçâàòü íåñêîëüêî ïðè÷èí. Âîïåðâûõ, äëèííûé ôàéë ýëåìåíòàðíî òÿæåëî ïåðåëèñòûâàòü. Âî-âòîðûõ,êàê ïðàâèëî, ïðîãðàììèñò â êàæäûé ìîìåíò âðåìåíè ðàáîòàåò òîëüêî ñíåáîëüøèì ôðàãìåíòîì èñõîäíîãî êîäà, ñòàðàòåëüíî âûêèäûâàÿ èç ãîëîâû îñòàëüíûå ÷àñòè ïðîãðàììû, ÷òîáû íå îòâëåêàòüñÿ, è â ýòîì ïëàíåáûëî áû ëó÷øå, ÷òîáû ôðàãìåíòû, íå íàõîäÿùèåñÿ â ðàáîòå â íàñòîÿùèé ìîìåíò, ðàñïîëàãàëèñü áû ãäå-íèáóäü ïîäàëüøå, òî åñòü òàê, ÷òîáûíå ïîïàäàòüñÿ íà ãëàçà ïðîãðàììèñòó äàæå ñëó÷àéíî. Â-òðåòüèõ, åñëèïðîãðàììà ðàçáèòà íà îòäåëüíûå ôàéëû, â íåé îêàçûâàåòñÿ ãîðàçäî ïðîùå íàéòè íóæíîå ìåñòî, ïîäîáíî òîìó, êàê ïðîùå íàéòè íóæíóþ áóìàãóâ øêàôó ñ îôèñíûìè ïàïêàìè, íåæåëè â áîëüøîì ÿùèêå áåçî âñÿêèõïàïîê. Íàêîíåö, ÷àñòî áûâàåò òàê, ÷òî îäèí è òîò æå ôðàãìåíò êîäàèñïîëüçóåòñÿ â ðàçíûõ ïðîãðàììàõ à âåäü åãî, ñêîðåå âñåãî, òàê èëèèíà÷å ïðèõîäèòñÿ âðåìÿ îò âðåìåíè ðåäàêòèðîâàòü, ÷òîáû, íàïðèìåð,èñïðàâèòü îøèáêè, è òóò óæå ñîâåðøåííî î÷åâèäíî, ÷òî ãîðàçäî ïðîùå èñïðàâèòü ôàéë â îäíîì ìåñòå è ñêîïèðîâàòü (ôàéë öåëèêîì) âî âñåîñòàëüíûå ïðîåêòû, ÷åì èñïðàâëÿòü îäèí è òîò æå ôðàãìåíò, êîòîðûéâñòàâëåí â ðàçíûå ôàéëû.Ðàçáèâêà òåêñòà ïðîãðàììû íà ôàéëû, ñîåäèíÿåìûå äèðåêòèâàìè%include èëè èõ àíàëîãàìè, ñíèìàåò ÷àñòü ïðîáëåì, íî, ê ñîæàëåíèþ,153íå âñå, ïîñêîëüêó òàêîé íàáîð ôàéëîâ îñòà¼òñÿ, êàê ãîâîðÿò ïðîãðàììèñòû, îäíîé åäèíèöåé òðàíñëÿöèè èíà÷å ãîâîðÿ, ìû ìîæåì èõ òðàíñëèðîâàòü ñ ïîìîùüþ àññåìáëåðà (èëè ñ ïîìîùüþ êîìïèëÿòîðà, åñëè ìûïèøåì íà ÿçûêå âûñîêîãî óðîâíÿ) òîëüêî âñå âìåñòå, çà îäèí ïðè¼ì.Ïðåæäå âñåãî òóò âîçíèêàåò ïðîáëåìà ñî ñêîðîñòüþ òðàíñëÿöèè.

Ñîâðåìåííûå êîìïèëÿòîðû è àññåìáëåðû ðàáîòàþò äîâîëüíî áûñòðî, íî îáúåìû íàèáîëåå ñåðü¼çíûõ ïðîãðàìì òàêîâû, ÷òî èõ ïîëíàÿ ïåðåêîìïèëÿöèÿìîæåò çàíÿòü íåñêîëüêî ÷àñîâ, à èíîãäà è íåñêîëüêî ñóòîê. Åñëè ïîñëåâíåñåíèÿ ëþáîãî, äàæå ñàìîãî íåçíà÷èòåëüíîãî èçìåíåíèÿ â ïðîãðàììóíàì, ÷òîáû ïîñìîòðåòü, ÷òî ïîëó÷èëîñü, ïðèä¼òñÿ æäàòü ñóòêè (äà è ïàðó ÷àñîâ ýòîãî óæå áóäåò äîñòàòî÷íî) ðàáîòàòü ñòàíåò ñîâåðøåííîíåâîçìîæíî.

Áîëåå òîãî, ïðîãðàììèñòû ïðàêòè÷åñêè âñåãäà èñïîëüçóþòòàê íàçûâàåìûå áèáëèîòåêè êîìïëåêòû ãîòîâûõ ïîäïðîãðàìì, êîòîðûå ïî÷òè íèêîãäà íå èçìåíÿþòñÿ è, ñîîòâåòñòâåííî, ïîñòîÿííî òðàòèòüâðåìÿ íà èõ ïåðåêîìïèëÿöèþ áûëî áû íåñêîëüêî ãëóïî. Íàêîíåö, ïðîáëåìû ñîçäàþò è ïîñòîÿííî âîçíèêàþùèå êîíôëèêòû èì¼í: ÷åì áîëüøåîáú¼ì êîäà, òåì áîëüøå â í¼ì òðåáóåòñÿ ìåòîê è äðóãèõ èäåíòèôèêàòîðîâ, ðàñò¼ò âåðîÿòíîñòü ñëó÷àéíûõ ñîâïàäåíèé, à ñäåëàòü ñ ýòèì ïðèòðàíñëÿöèè â îäèí ïðè¼ì ïî÷òè íè÷åãî íåëüçÿ âåäü äàæå ëîêàëüíûåìåòêè, êàê ìû óæå ãîâîðèëè, íà ñàìîì äåëå ïðåäñòàâëÿþò ñîáîé íå áîëåå÷åì óêîðî÷åííóþ çàïèñü áîëåå äëèííûõ ãëîáàëüíûõ ìåòîê.Âñå ýòè ïðîáëåìû ïîçâîëÿåò ðåøèòü òåõíèêà ðàçäåëüíîé êîìïèëÿöèè .

Ñóòü å¼ â òîì, ÷òî ïðîãðàììà ñîçäà¼òñÿ â âèäå ìíîæåñòâà îáîñîáëåííûõ ÷àñòåé, êàæäàÿ èç êîòîðûõ òðàíñëèðóåòñÿ îòäåëüíî. Òàêèå ÷àñòèíàçûâàþòñÿ åäèíèöàìè òðàíñëÿöèè èëè ìîäóëÿìè . ×àùå âñåãî âðîëè ìîäóëåé âûñòóïàþò îòäåëüíûå ôàéëû. Îáû÷íî â âèäå îáîñîáëåííîé åäèíèöû òðàíñëÿöèè îôîðìëÿþò íàáîð ëîãè÷åñêè ñâÿçàííûõ ìåæäóñîáîé ïîäïðîãðàìì; â ìîäóëü òàêæå ïîìåùàþò è âñ¼ íåîáõîäèìîå äëÿèõ ðàáîòû íàïðèìåð, ãëîáàëüíûå ïåðåìåííûå, åñëè òàêèå åñòü, à òàêæå âñåâîçìîæíûå êîíñòàíòû è ïðî÷åå. Êàæäûé ìîäóëü òðàíñëèðóåòñÿîòäåëüíî; â ðåçóëüòàòå òðàíñëÿöèè êàæäîãî èç íèõ ïîëó÷àåòñÿ îáúåêòíûé ôàéë , îáû÷íî èìåþùèé ñóôôèêñ ¾.o¿. Çàòåì ñ ïîìîùüþ ðåäàêòîðàñâÿçåé èç íàáîðà îáúåêòíûõ ôàéëîâ ïîëó÷àþò èñïîëíÿåìûé ôàéë.Î÷åíü âàæíûì ñâîéñòâîì ìîäóëÿ ÿâëÿåòñÿ íàëè÷èå ó íåãî ñîáñòâåííîãî ïðîñòðàíñòâà èì¼í .

Ìåòêè, ââåä¼ííûå â ìîäóëå, áóäóò âèäíûòîëüêî èç äðóãèõ ìåñò òîãî æå ìîäóëÿ, åñëè òîëüêî ìû ñïåöèàëüíî íåîáúÿâèì èõ ¾ãëîáàëüíûìè¿ (íàïîìíèì, ÷òî â ÿçûêå àññåìáëåðà NASMýòî äåëàåòñÿ äèðåêòèâîé global). ×àñòî áûâàåò òàê, ÷òî ìîäóëü ââîäèòíåñêîëüêî äåñÿòêîâ, à èíîãäà è ñîòåí ìåòîê, íî âñå îíè îêàçûâàþòñÿíóæíû òîëüêî â í¼ì ñàìîì, à èç âñåé îñòàëüíîé ïðîãðàììû òðåáóþòñÿîáðàùåíèÿ ëèøü ê îäíîé-äâóì ïðîöåäóðàì. Ýòî ïðàêòè÷åñêè ñíèìàåòïðîáëåìó êîíôëèêòîâ èì¼í: â ðàçíûõ ìîäóëÿõ ìîãóò ïîÿâëÿòüñÿ ìåòêèñ îäèíàêîâûìè èìåíàìè, è ýòî íèêàê íàì íå ìåøàåò, åñëè òîëüêî îíè íå154ãëîáàëüíûå.

Òåõíè÷åñêè ýòî îçíà÷àåò, ÷òî ïðè òðàíñëÿöèè èñõîäíîãî òåêñòà ìîäóëÿ â îáúåêòíûé êîä âñå ìåòêè, êðîìå îáúÿâëåííûõ ãëîáàëüíûìè,èñ÷åçàþò, òàê ÷òî â îáúåêòíîì ôàéëå ñîäåðæèòñÿ óæå òîëüêî èíôîðìàöèÿ îá èìåíàõ ãëîáàëüíûõ ìåòîê.Èíòåðåñíî, ÷òî ñîáñòâåííûå ïðîñòðàíñòâà èì¼í ìîäóëåé ïîçâîëÿþò ðåøèòü íåòîëüêî ïðîáëåìó êîíôëèêòà èì¼í, íî è ïðîáëåìó ïðîñòåéøåé çàùèòû îò äóðàêà , îñîáåííî àêòóàëüíîé â êðóïíûõ ïðîãðàììíûõ ðàçðàáîòêàõ, â êîòîðûõ ïðèíèìàåò ó÷àñòèå íåñêîëüêî ÷åëîâåê. Åñëè àâòîð ìîäóëÿ íå ïðåäïîëàãàåò, ÷òî òà èëèèíàÿ ïðîöåäóðà áóäåò âûçûâàòüñÿ èç äðóãèõ ìîäóëåé, ëèáî ÷òî ïåðåìåííàÿ íåäîëæíà èçìåíÿòüñÿ íèêàê èíà÷å, ÷åì ïðîöåäóðàìè òîãî æå ìîäóëÿ, òî åìó äîñòàòî÷íî íå îáúÿâëÿòü ñîîòâåòñòâóþùèå ìåòêè ãëîáàëüíûìè, è ìîæíî íè î ÷¼ì íåáåñïîêîèòüñÿ îáðàòèòüñÿ ê íèì äðóãèå ïðîãðàììèñòû íå ñìîãóò ÷èñòî òåõíè÷åñêè.

Òàêîå ñîêðûòèå äåòàëåé ðåàëèçàöèè òîé èëè èíîé ïîäñèñòåìû â ïðîãðàììåíàçûâàåòñÿ èíêàïñóëÿöèåé è ïîçâîëÿåò, íàïðèìåð, áîëåå ñìåëî èñïðàâëÿòü êîäìîäóëåé, íå áîÿñü, ÷òî äðóãèå ìîäóëè ïðè ýòîì ïåðåñòàíóò ðàáîòàòü: äîñòàòî÷íîñîõðàíÿòü íåèçìåííûìè è ðàáîòàþùèìè ãëîáàëüíûå ìåòêè.¾¿Ÿ 5.2. Ïîääåðæêà ìîäóëåé â NASMÀññåìáëåð NASM ïîääåðæèâàåò ìîäóëüíîå ïðîãðàììèðîâàíèå, ââîäÿ äëÿ ýòîãî äâà îñíîâíûõ ïîíÿòèÿ: ãëîáàëüíûå ìåòêè è âíåøíèåìåòêè . Ñ ïåðâûìè èç íèõ ìû óæå çíàêîìû: òàêèå ìåòêè îáúÿâëÿþòñÿäèðåêòèâîé global è, êàê ìû óæå çíàåì, îòëè÷àþòñÿ îò îáû÷íûõ òåì,÷òî èíôîðìàöèÿ î íèõ âêëþ÷àåòñÿ â îáúåêòíûé ôàéë ìîäóëÿ è ñòàíîâèòñÿ, òàêèì îáðàçîì, âèäíà ñèñòåìíîìó ðåäàêòîðó ñâÿçåé.

×òî êàñàåòñÿâíåøíèõ ìåòîê, òî ýòî, íàïðîòèâ, ìåòêè, ââåäåíèÿ êîòîðûõ ìû îæèäàåì îò äðóãèõ ìîäóëåé . ×àùå âñåãî ýòî ïðîñòî èìÿ ïîäïðîãðàììû(ðåæå ãëîáàëüíîé ïåðåìåííîé), êîòîðàÿ îïèñàíà ãäå-òî â äðóãîì ìîäóëå, íî ê êîòîðîé íàì íåîáõîäèìî îáðàòèòüñÿ. ×òîáû ýòî ñòàëî âîçìîæíûì, íåîáõîäèìî ñîîáùèòü àññåìáëåðó î ñóùåñòâîâàíèè ýòîé ìåòêè.Äåéñòâèòåëüíî, àññåìáëåð âî âðåìÿ òðàíñëÿöèè âèäèò òîëüêî òåêñò îäíîãî ìîäóëÿ è íè÷åãî íå çíàåò î òîì, ÷òî â äðóãèõ ìîäóëÿõ îáúÿâëåíûòå èëè èíûå ìåòêè, òàê ÷òî, åñëè ìû ïîïûòàåìñÿ îáðàòèòüñÿ ê ìåòêå èçäðóãîãî ìîäóëÿ, íèêàê íå ñîîáùèâ àññåìáëåðó î ôàêòå å¼ ñóùåñòâîâàíèÿ,ìû ïîïðîñòó ïîëó÷èì ñîîáùåíèå îá îøèáêå.

Äëÿ ýòîãî àññåìáëåð NASMââîäèò äèðåêòèâó extern. Íàïðèìåð, åñëè ìû ïèøåì ìîäóëü, â êîòîðîìõîòèì îáðàòèòüñÿ ê ïðîöåäóðå myproc, à ñàìà ýòà ïðîöåäóðà îïèñàíà ãäåòî â äðóãîì ìåñòå, òî, ÷òîáû ñîîáùèòü îá ýòîì, ñëåäóåò íàïèñàòü:extern myprocÒàêàÿ ñòðîêà ïðèêàçûâàåò àññåìáëåðó áóêâàëüíî ñëåäóþùåå: ¾ìåòêàmyproc ñóùåñòâóåò, õîòÿ å¼ è íåò â òåêóùåì ìîäóëå, òàê ÷òî, âñòðåòèâòàêóþ ìåòêó, ïðîñòî ñãåíåðèðóé ñîîòâåòñòâóþùèé îáúåêòíûé êîä, à êîíêðåòíûé àäðåñ âìåñòî ýòîé ìåòêè ïîòîì ïîäñòàâèò ðåäàêòîð ñâÿçåé¿.155Ÿ 5.3. Ïðèìåð êà÷åñòâå ïðèìåðà ìíîãîìîäóëüíîé ïðîãðàììû ìû íàïèøåì ïðîñòóþ ïðîãðàììó, êîòîðàÿ ñïðàøèâàåò ó ïîëüçîâàòåëÿ åãî èìÿ, à çàòåìçäîðîâàåòñÿ ñ íèì ïî èìåíè.

Ðàáîòó ñî ñòðîêàìè ìû íà ýòîò ðàç îðãàíèçóåì òàê, êàê ýòî îáû÷íî äåëàåòñÿ â ïðîãðàììàõ íà ÿçûêå Ñè: áóäåìèñïîëüçîâàòü íóëåâîé áàéò â êà÷åñòâå ïðèçíàêà êîíöà ñòðîêè. Ãîëîâíàÿ ïðîãðàììà áóäåò çàâèñåòü îò äâóõ îñíîâíûõ ïîäïðîãðàìì, putstrè getstr, êàæäóþ èç êîòîðûõ ìû âûíåñåì â îòäåëüíûé ìîäóëü. Ïîäïðîãðàììå putstr ïîòðåáóåòñÿ ïîñ÷èòàòü äëèíó ñòðîêè, ÷òîáû íàïå÷àòàòüâñþ ñòðîêó çà îäíî îáðàùåíèå ê îïåðàöèîííîé ñèñòåìå; äëÿ òàêîãî ïîäñ÷¼òà ìû èñïîëüçóåì ôóíêöèþ strlen, óæå çíàêîìóþ íàì ïî ïðîãðàììåèç Ÿ 4.4.

ż ìû òîæå âûíåñåì â îòäåëüíûé ìîäóëü. Íàêîíåö, îðãàíèçàöèþ âûçîâà _exit ìû òîæå âûíåñåì â ïîäïðîãðàììó (íàçîâ¼ì å¼ quit)è â îòäåëüíûé ìîäóëü. Âñå ìîäóëè íàçîâ¼ì òàê æå, êàê è âûíåñåííûå âíèõ ïîäïðîãðàììû: putstr.asm, getstr.asm, strlen.asm è quit.asm.Äëÿ îðãàíèçàöèè ñèñòåìíûõ âûçîâîâ ìû èñïîëüçóåì ìàêðîñ syscall,êîòîðûé ìû îïèñàëè íà ñòð. 148. Åãî ìû òàêæå âûíåñåì â îòäåëüíûéôàéë, íî ïîëíîöåííûì ìîäóëåì ýòîò ôàéë áûòü íå ñìîæåò.

Äåéñòâèòåëüíî, ìîäóëü ýòî åäèíèöà òðàíñëÿöèè, òîãäà êàê ìàêðîñ, âîîáùåãîâîðÿ, íå ìîæåò áûòü íè âî ÷òî îòòðàíñëèðîâàí: êàê ìû îòìå÷àëè ðàíåå, â õîäå òðàíñëÿöèè ìàêðîñû ïîëíîñòüþ èñ÷åçàþò è â îáúåêòíîì êîäåîò íèõ íè÷åãî íå îñòà¼òñÿ. Ýòî è ïîíÿòíî, âåäü ìàêðîñû ïðåäñòàâëÿþò ñîáîé íàáîð óêàçàíèé íå äëÿ ïðîöåññîðà, à äëÿ ñàìîãî àññåìáëåðà, è÷òîáû îò ìàêðîñà áûëà êàêàÿ-òî ïîëüçà, àññåìáëåð äîëæåí, ðàçóìååòñÿ,âèäåòü îïðåäåëåíèå ìàêðîñà â òîì ìåñòå, ãäå îí âñòðåòèò îáðàùåíèå êýòîìó ìàêðîñó. Ïîýòîìó ôàéë, ñîäåðæàùèé íàø ìàêðîñ syscall, ìû áóäåì ïîäñîåäèíÿòü ê äðóãèì ôàéëàì ñ ïîìîùüþ äèðåêòèâû %include íàñòàäèè ïðåïðîöåññèðîâàíèÿ (â îòëè÷èå îò ìîäóëåé, êîòîðûå ñîáèðàþòñÿâ åäèíîå öåëîå ñóùåñòâåííî ïîçæå ïîñëå çàâåðøåíèÿ òðàíñëÿöèè, ñïîìîùüþ ðåäàêòîðà ñâÿçåé).

Ýòîò ôàéë ìû íàçîâ¼ì syscall.inc; ñ íåãîìû âïîëíå ìîæåì íà÷àòü, îòêðûâ åãî äëÿ ðåäàêòèðîâàíèÿ è íàáðàâ âí¼ì ðîâíî òàêîå îïðåäåëåíèå ìàêðîñà, êàêîå áûëî äàíî íà ñòð. 148; íè÷åãî äðóãîãî â ýòîì ôàéëå íàáèðàòü íå òðåáóåòñÿ.Ñëåäóþùèì ìû íàïèøåì ôàéë strlen.asm. Îí áóäåò âûãëÿäåòü òàê:globalstrlensection .text; procedure strlen; [ebp+8] == address of the stringstrlen: push ebpmov ebp, espxor eax, eax156mov esi, [ebp+8]cmp byte [esi], 0jz .quitinc esiinc eaxjmp short .lp.quit: pop ebpret.lp:Ïåðâàÿ ñòðî÷êà ôàéëà óêàçûâàåò, ÷òî â ýòîì ìîäóëå áóäåò îïðåäåëåíàìåòêà strlen è ýòó ìåòêó íåîáõîäèìî ñäåëàòü âèäèìîé èç äðóãèõ ìîäóëåé.

Âîîáùå ãîâîðÿ, ìû ìîãëè áû ïîñòàâèòü ýòó äèðåêòèâó ãäå óãîäíî,íî ëó÷øå âûíåñòè å¼ â íà÷àëî, ÷òîáû ïðè ïåðâîì æå âçãëÿäå íà òåêñòìîäóëÿ ìîæíî áûëî äîãàäàòüñÿ, äëÿ ÷åãî îí íóæåí. Ïîäðîáíî êîììåíòèðîâàòü òåêñò ïðîöåäóðû ìû íå áóäåì, ïîñêîëüêó îí íàì óæå çíàêîì.Èìåÿ â ñâî¼ì ðàñïîðÿæåíèè ïðîöåäóðó strlen, íàïèøåì ìîäóëüputstr.asm. Ïðîöåäóðà putstr áóäåò âûçûâàòü strlen äëÿ ïîäñ÷¼òà äëèíû ñòðîêè, à çàòåì îáðàùàòüñÿ ê ñèñòåìíîìó âûçîâó write:%include "syscall.inc"global putstrextern strlen; íóæåí ìàêðîñ syscall; ìîäóëü îïèñûâàåò putstr; à ñàì èñïîëüçóåò strlensection.text; procedire putstr; [ebp+8] = address of the stringputstr: push ebp; ñòàíäàðòíîå íà÷àëîmov ebp, esp; ïîäïðîãðàììûpush dword [ebp+8] ; âûçûâàåì strlen äëÿcall strlen; ïîäñ÷¼òà äëèíû ñòðîêèadd esp, 4; ðåçóëüòàò òåïåðü â EAXsyscall 4, 1, [ebp+8], eax ; âûçûâàåì writemov esp, ebp; ñòàíäàðòíîå çàâåðøåíèåpop ebp;ïîäïðîãðàììûretÒåïåðü íàñòàë ÷åð¼ä ñàìîãî ñëîæíîãî èç ìîäóëåé íàøåé ïðîãðàììû ìîäóëÿ getstr.

Ïðîöåäóðà getstr áóäåò ïîëó÷àòü íà âõîä àäðåñ áóôåðà,â êîòîðîì ñëåäóåò ðàçìåñòèòü ïðî÷èòàííóþ ñòðîêó, è (íà âñÿêèé ñëó÷àé) äëèíó ýòîãî áóôåðà, ÷òîáû íå äîïóñòèòü åãî ïåðåïîëíåíèÿ, åñëèïîëüçîâàòåëþ ïðèä¼ò â ãîëîâó íàáðàòü ñòðîêó, êîòîðàÿ â íàø áóôåð íåïîìåñòèòñÿ. Äëÿ óïðîùåíèÿ ðåàëèçàöèè ìû áóäåì ñ÷èòûâàòü ñòðîêó ïîîäíîìó ñèìâîëó; êîíå÷íî, â íàñòîÿùèõ ïðîãðàììàõ òàê íå äåëàþò, íîíàøà çàäà÷à ñåé÷àñ íå â òîì, ÷òîáû ïîëó÷èòü ýôôåêòèâíóþ ïðîãðàììó,òàê ÷òî ìû âïîëíå ìîæåì íåìíîãî îáëåã÷èòü ñåáå æèçíü. Ïîäïðîãðàììà157getstr áóäåò èñïîëüçîâàòü ëîêàëüíóþ ïåðåìåííóþ, êîòîðóþ â êîììåíòàðèÿõ ìû íàçîâ¼ì I è êîòîðàÿ, êàê è âñå ëîêàëüíûå ïåðåìåííûå, áóäåòðàñïîëàãàòüñÿ â ñòåêîâîì ôðåéìå, äëÿ ÷åãî ìû â íà÷àëå ïðîöåäóðû ñîîòâåòñòâóþùèì îáðàçîì èçìåíèì óêàçàòåëü ñòåêà.

 ïåðåìåííîé I áóäåòñîäåðæàòüñÿ òåêóùåå êîëè÷åñòâî ïðî÷èòàííûõ ñèìâîëîâ, èçíà÷àëüíîðàâíîå íóëþ. Äàëåå ïðîöåäóðà áóäåò â öèêëå ÷èòàòü ïî îäíîìó ñèìâîëó ñ ïîìîùüþ ñèñòåìíîãî âûçîâà read. ×òåíèå áóäåò ïðåêðàùåíî ïðèíàñòóïëåíèè îäíîãî èç ñëåäóþùèõ óñëîâèé: ëèáî read âåðí¼ò ÷òî-ëèáîîòëè÷íîå îò 1, ÷òî â äàííîì ñëó÷àå áóäåò îçíà÷àòü íàñòóïëåíèå ñèòóàöèè¾êîíåö ôàéëà¿ èëè îøèáêó; ëèáî êîä ïðî÷èòàííîãî ñèìâîëà áóäåò ðàâåí10, òî åñòü ýòî îêàæåòñÿ ñèìâîë ïåðåâîäà ñòðîêè (ýòîò êîä ãåíåðèðóåòêëàâèøà Enter); ëèáî, íàêîíåö, â áóôåðå îñòàíåòñÿ ìåñòî òîëüêî ïîä çàâåðøàþùèé íóëåâîé áàéò, ÷òî ïðîâåðÿåòñÿ óñëîâèåì I+1>buflen.

Характеристики

Тип файла
PDF-файл
Размер
1,1 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6369
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее