А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix (1110582), страница 25
Текст из файла (страница 25)
Ýòî íå âñåãäà óäîáíî, îñîáåííîäëÿ ëþäåé, ïðèâûêøèõ ê ÿçûêàì âûñîêîãî óðîâíÿ. Ïîëüçóÿñü ìåõàíèçìîì ìàêðîñîâ, ìû ìîæåì èçðÿäíî ñîêðàòèòü çàïèñü âûçîâà ïîäïðîãðàììû. Äëÿ ýòîãî ìû îïèøåì ìàêðîñû pcall1, pcall2 è ò. ä., äëÿ âûçîâà,ñîîòâåòñòâåííî, ïðîöåäóðû îò îäíîãî ïàðàìåòðà, äâóõ ïàðàìåòðîâ è ò. ä.Ñ ïîìîùüþ òàêèõ ìàêðîñîâ çàïèñü âûçîâà ïðîöåäóðû ñîêðàòèòñÿ äî îäíîé ñòðî÷êè; íàïðèìåð, âìåñòîpush edxpush dword mylabelpush dword 517call myprocadd esp, 12ìîæíî áóäåò íàïèñàòüpcall3 myproc, dword 517, dword mylabel, edx÷òî, êîíå÷íî, ãîðàçäî óäîáíåå è ïîíÿòíåå.
Ïîçæå, ðàçîáðàâøèñü ñ ìàêðîîïðåäåëåíèÿìè ãëóáæå, ìû ïåðåïèøåì ýòè ìàêðîñû, âìåñòî íèõ ââåäÿîäèí ìàêðîñ pcall, ðàáîòàþùèé äëÿ ëþáîãî êîëè÷åñòâà àðãóìåíòîâ, íîïîêà äëÿ ïðèìåðà îãðàíè÷èìñÿ ÷àñòíûìè ñëó÷àÿìè. Èòàê, ïèøåì ìàêðîîïðåäåëåíèå:%macro pcall1 2push %2call %1add esp, 4%endmacro; 2 -- êîë-âî ïàðàìåòðîâ ìàêðîñàÌû îïèñàëè ìíîãîñòðî÷íûé ìàêðîñ ñ èìåíåì pcall1, èìåþùèé äâàïàðàìåòðà: èìÿ âûçûâàåìîé ïðîöåäóðû äëÿ êîìàíäû call è àðãóìåíò105ïðîöåäóðû äëÿ çàíåñåíèÿ â ñòåê. Ñòðîêè, íàïèñàííûå ìåæäó äèðåêòèâàìè %macro è %endmacro, ñîñòàâëÿþò òåëî ìàêðîñà øàáëîí äëÿ òåêñòà, êîòîðûé äîëæåí ïîëó÷èòüñÿ â ðåçóëüòàòå ìàêðîïîäñòàíîâêè. Ñàìàìàêðîïîäñòàíîâêà â äàííîì ñëó÷àå áóäåò äîâîëüíî ïðîñòîé: ìàêðîïðîöåññîð òîëüêî çàìåíèò âõîæäåíèÿ %1 è %2 ñîîòâåòñòâåííî íà ïåðâûé èâòîðîé ïàðàìåòðû, çàäàííûå â ìàêðîâûçîâå.
Åñëè ïîñëå òàêîãî îïðåäåëåíèÿ â òåêñòå íàøåé ïðîãðàììû âñòðåòèòñÿ ñòðîêà âèäàpcall1 proc, eaxìàêðîïðîöåññîð âîñïðèìåò ýòó ñòðîêó êàê ìàêðîâûçîâ è âûïîëíèò ìàêðîïîäñòàíîâêó â ñîîòâåòñòâèè ñ âûøåïðèâåä¼ííûì ìàêðîîïðåäåëåíèåì,ñ÷èòàÿ ïåðâûì ïàðàìåòðîì ñëîâî proc, âòîðûì ïàðàìåòðîì ñëîâî eax èïîäñòàâëÿÿ èõ âìåñòî %1 è %2.  ðåçóëüòàòå ïîëó÷èòñÿ ñëåäóþùèé ôðàãìåíò:push eaxcall procadd esp, 4Àíàëîãè÷íûì îáðàçîì îïèøåì ìàêðîñû pcall2 è pcall3:%macro pcall2 3push %3push %2call %1add esp, 8%endmacro%macro pcall3 4push %4push %3push %2call %1add esp, 12%endmacroÄëÿ ïîëíîòû ìîæíî äîïèñàòü òàêæå è ìàêðîñ pcall0:%macro pcall0 1call %1%endmacroÊîíå÷íî, òàêîé ìàêðîñ, â îòëè÷èå îò ïðåäûäóùèõ, íè÷óòü íå ñîêðàùàåò îáú¼ì ïðîãðàììû, íî çàòî îí ïîçâîëèò íàì âñå âûçîâû ïîäïðîãðàììîôîðìèòü åäèíîîáðàçíî.
Îïèñàíèå ìàêðîñîâ pcall4, pcall5 è ò. ä. äî106pcall8 îñòàâëÿåì ÷èòàòåëþ â êà÷åñòâå óïðàæíåíèÿ; çàîäíî äëÿ ñàìîïðîâåðêè îòâåòüòå íà âîïðîñ, ïî÷åìó ìû ïðåäëàãàåì îñòàíîâèòüñÿ èìåííî íàpcall8, à íå, íàïðèìåð, íà pcall9 èëè pcall12.Ðàññìîòðåííûé íàìè ïðèìåð èñïîëüçîâàë ìíîãîñòðî÷íûé ìàêðîñ ;êàê ìû óáåäèëèñü, âûçîâ ìíîãîñòðî÷íîãî ìàêðîñà ñèíòàêñè÷åñêè âûãëÿäèò òî÷íî òàê æå, êàê èñïîëüçîâàíèå ìàøèííûõ êîìàíä èëè ïñåâäîêîìàíä: âìåñòî èìåíè êîìàíäû ïèøåòñÿ èìÿ ìàêðîñà, çàòåì ÷åðåç çàïÿòóþïåðå÷èñëÿþòñÿ ïàðàìåòðû.
Ïðè ýòîì ìíîãîñòðî÷íûé ìàêðîñ âñåãäà ïðåîáðàçóåòñÿ â îäíó èëè íåñêîëüêî ñòðîê íà ÿçûêå àññåìáëåðà. Íî ÷òîåñëè, ê ïðèìåðó, íàì íóæíî ñãåíåðèðîâàòü ñ ïîìîùüþ ìàêðîñà íåêîòîðóþ ÷àñòü ñòðîêè, à íå ôðàãìåíò èç íåñêîëüêèõ ñòðîê? Òàêàÿ ïîòðåáíîñòü òîæå âîçíèêàåò äîâîëüíî ðåãóëÿðíî. Òàê, â ïðèìåðå, ïðèâåä¼ííîìâ 2.6.9, âèäíî, ÷òî âíóòðè ïðîöåäóð î÷åíü ÷àñòî ïðèõîäèòñÿ èñïîëüçîâàòü êîíñòðóêöèè âðîäå [ebp+12], [ebp-4] è ò.
ï. äëÿ îáðàùåíèÿ ê ïàðàìåòðàì ïðîöåäóðû è å¼ ëîêàëüíûì ïåðåìåííûì.  ïðèíöèïå, ê ýòèìêîíñòðóêöèÿì íåñëîæíî ïðèâûêíóòü; íî ìîæíî ïîéòè è äðóãèì ïóò¼ì,ïðèìåíèâ îäíîñòðî÷íûå ìàêðîñû . Äëÿ íà÷àëà íàïèøåì ñëåäóþùèå6ìàêðîîïðåäåëåíèÿ:%define%define%define%define%define%definearg1 ebp+8arg2 ebp+12arg3 ebp+16local1 ebp-4local2 ebp-8local3 ebp-12 äîïîëíåíèå ê íèì äîïèøåì åù¼ è òàêîå:%define arg(n) ebp+(4*n)+4%define local(n) ebp-(4*n)Òåïåðü ê ïàðàìåòðó ïðîöåäóðû ìîæíî îáðàòèòüñÿ òàê:mov eax, [arg1]èëè òàê (åñëè, íàïðèìåð, íå õâàòèëî îïèñàííûõ ìàêðîñîâ)mov [arg(7)], edx ïðèíöèïå ìû ìîãëè è êâàäðàòíûå ñêîáêè âêëþ÷èòü âíóòðü ìàêðîñîâ, ÷òîáû íåïèñàòü èõ êàæäûé ðàç.
Íàïðèìåð, åñëè èçìåíèòü îïðåäåëåíèå ìàêðîñà arg1 íàñëåäóþùåå:6 Çäåñü è äàëåå â íàøèõ ïðèìåðàõ ìû ïðåäïîëàãàåì, ÷òî âñå ïàðàìåòðû ïðîöåäóðè âñå ëîêàëüíûå ïåðåìåííûå âñåãäà ïðåäñòàâëÿþò ñîáîé ¾äâîéíûå ñëîâà¿, òî åñòüèìåþò ðàçìåð 4 áàéòà; íà ñàìîì äåëå, êîíå÷íî, ýòî íå âñåãäà òàê, íî íàì ñåé÷àñâàæíåå èëëþñòðàòèâíàÿ öåííîñòü ïðèìåðà.107%define arg1 [ebp+8]òî ñîîòâåòñòâóþùèé ìàêðîâûçîâ ñòàë áû âûãëÿäåòü òàê:mov eax, arg1Ìû íå ñäåëàëè ýòîãî èç ñîîáðàæåíèé ñîõðàíåíèÿ íàãëÿäíîñòè. Àññåìáëåð NASMïîääåðæèâàåò, êàê ìû óæå çíàåì, ñîãëàøåíèå î òîì, ÷òî ëþáîå îáðàùåíèå ê ïàìÿòè îôîðìëÿåòñÿ ñ ïîìîùüþ êâàäðàòíûõ ñêîáîê, åñëè æå èõ íåò, òî ìû èìååìäåëî ñ íåïîñðåäñòâåííûì èëè ðåãèñòðîâûì îïåðàíäîì. Ïðîãðàììèñò, ïðèâûêøèéê ýòîìó ñîãëàøåíèþ, ïðè ÷òåíèè ïðîãðàììû áóäåò âûíóæäåí ïðèëàãàòü ëèøíèåóñèëèÿ, ÷òîáû âñïîìíèòü, ÷òî arg1 â äàííîì ñëó÷àå íå ìåòêà, à èìÿ ìàêðîñà, òàê÷òî çäåñü ïðîèñõîäèò èìåííî îáðàùåíèå ê ïàìÿòè, à íå çàãðóçêà â ðåãèñòð àäðåñàìåòêè.
Ïîíÿòíîñòè ïðîãðàììû òàêèå âåùè îòíþäü íå ñïîñîáñòâóþò. Ó÷òèòå, ÷òî èâû ñàìè, áóäó÷è äàæå àâòîðîì ïðîãðàììû, ìîæåòå çà íåñêîëüêî äíåé íà÷èñòî çàáûòü, ÷òî æå èìåëîñü â âèäó, è òîãäà ýêîíîìèÿ äâóõ ñèìâîëîâ (ñêîáîê) îáåðí¼òñÿäëÿ âàñ ïîòåðåé áåñöåííîãî âðåìåíè. 3.5.3. Îäíîñòðî÷íûå ìàêðîñû; ìàêðîïåðåìåííûåÊàê âèäíî èç ïðèìåðîâ ïðåäûäóùåãî ïàðàãðàôà, îäíîñòðî÷íûé ìàêðîñ ýòî òàêîé ìàêðîñ, îïðåäåëåíèå êîòîðîãî ñîñòîèò èç îäíîé ñòðîêè,à åãî âûçîâ ðàçâîðà÷èâàåòñÿ âî ôðàãìåíò ñòðîêè òåêñòà (òî åñòü ìîæåòèñïîëüçîâàòüñÿ äëÿ ãåíåðàöèè ÷àñòè ñòðîêè). Îòìåòèì, ÷òî åäèíîæäûîïðåäåë¼ííûé ìàêðîñ ìîæíî ïðè íåîáõîäèìîñòè ïåðåîïðåäåëèòü, ïðîñòîâñòàâèâ â òåêñò ïðîãðàììû åù¼ îäíî îïðåäåëåíèå òîãî æå ñàìîãî ìàêðîñà.
Ñ òîãî ìîìåíòà, êàê ìàêðîïðîöåññîð ¾óâèäèò¿ íîâîå îïðåäåëåíèå,îí áóäåò èñïîëüçîâàòü åãî âìåñòî ñòàðîãî. Òàêèì îáðàçîì, îäíî è òî æåèìÿ ìàêðîñà â ðàçíûõ ìåñòàõ ïðîãðàììû ìîæåò îçíà÷àòü ðàçíûå âåùèè ðàñêðûâàòüñÿ â ðàçíûå ôðàãìåíòû òåêñòà. Áîëåå òîãî, ìàêðîñ âîîáùå ìîæíî óáðàòü, âîñïîëüçîâàâøèñü äèðåêòèâîé %undef; âñòðåòèâ òàêóþäèðåêòèâó, ìàêðîïðîöåññîð íåìåäëåííî ¾çàáóäåò¿ î ñóùåñòâîâàíèè ìàêðîñà.
Ïðåäñòàâëÿåò èíòåðåñ âîïðîñ î òîì, ÷òî áóäåò, åñëè â îïðåäåëåíèèîäíîãî ìàêðîñà èñïîëüçîâàòü âûçîâ äðóãîãî ìàêðîñà, à ýòîò ïîñëåäíèé,â ñâîþ î÷åðåäü, âðåìÿ îò âðåìåíè ïåðåîïðåäåëÿòü.Åñëè äëÿ îïèñàíèÿ îäíîñòðî÷íîãî ìàêðîñà A èñïîëüçîâàòü óæå çíàêîìóþ íàì äèðåêòèâó %define è â å¼ òåëå èñïîëüçîâàòü ìàêðîâûçîâ ìàêðîñà B, òî ýòîò ìàêðîâûçîâ â ñàìîé äèðåêòèâå íå ðàñêðûâàåòñÿ; ìàêðîïðîöåññîð îñòàâëÿåò âõîæäåíèå ìàêðîñà B êàê îíî åñòü äî òåõ ïîð, ïîêà íåâñòðåòèò âûçîâ ìàêðîñà A.
Êîãäà æå áóäåò âûïîëíåíà ìàêðîïîäñòàíîâêàäëÿ A, â å¼ ðåçóëüòàòå áóäåò ñîäåðæàòüñÿ B, è äëÿ íåãî ìàêðîïðîöåññîð, â ñâîþ î÷åðåäü, âûïîëíèò ìàêðîïîäñòàíîâêó. Òàêèì îáðàçîì, áóäåòèñïîëüçîâàíî òî îïðåäåëåíèå ìàêðîñà B, êîòîðîå áûëî àêòóàëüíûì â ìîìåíò ïîäñòàíîâêè A.Ïîÿñíèì ñêàçàííîå íà ïðèìåðå. Ïóñòü ìû ââåëè äâà ìàêðîñà:108%define%definethenumbermkvar25dd thenumberÅñëè òåïåðü íàïèñàòü â ïðîãðàììå ñòðî÷êóvar1mkvaròî ìàêðîïðîöåññîð ñíà÷àëà âûïîëíèò ìàêðîïîäñòàíîâêó äëÿ mkvar, ïîëó÷èâ ñòðîêóvar1dd thenumberà èç íå¼, â ñâîþ î÷åðåäü, ìàêðîïîäñòàíîâêîé thenumber ïîëó÷èò ñòðîêóvar1dd 25Åñëè òåïåðü ïåðåîïðåäåëèòü thenumber è ñíîâà âîñïîëüçîâàòüñÿ âûçîâîìmkvar:%definevar2thenumbermkvar36òî ðåçóëüòàòîì ðàáîòû ìàêðîïðîöåññîðà áóäåò ñòðîêà, ñîäåðæàùàÿ èìåííî ÷èñëî 36:var2dd 36íåñìîòðÿ íà òî, ÷òî ñàì ìàêðîñ mkvar ìû íå èçìåíÿëè: íà ïåðâîì øàãå áóäåò ïîëó÷åíî, êàê è â ïðîøëûé ðàç, dd thenumber, íî ó thenumber òåïåðüçíà÷åíèå 36, îíî è áóäåò ïîäñòàâëåíî.
Òàêàÿ ñòðàòåãèÿ ìàêðîïîäñòàíîâîêíàçûâàåòñÿ ¾ëåíèâîé7 ¿. Îäíàêî àññåìáåð NASM ïîçâîëÿåò ïðèìåíÿòüè äðóãóþ ñòðàòåãèþ, íàçûâàåìóþ ýíåðãè÷íîé, äëÿ ÷åãî ïðåäóñìîòðåíàäèðåêòèâà %xdefine. Ýòà äèðåêòèâà ïîëíîñòüþ àíàëîãè÷íà äèðåêòèâå%define ñ òîé òîëüêî ðàçíèöåé, ÷òî, åñëè â òåëå îïèñàíèÿ ìàêðîñà âñòðå÷àþòñÿ ìàêðîâûçîâû, ìàêðîïðîöåññîð ïðîèçâîäèò èõ ìàêðîïîäñòàíîâêèíåçàìåäëèòåëüíî, íå äîæèäàÿñü, ïîêà ïîëüçîâàòåëü âûçîâåò îïèñûâàåìûé ìàêðîñ. Òàê, åñëè â âûøåïðèâåä¼ííîì ïðèìåðå çàìåíèòü äèðåêòèâó%define â îïèñàíèè ìàêðîñà mkvar íà %xdefine:%define%xdefinevar1%definevar2thenumbermkvarmkvarthenumbermkvar25dd thenumber367 Òàêîå íàçâàíèå ÿâëÿåòñÿ êàëüêîé àíãëèéñêîãî lazy è ÷àñòè÷íî îïðàâäàíî òåì, ÷òîìàêðîïðîöåññîð êàê áû ¾ëåíèòñÿ¿ âûïîëíÿòü ìàêðîïîäñòàíîâêó (â äàííîì ñëó÷àåìàêðîñà thenumber), ïîêà åãî ê ýòîìó íå âûíóäÿò.109òî îáå ïîëó÷èâøèåñÿ ñòðîêè áóäóò ñîäåðæàòü ÷èñëî 25:var1var2dd 25dd 25Ïåðåîïðåäåëåíèå ìàêðîñà thenumber òåïåðü íå â ñèëàõ ïîâëèÿòü íà ðàáîòó ìàêðîñà mkvar, ïîñêîëüêó òåëî ìàêðîñà mkvar íà ýòîò ðàç íå ñîäåðæèòñëîâà thenumber: îáðàáàòûâàÿ îïðåäåëåíèå mkvar, ìàêðîïðîöåññîð ïîäñòàâèë âìåñòî ñëîâà thenumber åãî çíà÷åíèå (25).Èíîãäà âîçíèêàåò ïîòðåáíîñòü ñâÿçàòü ñ èìåíåì ìàêðîñà íå ïðîñòîñòðîêó, à ÷èñëî, ÿâëÿþùååñÿ ðåçóëüòàòîì âû÷èñëåíèÿ àðèôìåòè÷åñêîãîâûðàæåíèÿ.
Àññåìáëåð NASM ïîçâîëÿåò ýòî ñäåëàòü, èñïîëüçóÿ äèðåêòèâó %assign.  îòëè÷èå îò %define è %xdefine, ýòà äèðåêòèâà íå òîëüêîâûïîëíÿåò âñå íåîáõîäèìûå ïîäñòàíîâêè â òåëå ìàêðîîïðåäåëåíèÿ, íî èïûòàåòñÿ âû÷èñëèòü òåëî êàê îáûêíîâåííîå öåëî÷èñëåííîå àðèôìåòè÷åñêîå âûðàæåíèå. Åñëè ýòî íå ïîëó÷àåòñÿ, ôèêñèðóåòñÿ îøèáêà. Òàê,åñëè íàïèñàòü â ïðîãðàììå ñíà÷àëà%assignvar25varvar+1à ïîòîì%assignòî â ðåçóëüòàòå ñ ìàêðîèìåíåì var áóäåò ñâÿçàíî çíà÷åíèå 26, êîòîðîå èáóäåò ïîäñòàâëåíî, åñëè ìàêðîïðîöåññîð âñòðåòèò ñëîâî var â äàëüíåéøåì òåêñòå ïðîãðàììû.Ìàêðîèìåíà, ââîäèìûå äèðåêòèâîé %assign, îáû÷íî íàçûâàþò ìàêðîïåðåìåííûìè . Êàê ìû óâèäèì äàëåå, ìàêðîïåðåìåííûå ÿâëÿþòñÿâàæíûì ñðåäñòâîì, ïîçâîëÿþùèì çàäàòü ìàêðîïðîöåññîðó öåëóþ ïðîãðàììó, ðåçóëüòàòîì êîòîðîé ìîæåò ñòàòü î÷åíü äëèííûé òåêñò íà ÿçûêåàññåìáëåðà. 3.5.4.
Óñëîâíàÿ êîìïèëÿöèÿ×àñòî ïðè ðàçðàáîòêå ïðîãðàìì âîçíèêàåò ïîòðåáíîñòü â ñîçäàíèèðàçëè÷íûõ âåðñèé èñïîëíÿåìîãî ôàéëà ñ èñïîëüçîâàíèåì îäíîãî è òîãîæå èñõîäíîãî òåêñòà. Äîïóñòèì, ìû ïèøåì ïðîãðàììû íà çàêàç è ó íàñåñòü äâà çàêàç÷èêà Ïåòðîâ è Ñèäîðîâ, ïðè÷¼ì ïðîãðàììû äëÿ íèõ ïî÷òèîäèíàêîâû, íî ó êàæäîãî èç äâîèõ èìåþòñÿ ñïåöèôè÷åñêèå ïîòðåáíîñòè,îòñóòñòâóþùèå ó äðóãîãî.  òàêîé ñèòóàöèè õîòåëîñü áû, êîíå÷íî, èìåòüè ïîääåðæèâàòü îäèí èñõîäíûé òåêñò: â ïðîòèâíîì ñëó÷å ó íàñ ïîÿâÿòñÿäâå êîïèè îäíîãî è òîãî æå êîäà, è ïðèä¼òñÿ, íàïðèìåð, êàæäóþ íàéäåííóþ îøèáêó èñïðàâëÿòü â äâóõ ìåñòàõ. Îäíàêî ïðè êîìïèëÿöèè âåðñèè110äëÿ Ïåòðîâà íóæíî èñêëþ÷èòü èç ðàáîòû ôðàãìåíòû, ïðåäíàçíà÷åííûåäëÿ Ñèäîðîâà, è íàîáîðîò.Ïîäîáíàÿ ïîòðåáíîñòü âîçíèêàåò è â äðóãèõ ñèòóàöèÿõ. Èçâåñòíî, íàïðèìåð, ÷òî îòëàäî÷íàÿ ïå÷àòü (òî åñòü âñòàâêà â ïðîãðàììó ñïåöèàëüíûõ îïåðàöèé âûâîäà, ïîçâîëÿþùèõ ïîíÿòü, ÷òî ïðîèñõîäèò âî âðåìÿðàáîòû ïðîãðàììû) ÿâëÿåòñÿ îäíèì èç ñàìûõ óíèâåðñàëüíûõ è ìîùíûõñðåäñòâ îòëàäêè ïðîãðàìì; â òî æå âðåìÿ îêîí÷àòåëüíàÿ âåðñèÿ ïðîãðàììû, ðàçóìååòñÿ, íå äîëæíà ñîäåðæàòü îïåðàöèé îòëàäî÷íîé ïå÷àòè,ïîñêîëüêó âñÿ îòëàäî÷íàÿ èíôîðìàöèÿ ïðåäíàçíà÷åíà äëÿ ïðîãðàììèñòà, àâòîðà ïðîãðàììû, à ïîëüçîâàòåëþ ìîæåò òîëüêî ìåøàòü.
Ïðîáëåìàâ òîì, ÷òî îòëàäêà ïðîãðàììû ïðîöåññ áåñêîíå÷íûé, è êàê òîëüêî ìûðåøèì, ÷òî îíà çàâåðøåíà è óäàëèì èç òåêñòà âñþ îòëàäî÷íóþ ïå÷àòü,ïî çàêîíó ïîäëîñòè òóò æå îáíàðóæèòñÿ î÷åðåäíàÿ îøèáêà, è íàì âíîâüïðèä¼òñÿ ðåäàêòèðîâàòü íàø èñõîäíèê, ÷òîáû âåðíóòü îòëàäî÷íóþ ïå÷àòü íà ìåñòî.Áîëüøèíñòâî ïðîôåññèîíàëüíûõ êîìïèëèðóåìûõ ÿçûêîâ ïðîãðàììèðîâàíèÿ ïîääåðæèâàþò äëÿ ïîäîáíûõ ñëó÷àåâ ñïåöèàëüíûå êîíñòðóêöèè, íàçûâàåìûå äèðåêòèâàìè óñëîâíîé êîìïèëÿöèè è ïîçâîëÿþùèå âûáèðàòü, êàêèå ôðàãìåíòû ïðîãðàììû êîìïèëèðîâàòü, à êàêèåèãíîðèðîâàòü.
Îáû÷íî îòðàáîòêó äèðåêòèâ óñëîâíîé êîìïèëÿöèè âîçëàãàþò íà ìàêðîïðîöåññîð, åñëè, êîíå÷íî, òàêîâîé â ÿçûêå ïðåäóñìîòðåí.Ñêàçàííîå ñïðàâåäëèâî, êðîìå ïðî÷åãî, ïðàêòè÷åñêè äëÿ âñåõ ÿçûêîâ àññåìáëåðà, âêëþ÷àÿ è íàø NASM.Ðàññìîòðèì ïðèìåð, ñâÿçàííûé ñ îòëàäêîé. Äîïóñòèì, ìû íàïèñàëèïðîãðàììó, îòêîìïèëèðîâàëè å¼ è çàïóñòèëè, íî îíà çàâåðøàåòñÿ àâàðèéíî, è ìû íå ìîæåì ïîíÿòü ïðè÷èíó, íî äóìàåì, ÷òî àâàðèÿ ïðîèñõîäèò âíåêîåì ¾ïîäîçðèòåëüíîì¿ ôðàãìåíòå. ×òîáû ïðîâåðèòü ñâî¼ ïðåäïîëîæåíèå, ìû õîòèì íåïîñðåäñòâåííî ïåðåä âõîäîì â ýòîò ôðàãìåíò è ñðàçóïîñëå âûõîäà èç íåãî âñòàâèòü ïå÷àòü ñîîòâåòñòâóþùèõ ñîîáùåíèé.