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

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

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

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

6.2. Ðàçðÿäû ðåãèñòðîâ CR, SR è TWfclex èç ïðåäûäóùåãî ïàðàãðàôà: ýòî îáîçíà÷åíèå ñîîòâåòñòâóåò ìàøèííûì êîìàíäàì wait è fnclex.Ÿ 6.7.3. Ðåãèñòðû CR, SR è TWÊàê óæå ãîâîðèëîñü, óïðàâëåíèå ðåæèìîì ðàáîòû ñîïðîöåññîðà îñóùåñòâëÿåòñÿ óñòàíîâêîé ñîäåðæèìîãî ðåãèñòðà CR (Control Register ), à ïîðåçóëüòàòàì âûïîëíåíèÿ îïåðàöèé ïðîöåññîð óñòàíàâëèâàåò ñîäåðæèìîåðåãèñòðà SR (Status Register ), êîòîðîå ìîæíî ïðîàíàëèçèðîâàòü.

Íàêîíåö,òåêóùåå ñîñòîÿíèå ðåãèñòðîâ, ñîñòàâëÿþùèõ ñòåê, îòðàæåíî â ðåãèñòðåTW (Tag Word ). Íàçíà÷åíèå ðàçðÿäîâ, ñîñòàâëÿþùèõ ðåãèñòð óïðàâëåíèÿ CR, ðåãèñòð ñîñòîÿíèÿ SR è ðåãèñòð ìåòîê TW, ïîêàçàíî íà ðèñ. 6.2.Áîëüøàÿ ÷àñòü ýòèõ ðàçðÿäîâ íàì óæå èçâåñòíà; òàê, ìëàäøèå øåñòü áèòâ ðåãèñòðàõ CR è SR ïðåäñòàâëÿþò ñîáîé ñîîòâåòñòâåííî ìàñêè è ôëàãè äëÿ øåñòè òèïîâ èñêëþ÷èòåëüíûõ ñèòóàöèé (ñì. Ÿ 6.7.1). Áèòû IC èIEM ðåãèñòðà CR â ñîâðåìåííûõ ïðîöåññîðàõ íå èñïîëüçóþòñÿ.

Áèòû RC(Rounding Control ) óïðàâëÿþò ðåæèìîì îêðóãëåíèÿ: 00 ê áëèæàéøåìó÷èñëó, 01 â ñòîðîíó óìåíüøåíèÿ, 10 â ñòîðîíó óâåëè÷åíèÿ, 11 âñòîðîíó íóëÿ. Áèòû PC (Precision Control ) çàäàþò òî÷íîñòü âûïîëíÿåìûõîïåðàöèé: 00 32-áèòíûå ÷èñëà, 10 64-áèòíûå ÷èñëà, 11 80-áèòíûå÷èñëà (ïî óìîë÷àíèþ èñïîëüçóåòñÿ èìåííî ýòîò ðåæèì, è íåîáõîäèìîñòüåãî èçìåíèòü âîçíèêàåò êðàéíå ðåäêî). ðåãèñòðå SR ôëàãè C3, C2 è C0 îáû÷íî èñïîëüçóþòñÿ êàê ïðèçíàêðåçóëüòàòà îïåðàöèè ñðàâíåíèÿ (ñì. Ÿ 6.6); ôëàã C1 îáû÷íî íå èñïîëüçóåòñÿ; ôëàã SF óêàçûâàåò íà ïðîèñøåäøóþ îøèáêó ñòåêà. Ôëàã IR (InterruptRequest ) óêàçûâàåò íà âîçíèêíîâåíèå íåçàìàñêèðîâàííîé èñêëþ÷èòåëüíîé ñèòóàöèè, â ðåçóëüòàòå ÷åãî èíèöèèðîâàíî âíóòðåííåå ïðåðûâàíèå;óâèäåòü ýòîò ôëàã óñòàíîâëåííûì ìîæíî òîëüêî â îáðàáîò÷èêå ïðåðûâàíèÿ âíóòðè îïåðàöèîííîé ñèñòåìû, òàê ÷òî íàñ îí íå êàñàåòñÿ.

Çíà÷å179íèå TOP, êàê óæå ãîâîðèëîñü, çàäà¼ò òåêóùóþ ïîçèöèþ âåðøèíû ñòåêà(ñì. Ÿ 6.2). Íàêîíåö, áèò B (Busy ) îçíà÷àåò, ÷òî ñîïðîöåññîð â íàñòîÿùèéìîìåíò çàíÿò àñèíõðîííûì âûïîëíåíèåì êîìàíäû. Íàäî ñêàçàòü, ÷òî âñîâðåìåííûõ ïðîöåññîðàõ ýòîò áèò òîæå íåâîçìîæíî óâèäåòü óñòàíîâëåííûì èíà÷å êàê â îáðàáîò÷èêå ïðåðûâàíèÿ.Ðåãèñòð TW ìû óæå ðàññìàòðèâàëè íà ñòð. 170.Äëÿ ðàáîòû ñ ðåãèñòðîì CR ïðåäóñìîòðåíû êîìàíäû fstcw, fnstcw èfldcw.

Êîìàíäà fstcw, êàê îáû÷íî, îçíà÷àåò äâå ìàøèííûå èíñòðóêöèèwait è fnstcw. Âñå òðè êîìàíäû èìåþò îäèí îïåðàíä, â êà÷åñòâå êîòîðîãîìîæåò âûñòóïàòü òîëüêî îïåðàíä òèïà ¾ïàìÿòü¿ ðàçìåðîì word. Ïåðâûåäâå êîìàíäû çàïèñûâàþò ñîäåðæèìîå ðåãèñòðà CR â çàäàííîå ìåñòî âïàìÿòè, ïîñëåäíÿÿ êîìàíäà, íàîáîðîò, çàãðóæàåò ñîäåðæèìîå ðåãèñòðàCR èç ïàìÿòè. Íàïðèìåð, ñëåäóþùèìè êîìàíäàìè ìû ìîæåì óñòàíîâèòüðåæèì îêðóãëåíèÿ ¾â ñòîðîíó íóëÿ¿ âìåñòî èñïîëüçóåìîãî ïî óìîë÷àíèþðåæèìà ¾ê áëèæàéøåìó¿:sub esp, 2; âûäåëÿåì ïàìÿòü â ñòåêåfstcw [esp]; ïîëó÷àåì â íå¼ ñîäåðæèìîå CRor word [esp], 0000110000000000b; ïðèíóäèòåëüíî óñòàíàâëèâàåì áèòû 11 è 10fldcw [esp]; çàãðóæàåì ïîëó÷åííîå îáðàòíî â CRadd esp, 2; îñâîáîæäàåì ïàìÿòüÑîäåðæèìîå ðåãèñòðà SR ìîæíî ïîëó÷èòü óæå çíàêîìîé íàì êîìàíäîé fstsw, îïåðàíä êîòîðîé ìîæåò áûòü ëèáî ðåãèñòðîì AX (è áîëüøåíèêàêèì), ëèáî òèïà ¾ïàìÿòü¿ ðàçìåðîì word.

Èìååòñÿ òàêæå êîìàíäà fnstsw, ïðè÷¼ì fstsw ïðåäñòàâëÿåò ñîáîé îáîçíà÷åíèå äëÿ äâóõ ìàøèííûõ èíñòðóêöèé wait è fnstsw. Îòìåòèì, ÷òî îáðàòíàÿ îïåðàöèÿ(çàãðóçêà çíà÷åíèÿ) äëÿ SR íå ïðåäóñìîòðåíà, ÷òî âïîëíå ëîãè÷íî: ýòîòðåãèñòð íóæåí, ÷òîáû àíàëèçèðîâàòü ïðîèñõîäÿùåå. Òåì íå ìåíåå, íåêîòîðûå êîìàíäû âîçäåéñòâóþò íà ýòîò ðåãèñòð íàïðÿìóþ.

Òàê, çíà÷åíèåTOP ìîæíî óâåëè÷èòü íà åäèíèöó êîìàíäîé fincstp è óìåíüøèòü íàåäèíèöó êîìàíäîé fdecstp (îáå êîìàíäû íå èìåþò îïåðàíäîâ). Èñïîëüçîâàòü ýòè êîìàíäû ñëåäóåò îñòîðîæíî, ïîñêîëüêó ñòàòóñ ¾çàíÿòîñòè¿ðåãèñòðîâ ñòåêà îíè íå ìåíÿþò; èíà÷å ãîâîðÿ, fdecstp ïðèâîäèò ê òîìó,÷òî ðåãèñòðîì ST0 ñòàíîâèòñÿ ¾ïóñòîé¿ ðåãèñòð, à fincstp ïðèâîäèò ê òîìó, ÷òî ST7 îêàçûâàåòñÿ ¾çàíÿò¿ (ïîñêîëüêó ýòî áûâøèé ST0). Åù¼ îäíîàêòèâíîå äåéñòâèå ñ ðåãèñòðîì SR, êîòîðîå ìîæåò âûïîëíèòü ïðîãðàììèñò ýòî î÷èñòêà ôëàãîâ èñêëþ÷èòåëüíûõ ñèòóàöèé.

Òàêàÿ î÷èñòêàïðîèçâîäèòñÿ êîìàíäàìè fclex (Clear Exceptions ) è fnclex, êîòîðûå ìûóæå óïîìèíàëè â ïðåäûäóùåì ïàðàãðàôå.Ïåðåä êîìàíäîé fldcw ðåêîìåíäóåòñÿ âñåãäà âûïîëíÿòü êîìàíäó fclex, èíà÷åìîæåò ñëó÷èòüñÿ òàê, ÷òî çàïèñü ðåãèñòðà CR ¾äåìàñêèðóåò¿ êàêîå-íèáóäü èç èñêëþ÷åíèé, ôëàã êîòîðîãî óæå âçâåä¼í, â ðåçóëüòàòå ÷åãî ïðîèçîéä¼ò ïðåðûâàíèå.180Ðåãèñòð TW íå ìîæåò áûòü íàïðÿìóþ íè ñ÷èòàí, íè çàïèñàí, íî îäíàêîìàíäà, íàïðÿìóþ âîçäåéñòâóþùàÿ íà íåãî, âñ¼ æå åñòü.

Îíà íàçûâàåòñÿ ffree, èìååò îäèí îïåðàíä ðåãèñòð STn, à å¼ äåéñòâèå ïîìåòèòüçàäàííûé ðåãèñòð êàê ¾ñâîáîäíûé¿ (èëè ¾ïóñòîé¿).  ÷àñòíîñòè, ñëåäóþùèå êîìàíäû óáèðàþò ÷èñëî ñ âåðøèíû ñòåêà ¾â íèêóäà¿:ffree st0fincstpŸ 6.7.4. Èíèöèàëèçàöèÿ, ñîõðàíåíèå è âîññòàíîâëåíèåÅñëè íà ìîìåíò íà÷àëà âû÷èñëåíèé âàì íå èçâåñòíî (èëè âûçûâàåò ñîìíåíèÿ) ñîñòîÿíèå àðèôìåòè÷åñêîãî ñîïðîöåññîðà, íî ïðè ýòîì âûòî÷íî çíàåòå, ÷òî íèêàêîé ïîëåçíîé äëÿ âàñ èíôîðìàöèè åãî ðåãèñòðûíå ñîäåðæàò, ìîæíî ïðèâåñòè åãî ¾â èñõîäíîå ñîñòîÿíèå¿ ñ ïîìîùüþêîìàíäû finit èëè fninit (finit ïðåäñòàâëÿåò ñîáîé îáîçíà÷åíèå äëÿwait fninit, ñì.

Ÿ 6.7.2). Ïðè ýòîì â ðåãèñòð CR çàíîñèòñÿ çíà÷åíèå 037Fh(îêðóãëåíèå â áëèæíþþ ñòîðîíó, íàèáîëüøàÿ âîçìîæíàÿ òî÷íîñòü, âñåèñêëþ÷åíèÿ çàìàñêèðîâàíû); ðåãèñòð SR îáíóëÿåòñÿ, ÷òî îçíà÷àåò TOP=0,âñå ôëàãè ñáðîøåíû, âêëþ÷àÿ ôëàãè èñêëþ÷èòåëüíûõ ñèòóàöèé; ðåãèñòðû FIP, FDP, TW òàêæå îáíóëÿþòñÿ; ðåãèñòðû, ñîñòàâëÿþùèå ñòåê, íèêàêíå èçìåíÿþòñÿ, íî ïîñêîëüêó TW îáíóë¼í, âñå îíè ñ÷èòàþòñÿ ñâîáîäíûìè(íå ñîäåðæàùèìè ÷èñåë).Ñ ïîìîùüþ êîìàíäû fsave ìîæíî ñîõðàíèòü âñ¼ ñîñòîÿíèå ñîïðîöåññîðà, òî åñòü ñîäåðæèìîå âñåõ åãî ðåãèñòðîâ, â îáëàñòè ïàìÿòè, ÷òîáûïîòîì âîññòàíîâèòü åãî.

Ýòî ïîëåçíî, åñëè íóæíî âðåìåííî ïðåêðàòèòüíåêèé âû÷èñëèòåëüíûé ïðîöåññ, âûïîëíèòü êàêèå-òî âñïîìîãàòåëüíûåâû÷èñëåíèÿ, çàòåì âåðíóòüñÿ ê îòëîæåííîìó ïðîöåññó âû÷èñëåíèé. Äëÿñîõðàíåíèÿ âàì ïîòðåáóåòñÿ îáëàñòü ïàìÿòè äëèíîé 108 áàéò; êîìàíäàfsave èìååò îäèí îïåðàíä, ýòî îïåðàíä òèïà ¾ïàìÿòü¿, ïðè÷¼ì óêàçûâàòü åãî ðàçìåð íå íóæíî. Ìíåìîíèêà fsave íà ñàìîì äåëå îáîçíà÷àåòäâå ìàøèííûå êîìàíäû wait è fnsave. Ïîñëå ñîõðàíåíèÿ ñîñòîÿíèÿâ ïàìÿòè ñîïðîöåññîð ïðèâîäèòñÿ ¾â èñõîäíîå ñîñòîÿíèå¿ òî÷íî òàê æå,êàê ïðè êîìàíäå finit (ñì. âûøå), òàê ÷òî ïîñëå fsave îòäåëüíî äàâàòüêîìàíäó finit íå íóæíî.

Âîññòàíîâèòü ñîõðàí¼ííîå ðàíåå ñîñòîÿíèå ñîïðîöåññîðà ìîæíî êîìàíäîé frstor; êàê è fsave, ýòà êîìàíäà èìååò îäèíîïåðàíä òèïà ¾ïàìÿòü¿, äëÿ êîòîðîãî íå íóæíî óêàçûâàòü ðàçìåð, ïîñêîëüêó èñïîëüçóåòñÿ îáëàñòü ïàìÿòè ðàçìåðîì 108 áàéò.Èíîãäà âîçíèêàåò ïîòðåáíîñòü ñîõðàíèòü èëè âîññòàíîâèòü òîëüêî âñïîìîãàòåëüíûå ðåãèñòðû ñîïðîöåññîðà.

Ýòî äåëàåòñÿ êîìàíäàìè fsetenv, fnsetenv èfldenv ñ èñïîëüçîâàíèåì îáëàñòè ïàìÿòè äëèíîé 28 áàéò; ïîäðîáíîå îïèñàíèåýòèõ êîìàíä îñòàâëÿåì çà ðàìêàìè ïîñîáèÿ. çàâåðøåíèå ðàçãîâîðà î ñîïðîöåññîðå óïîìÿíåì êîìàíäó fnop. Êàêìîæíî äîãàäàòüñÿ, ýòî î÷åíü âàæíàÿ êîìàíäà: îíà íå äåëàåò íè÷åãî.181Ïðèëîæåíèå: òåêñò ôàéëàstud_io.incÂåðñèÿ äëÿ ÎÑ Linux;; system dependend part ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; generic 3-param syscall%macro _syscall_3 4push edxpush ecxpush ebxpush %1push %2push %3push %4pop edxpop ecxpop ebxpop eaxint 0x80pop ebxpop ecxpop edx%endmacro; syscall_exit is the only syscall we use that has 1 parameter%macro _syscall_exit 1mov ebx, %1; exit codemov eax, 1; 1 = sys_exitint 0x80%endmacro;; system dependent part ends here ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %1: descriptor%2: buffer addr; output: eax: read bytes%macro _syscall_read 3_syscall_3 3,%1,%2,%3%endmacro%3: buffer length; %1: descriptor%2: buffer addr; output: eax: written bytes%macro _syscall_write 3_syscall_3 4,%1,%2,%3%endmacro%3: buffer length%macroPRINT 1pushapushfjmp %%astr182%%str db%1, 0%%strln equ$-%%str%%astr: _syscall_write 1, %%str, %%strlnpopfpopa%endmacro%macroPUTCHAR 1pushapushf%ifstr %1moval, %1%elifnum %1moval, %1%elifidni %1,alnop%elifidni %1,ahmoval, ah%elifidni %1,blmoval, bl%elifidni %1,bhmoval, bh%elifidni %1,clmoval, cl%elifidni %1,chmoval, ch%elifidni %1,dlmoval, dl%elifidni %1,dhmoval, dh%elsemoval, %1 ; memory location such as [var]%endifsubesp, 2 ; reserve memory for buffermovedi, espmov[edi], al_syscall_write 1, edi, 1addesp, 2popfpopa%endmacro%macroGETCHARpushfpushsubmov0ediesp, 2edi, esp183_syscall_read 0, edi, 1cmpeax, 1jne%%eof_reachedxoreax,eaxmoval, [edi]jmp%%gcquit%%eof_reached:xoreax, eaxnoteax; eax := -1%%gcquit:addesp, 2popedipopf%endmacro%macro FINISH 0-1 0_syscall_exit %1%endmacroÂåðñèÿ äëÿ FreeBSDÝòà âåðñèÿ îòëè÷àåòñÿ îò ïðåäûäóùåé òîëüêî îïðåäåëåíèåì ìàêðîñîâè _syscall_exit, ïîýòîìó öåëèêîì ìû å¼ íå ïðèâîäèì.

×òîáû ïîëó÷èòü ðàáî÷èé ôàéë äëÿ ÎÑ FreeBSD, âîçüìèòå âûøåïðèâåä¼ííûé òåêñò äëÿÎÑ Linux è çàìåíèòå îïðåäåëåíèÿ ýòèõ ìàêðîñîâ íà ñëåäóþùèå:_syscall3;; freebsd-specific things ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;%macro _syscall_3 4push%4push%3push%2moveax, %1pusheaxint0x80jnc%%oknegeax%%ok: addesp, 16%endmacro%macro _syscall_exit 1push%1; exit codemoveax, 1 ; 1 = sys_exitpusheaxint0x80; no cleanup - this will never return anyway%endmacro;; system dependent part ends here ;;;;;;;;;;;;;;;;;;;;;;;;;;;;184Ëèòåðàòóðà[1] Ý. Òàííåíáàóì.

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

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

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

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