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

А.В. Столяров - Оформление программного кода (1108519), страница 20

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

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

Îáùèé ïðèíöèï îôîðìëåíèÿ êîäà íà ÿçûêå àññåìáëåðà äîâîëüíî ïðîñò. Ñëåäóåò ìûñëåííî ðàçäåëèòü ãîðèçîíòàëüíîå ïðîñòðàíñòâî ýêðàíà íà äâå ÷àñòè: îáëàñòü ìåòîêè îáëàñòü êîìàíä (îïåðàòîðîâ). ×àñòî âûäåëÿþò òàêæå îáëàñòü êîììåíòàðèåâ. Êîä ïèøåòñÿ ¾â ñòîëáèê¿ ïðèìåðíî òàê:xor ebx, ebxxor ecx, ecxlp:mov bl, [esi+ecx]cmp bl, 0je lpquitpush ebxinc ecxjmp lplpquit: jecxz donemov edi, esilp2:pop ebxmov [edi], blinc ediloop lp2done:;;;;;;;;;;;;;;zero ebxzero ecxanother byte from the stringis the string over?end the loop if sonext indexrepeat the loopfinish if the string is emptypoint to the buffer's beginget a charstore the charnext addressrepeat ecx timesÅñëè ìåòêà íå ïîìåùàåòñÿ â îòâåä¼ííîå äëÿ ìåòîê ïðîñòðàíñòâî, å¼ ðàñïîëàãàþò íà îòäåëüíîé ñòðîêå:fill_memory:jecxz fm_qfm_lp: mov [edi], alinc ediloop fm_lpfm_q:retÎáû÷íî ïðè ðàáîòå íà ÿçûêå àññåìáëåðà ïîä ìåòêè âûäåëÿþò ñòîëáåö øèðèíîé â îäíó òàáóëÿöèþ è, åñòåñòâåííî, èìåííî ñèìâîë òàáóëÿöèè(à íå ïðîáåëû!) ñòàâÿò ïåðåä êàæäîé êîìàíäîé (â òîì ÷èñëå è ïîñëåìåòîê).

Íåêîòîðûå ïðîãðàììèñòû ïðåäïî÷èòàþò îòäàòü ïîä ìåòêè äâåòàáóëÿöèè; ýòî ïîçâîëÿåò èñïîëüçîâàòü áîëåå äëèííûå ìåòêè áåç âûäåëåíèÿ äëÿ íèõ îòäåëüíûõ ñòðîê:fill_memory:fm_lp:fm_q:jecxz fm_qmov [edi], alinc ediloop fm_lpret89Äîâîëüíî ÷àñòî ìîæíî âñòðåòèòü ñòèëü îôîðìëåíèÿ, ïðåäïîëàãàþùèé îòäåëüíóþ êîëîíêó äëÿ îáîçíà÷åíèÿ êîìàíäû. Âûãëÿäèò ýòî ïðèìåðíî òàê:fill_memory:fm_lp:fm_q:jecxzmovincloopretfm_q[edi], aledifm_lpÊ ñîæàëåíèþ, ýòîò ñòèëü ¾ëîìàåòñÿ¿ ïðè èñïîëüçîâàíèè, íàïðèìåð, ìàêðîñîâ ñ èìåíàìè äëèííåå ñåìè ñèìâîëîâ, ïîñêîëüêó èìÿ òàêîãî ìàêðîñàïðè ìàêðîâûçîâå ñëåäóåò çàïèñàòü, ÷òî âïîëíå åñòåñòâåííî, â êîëîíêóêîìàíäû, íî ïðîñòðàíñòâà â ýòîé êîëîíêå íå õâàòàåò.

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

Ïðîãðàììà ñîñòîèò èç ñïèñêîâ, êàê, ñîáñòâåííî, è áîëüøàÿ ÷àñòü âîçìîæíûõ äàííûõ, íó à ñïèñîê â Ëèñïå ýòî îòêðûâàþùàÿ êðóãëàÿ ñêîáêà, ïðîèçâîëüíîå êîëè÷åñòâî ýëåìåíòîâ ÷åðåç ïðîáåëè çàêðûâàþùàÿ êðóãëàÿ ñêîáêà; ýëåìåíòàìè ìîãóò áûòü êàê àòîìàðíûåâûðàæåíèÿ ëþáîãî òèïà, òàê è, â ñâîþ î÷åðåäü, ñïèñêè, è òàê íà ïðîèçâîëüíóþ ãëóáèíó. Òàêèå ãåòåðîãåííûå ñòðóêòóðû äàííûõ íàçûâàþòñÿS-âûðàæåíèÿìè.Êîíå÷íî, ïðè ñîçäàíèè ïðîãðàìì íà Ëèñïå ïðèõîäèòñÿ ïðèìåíÿòüñòðóêòóðíûå îòñòóïû, èíà÷å, ïîæàëóé, â ýòèõ ñêîïëåíèÿõ ñêîáîê ðàçîáðàòüñÿ áûëî áû ñîâåðøåííî íåâîçìîæíî. Ïðè ýòîì âûçûâàåò íåêîòîðîåóäèâëåíèå ñòèëü îòñòóïîâ, ¾èñòîðè÷åñêè ñëîæèâøèéñÿ¿ âîêðóã Ëèñïà.Ðàññìîòðèì äëÿ ïðèìåðà òèïè÷íóþ ôóíêöèþ íà Ëèñïå:(defun isomorphic (tree1 tree2)(cond ((atom tree1) (atom tree2))((atom tree2) NIL)(t (and (isomorphic (car tree1) (car tree2))(isomorphic (cdr tree1) (cdr tree2))))))90Îáðàùàþò íà ñåáÿ âíèìàíèå äâà âàæíûõ ìîìåíòà.

Âî-ïåðâûõ, ðàçìåð îòñòóïà ÿâíî ¾ïëàâàåò¿: ôîðìà cond ñäâèíóòà îòíîñèòåëüíî îáúåìëþùåéôîðìû íà ñåìü ïðîáåëîâ, îòäåëüíûå ïðåäëîæåíèÿ ýòîãî cond'à ñäâèíóòû óæå íà øåñòü ïðîáåëîâ, à âòîðîé àðãóìåíò and ñäâèíóò íà âîñåìüïðîáåëîâ ïðàâåå ïðåäûäóùåãî óðîâíÿ îòñòóïà. Îáóñëîâëåíî ýòî ãëàâåíñòâóþùèì ïîäõîäîì ê ôîðìàòèðîâàíèþ ñïèñêà: åñëè ñïèñîê óìåùàåòñÿâ ñòðîêó, òî åãî çàïèñûâàþò íà îäíîé ñòðîêå, åñëè æå îí íå óìåùàåòñÿ,òî íà îäíîé ñòðîêå ïèøóò åãî íà÷àëî ïåðâûé ýëåìåíò, êîòîðûé ÷àùåïðåäñòàâëÿåò ñîáîé èìÿ ôóíêöèè èëè ôîðìû, è âòîðîé ýëåìåíò, òî åñòüïåðâûé àðãóìåíò ôóíêöèè èëè ôîðìû; îñòàëüíûå àðãóìåíòû ðàñïîëàãàþò ïîä ïåðâûì ¾â ñòîëáèê¿1 .

Åñëè ïåðâûé àðãóìåíò íå ïîìåñòèëñÿâ ñòðîêó, åãî ðàçáèâàþò àíàëîãè÷íûì îáðàçîì, ïðè÷¼ì åãî íà÷àëî íàñëåäóþùóþ ñòðîêó íå ïåðåíîñÿò (èìåííî òàê â ïðèâåä¼ííîì ïðèìåðå ïîëó÷èëîñü ñ âûçîâîì and ïîñëå ñèìâîëà t).  ðåçóëüòàòå ðàçìåð ñäâèãàîïðåäåëÿåòñÿ äëèíîé èìåíè ñèìâîëà, ñòîÿùåãî â ôîðìå ïåðâûì: ñëîâîdefun âìåñòå ñî ñêîáêîé è ïðîáåëîì äà¼ò ñåìü ñèìâîëîâ (îòñþäà ñåìüïðîáåëîâ íà ïåðâîì óðîâíå îòñòóïà), cond âìåñòå ñî ñêîáêîé è ïðîáåëîìäà¼ò øåñòü ñèìâîëîâ ýòî ðàçìåð âòîðîãî óðîâíÿ îòñòóïà, íó à t, and,äâå ñêîáêè è äâà ïðîáåëà ýòî èñêîìûå âîñåìü ïðîáåëîâ íà òðåòüåìóðîâíå.Âòîðàÿ õàðàêòåðíàÿ îñîáåííîñòü, ïîêàçàííàÿ â ïðèìåðå ýòî ãðóïïàèç øåñòè çàêðûâàþùèõ ñêîáîê â êîíöå.

Ïî÷åìó ïîêëîííèêè Ëèñïà ïðåäïî÷èòàþò çàêðûâàòü âëîæåííûå ñïèñêè èìåííî òàêèì âîò îáðàçîì, íåâïîëíå ïîíÿòíî, âåäü ñêîáêè ïðèõîäèòñÿ ñ÷èòàòü, îíè ñëèâàþòñÿ äðóãñ äðóãîì, î÷åâèäíî ñòàíîâÿñü èñòî÷íèêîì òðóäíîîáíàðóæèìûõ îøèáîê.Òåì íå ìåíåå, òàêîé ñòèëü íàñòîëüêî ïîïóëÿðåí, ÷òî ñóùåñòâóþò äàæåäèàëåêòû Ëèñïà, â êîòîðûõ åñòü ñïåöèàëüíûé ñèìâîë, îáîçíà÷àþùèé¾ñòîëüêî çàêðûâàþùèõ ñêîáîê, ñêîëüêî åñòü íåçàêðûòûõ ñïèñêîâ¿; òàê,â äèàëåêòå muLISP ìîæíî áûëî çàïèñàòü íàø ïðèìåð ñëåäóþùèì îáðàçîì:(defun isomorphic (lambda (tree1(cond ((atom tree1) (atom((atom tree2) NIL)(t (and (isomorphic(isomorphictree2)tree2))(car tree1) (car tree2))(cdr tree1) (cdr tree2]Âîçìîæíîñòü çàêðûòü ñðàçó âñå îòêðûòûå ñêîáêè óäîáíà ëèøü íà ïåðâûéâçãëÿä: èñïîëüçóÿ å¼, ìû ñàìè ñåáÿ ëèøàåì ñðåäñòâà ïðîâåðêè êîððåêòíîñòè ñòðóêòóðû íàøåãî ñïèñêà.1 Ôîðìà defun ïðåäñòàâëÿåò ñîáîé îäíî èç íåñêîëüêèõ èñêëþ÷åíèé èç îáùåãî ïðàâèëà: çäåñü ñòàðàþòñÿ íà îäíîé ñòðîêå ðàçìåñòèòü ñàìî èìÿ ôîðìû, çàòåì èìÿ ôóíêöèèè ñïèñîê ïàðàìåòðîâ, à òåëî ôóíêöèè îáû÷íî ñíîñÿò íà ñëåäóþùóþ ñòðîêó, äàæå åñëèîíî óìåñòèëîñü áû â îäíîé ñòðîêå ñ ¾çàãîëîâêîì¿.91Ìåæäó òåì, íèêòî íå ìåøàåò ïèñàòü íà Ëèñïå ¾ïî-ïàñêàëåâñêè¿, ñïîñòîÿííûì ðàçìåðîì îòñòóïà è ðàñïîëîæåíèåì çàêðûâàþùåé ñêîáêèòî÷íî ïîä íà÷àëîì ñîîòâåòñòâóþùåé êîíñòðóêöèè; íóæíî òîëüêî ðàçðûâàòü ñïèñîê, íå ïîìåñòèâøèéñÿ â ñòðîêó, íå ïîñëå âòîðîãî ýëåìåíòà, àïîñëå ïåðâîãî.

Âûãëÿäåòü ýòî áóäåò ïðèìåðíî òàê (çäåñü ìû ïðèìåíÿåìîòñòóï íà òðè ïðîáåëà):(defun isomorphic (tree1 tree2)(cond((atom tree1) (atom tree2))((atom tree2) NIL)(t(and(isomorphic (car tree1) (car tree2))(isomorphic (cdr tree1) (cdr tree2))))))Êîíå÷íî, òàêîé êîä çàíèìàåò áîëüøå ñòðîê, íî ýòî îêóïàåòñÿ ÿñíîñòüþåãî ñòðóêòóðû.  ÷àñòíîñòè, ðàñïîëîæåíèå íåñêîëüêèõ èäóùèõ ïîäðÿäçàêðûâàþùèõ êðóãëûõ ñêîáîê âäîëü äèàãîíàëè ýêðàíà ïîêàçûâàåò, ÷òîáàëàíñ ñêîáîê, ñêîðåå âñåãî, ñîáëþä¼í, òîãäà êàê íàðóøåíèå òàêîãî ðàñïîëîæåíèÿ îäíîçíà÷íî ñâèäåòåëüñòâóåò î òîì, ÷òî ãäå-òî ìû ñî ñêîáêàìèçàïóòàëèñü. áîëüøèíñòâå ñëó÷àåâ ñèíòàêñè÷åñêàÿ ñòðóêòóðà â Ëèñïå ýòî ïðîñòî ñïèñîê, êîòîðûé íà÷èíàåòñÿ è çàêàí÷èâàåòñÿ ñêîáêîé, òàê ÷òî îòêðûâàþùóþ è çàêðûâàþùóþ êðóãëûå ñêîáêè ïðèõîäèòñÿ ðàñïîëàãàòü òî÷íî äðóã íàä äðóãîì (êîíå÷íî, åñëè îíè íå îñòàëèñü íà îäíîé ñòðîêå).Èç ýòîãî ïðàâèëà åñòü íåñêîëüêî èñêëþ÷åíèé, ñâÿçàííûõ ñ ñîêðàù¼ííîé çàïèñüþ êâîòèðîâàíèÿ (àïîñòðîô), ôóíêöèîíàëüíîãî êâîòèðîâàíèÿ(êîìáèíàöèÿ ¾#'¿), ñ ñèíòàêñèñîì âåêòîðà (ñèìâîë ¾#¿), ïîëóêâîòèðîâàíèåì (semiquotation) è åãî ñîñòàâëÿþùèìè, êîòîðûå èñïîëüçóþòñÿ âìàêðîñàõ, è òàê äàëåå.

Âî âñåõ ýòèõ ñëó÷àÿõ ïåðåä îòêðûâàþùåé ñêîáêîéîêàçûâàåòñÿ îäèí èëè äâà ñèìâîëà, çàäàþùèõ èíîé ñìûñë âñåé êîíñòðóêöèè; ïðè ýòîì ïîëó÷àåòñÿ, ÷òî îòêðûâàþùàÿ ñêîáêà íå ïåðâûé ñèìâîëêîíñòðóêöèè, íî çàêðûâàþùàÿ ïî-ïðåæíåìó ïîñëåäíèé ñèìâîë. Åñòåñòâåííî, åñëè òàêàÿ êîíñòðóêöèÿ îêàçàëàñü ðàçíåñåíà íà íåñêîëüêî ñòðîê,ñëåäóåò ðàñïîëàãàòü çàêðûâàþùóþ ñêîáêó òî÷íî ïîä íà÷àëîì êîíñòðóêöèè, à íå ïîä îòêðûâàþùåé ñêîáêîé:92(mapcar#'(lambda (str elem)(list ('rec str elem 'endrec)))listcycled-labels) ýòîì ïðèìåðå òàêæå âèäíî, ÷òî lambda-ñïèñîê ïðåäñòàâëÿåò ñîáîé åù¼îäíî èñêëþ÷åíèå èç ïðàâèë åãî îôîðìëåíèå íàïîìèíàåò îôîðìëåíèåôîðìû defun; èñòî÷íèê òàêîãî èñêëþ÷åíèÿ âïîëíå ïîíÿòåí, âåäü lambdañïèñîê ýòî áåçûìÿííàÿ ôóíêöèÿ, à äëÿ ôóíêöèè íàì ïðèâû÷íåå âèäåòüçàãîëîâîê, â êîòîðûé âêëþ÷¼í ñïèñîê ïàðàìåòðîâ.Åù¼ îäèí âàæíûé îñîáûé ñëó÷àé, çàñëóæèâàþùèé âíèìàíèÿ ýòîôîðìà let, à òàêæå âñåâîçìîæíûå let*, letrec, funlet, macrolet è ò.

ï.Åñëè ñïèñîê ëîêàëüíûõ ïåðåìåííûõ, ââîäèìûõ ñ ïîìîùüþ let, óìåùàåòñÿ íà îäíîé ñòðîêå ñ ñàìèì ñëîâîì let, ñëåäóåò òàì åãî è îñòàâèòü:(let ((s 0) (p 1))(mapcar#'(lambda (x) (setq s (+ s x)) (setq p (* p x)))lst))Ñèòóàöèÿ ðåçêî îñëîæíÿåòñÿ, åñëè ïåðâûé ýëåìåíò ôîðìû let ïðèõîäèòñÿ ðàñïîëîæèòü íà íåñêîëüêèõ ñòðîêàõ, à òàêîå òðåáóåòñÿ î÷åíü ÷àñòî äîñòàòî÷íî â îäíîì èç èíèöèàëèçàòîðîâ ïîÿâèòüñÿ ñëîæíîìó âûðàæåíèþ. ¾Ïðàâèëüíîãî¿ ðåøåíèÿ äëÿ ýòîé ñèòóàöèè ïðîñòî íåò, âñå ñóùåñòâóþùèå âàðèàíòû òàê èëè èíà÷å îêàçûâàþòñÿ ïëîõè. Ïðîãðàììèñòû âòàêèõ ñëó÷àÿõ èçîáðåòàþò ñàìûå ðàçíîîáðàçíûå êîíñòðóêöèè, íàïðèìåð:(let ((seq (build-sequencer 0))(colset '(red orange yellow green blue violet))(ls nil))(setq ls (mapcar #'list seq colset the-list))(store ls)(reverse ls))Íåäîñòàòêè òàêîãî ôîðìàòèðîâàíèÿ (ê ñîæàëåíèþ, òðàäèöèîííîãî äëÿËèñïà) ìû óæå îòìå÷àëè âûøå.

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

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

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

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