Êîíñàëòèíãîâàÿ êîìïàíèÿ Êîíñàëòåð.Ðó
Ãëàâíàÿ Íîâîñòè Áèáëèîòåêà Èññëåäîâàíèÿ Çàêîíîäàòåëüñòâî Êîíñàëòèíã Áèçíåñ-ôîðóìû Êîíòàêòû

Ðåêëàìà

Ðåêîìåíäóåì



Êîíñàëòåð.Ðó > Áèáëèîòåêà > Èíôîðìàöèîííûå òåõíîëîãèè

Â.À. Àâäååâ, Â.Ô. Ãóçèê
Êîìïüþòåðû: øèíû, êîíòðîëëåðû, ïåðèôåðèéíûå óñòðîéñòâà

Ó÷åáíîå ïîñîáèå. Òàãàíðîã: ÒÐÒÓ, 2001. - 536 ñ.

Ïðåäûäóùàÿ

Ïðèëîæåíèå Â. Ïðîâåðî÷íûå çàäàíèÿ, îñíîâíûå ñâåäåíèÿ è ïðèìåðû ïðîãðàìì

Ïðîãðàììèðîâàíèå êîíòðîëëåðà ÍÃÌÄ

9.1. Ôîðìóëèðîâêà çàäàíèÿ

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

9.2. Îñíîâíûå ñâåäåíèÿ

Ãèáêèé äèñê îáû÷íî èìååò äâå ðàáî÷èå ïîâåðõíîñòè (ñòîðîíó 0 è ñòîðîíó 1). Íà êàæäîé ïîâåðõíîñòè ðàñïîëîæåíû äîðîæêè, íàïðèìåð, äîðîæêà 0,...,äîðîæêà 79, à êàæäàÿ äîðîæêà ñîäåðæèò íåñêîëüêî ñåêòîðîâ (9, 15), êàæäûé èç êîòîðûõ ìîæåò ñîäåðæàòü 128,...,1024 áàéòîâ äàííûõ. Ñòàíäàðòíûé ðàçìåð ñåêòîðà â DOS ðàâåí 512 áàéòîâ äàííûõ. DOS èñïîëüçóåò îäíîìåðíûé äîñòóï ê ñåêòîðàì (R) ãèáêîãî äèñêà. Ñåêòîðà íà îáåèõ ñòîðîíàõ äèñêà ïîñëåäîâàòåëüíî íóìåðóþòñÿ îò íóëåâîãî äî ïîñëåäíåãî, íàïðèìåð, R0, R1,…,R1439.

 BIOS ïðèíÿò òðåõìåðíûé ñïîñîá îáðàùåíèÿ ê ñåêòîðàì äèñêà. Ïðè ýòîì óêàçûâàåòñÿ íîìåð ñòîðîíû (H), äîðîæêè (C) è ñåêòîðà (R), íàïðèìåð H0, C50, R7, ïðè÷åì íóìåðàöèÿ ñåêòîðîâ íà÷èíàåòñÿ ñ 1 ïî 9 (15).

Ðàçëè÷àþò ôèçè÷åñêîå è ëîãè÷åñêîå ôîðìàòèðîâàíèå äîðîæåê äèñêà. Ôèçè÷åñêîå ôîðìàòèðîâàíèå âûïîëíÿåòñÿ BIOS ñ ïîìîùüþ êîíòðîëëåðà ÍÃÌÄ (ÊÍÃÌÄ) è ïðåäíàçíà÷åíî äëÿ ïîèñêà çàäàííîé äîðîæêè (ñåêòîðà), âðåìåííîãî ñîãëàñîâàíèÿ ðàáîòû ÊÍÃÌÄ è ÍÃÌÄ è êîíòðîëÿ äàííûõ. Ïðè ôèçè÷åñêîì ôîðìàòèðîâàíèè êàæäûé ñåêòîð äîðîæêè ñîäåðæèò ïîëå äàííûõ (512 áàéò) ñ êîíòðîëüíûì êîäîì è, ïðåäøåñòâóþùåå åìó, ïîëå èäåíòèôèêàöèè, âêëþ÷àþùåå íîìåðà äîðîæêè, ñòîðîíû, ñåêòîðà, ðàçìåð ñåêòîðà è êîíòðîëüíûé êîä. Ïîëå èäåíòèôèêàöèè è ïîëå äàííûõ èìåþò ñîáñòâåííûå óíèêàëüíûå àäðåñíûå ìåòêè, íå ñîâïàäàþùèå ñ êîäàìè äàííûõ, ïî êîòîðûì ÊÍÃÌÄ îïðåäåëÿåò ðàçìåùåíèå ïîëåé èäåíòèôèêàöèè è äàííûõ, îïðåäåëåííîãî ñåêòîðà íà ïîâåðõíîñòè äîðîæêè äèñêà.

Ëîãè÷åñêîå ôîðìàòèðîâàíèå îñóùåñòâëÿåò DOS, îíà ðàçáèâàåò âñå ñåêòîðà íà ÷åòûðå ñåãìåíòà, ñëåäóþùèå äðóã çà äðóãîì. Ïåðâûé ñåãìåíò ðàçìåùàåòñÿ â ñåêòîðå R0 è íàçûâàåòñÿ çàãðóçî÷íîé çàïèñüþ îïåðàöèîííîé ñèñòåìû. Âî âòîðîì ñåãìåíòå ðàñïîëàãàåòñÿ òàáëèöà ðàçìåùåíèÿ ôàéëîâ (FAT), êîòîðàÿ çàíèìàåò îáëàñòü äîðîæêè â äâà èëè ÷åòûðå ñåêòîðà, íà÷èíàÿ ñ R1. Äëÿ ïîâûøåíèÿ ñîõðàííîñòè FAT èìååò äâå êîïèè.  òðåòüåì ñåãìåíòå ñîäåðæèòñÿ êàòàëîã ôàéëîâ, â êîòîðîì äëÿ êàæäîãî ôàéëà óêàçûâàåòñÿ åãî èìÿ, ðàçìåð è, ïîìèìî äîïîëíèòåëüíîé èíôîðìàöèè, íîìåð íà÷àëüíîãî ñåêòîðà ôàéëà. ×åòâåðòûé ñåãìåíò çàíèìàåò áîëüøóþ ÷àñòü äèñêà è õðàíèò äàííûå. Ïðè ðàçìåùåíèè ôàéëà DOS îïåðèðóåò íå ñ ñåêòîðàìè, à êëàñòåðàìè, ñîñòîÿùèìè èç íåñêîëüêèõ ñåêòîðîâ.

Îáìåí äàííûìè (Ä) ìåæäó ÍÃÌÄ è îïåðàòèâíîé ïàìÿòüþ (ÎÏ) ðåàëèçóåòñÿ ïî ñëåäóþùåé ñõåìå (ðèñ. 1).

Ðèñ. 1. Ñõåìà îáìåíà äàííûìè ÍÃÌÄ è ÎÏ

Íà ðèñ.1 ïîêàçàíî, ÷òî äàííûå ïåðåäàþòñÿ ÷åðåç ÊÍÃÌÄ ïîä óïðàâëåíèåì êîíòðîëëåðà ïðÿìîãî äîñòóïà ê ïàìÿòè (ÊÏÄÏ).  ýòîì ðåæèìå çàõâàò÷èêîì (èíèöèàòîðîì) ÿâëÿåòñÿ  ÊÏÄÏ, à èñïîëíèòåëåì – ÎÏ.

Ïåðåäà÷à äàííûõ âûïîëíÿåòñÿ àïïàðàòíûì ñïîñîáîì áåç ó÷àñòèÿ ïðîöåññîðà (Ï), êîòîðûé ïðåäâàðèòåëüíî îñóùåñòâëÿåò èíèöèàëèçàöèþ (íàñòðîéêó) ÊÍÃÌÄ è ÊÏÄÏ, à çàòåì îñâîáîæäàåò ñèñòåìíóþ øèíó è ïåðåäàåò óïðàâëåíèå ÊÏÄÏ.

ÊÏÄÏ ñîäåðæèò íåñêîëüêî êàíàëîâ, ðàáîòàþùèõ â ðåæèìå ðàçäåëåíèÿ âðåìåíè.

Âîçìîæíà îðãàíèçàöèÿ îáìåíà äàííûìè ìåæäó ÍÃÌÄ è ÎÏ íåïîñðåäñòâåííî ÷åðåç ÊÍÃÌÄ è Ï â ðåæèìàõ ïðåðûâàíèÿ è îïðîñà ôëàãà ãîòîâíîñòè (áåç èñïîëüçîâàíèÿ ÊÏÄÏ).

ÊÍÃÌÄ – ýòî ñëîæíîå óñòðîéñòâî, âûïîëíÿþùåå ïðåîáðàçîâàíèå ïàðàëëåëüíîãî êîäà â ïîñëåäîâàòåëüíûé ïðè çàïèñè åãî íà äîðîæêó äèñêåòû è îáðàòíîå ïðåîáðàçîâàíèå ïðè ÷òåíèè, óïðàâëåíèå  èíòåðôåéñîì ÍÃÌÄ, ñîâìåñòíóþ ðàáîòó ñ ÊÏÄÏ è Ï, ðåàëèçàöèþ òàêèõ êîìàíä, êàê çàïèñü(÷òåíèå) äàííûõ, ôîðìàòèðîâàíèå, ïîèñê è ò.ä. Âçàèìîäåéñòâèå Ï è ÊÍÃÌÄ îñóùåñòâëÿåòñÿ ñ ïîìîùüþ ñïåöèàëüíûõ ïîðòîâ: ðåãèñòðà âõîäíûõ/âûõîäíûõ äàííûõ (R I/O), îñíîâíîãî ðåãèñòðà ñîñòîÿíèÿ (RS), ðåãèñòðà óïðàâëåíèÿ (RC) è ðåãèñòðà óïðàâëåíèÿ  ñêîðîñòüþ (RR), äîñòóïíîãî òîëüêî ïî çàïèñè. Ðåãèñòðàì ïðèñâîåíû àäðåñà:  R I/O - 3F5h, RS-3F4h, RC – 3F2h, è RR – 3F7h.

Ðåãèñòð RR èñïîëüçóåòñÿ òîëüêî â PC/AT, çíà÷åíèÿ åãî áèòîâ D1 è D0 ïðåäñòàâëåíû â òàáë. 1.

Òàáëèöà 1

D1,D0

Ñêîðîñòü, Êáèò/c

Ïëîòíîñòü çàïèñè äèñêîâ

00

500

Ó÷åòâåðåííàÿ (QD)

01

300

Äâîéíàÿ (DD)

10

250

Îäèíàðíàÿ

Íà ðèñ. 2 ïðåäñòàâëåí ôîðìàò ðåãèñòðà RC.

Ðèñ. 2. Ôîðìàò ðåãèñòðà RC

Ñ ïîìîùüþ áèòîâ ðåãèñòðà RC, äîñòóïíîãî ïî çàïèñè ñî ñòîðîíû Ï, îñóùåñòâëÿåòñÿ âûáîð ñîîòâåòñòâóþùåãî ÍÃÌÄ äëÿ ïóñêà åãî ìîòîðà è ðàçðåøåíèÿ ïðåðûâàíèÿ. Êðîìå òîãî, â ñëó÷àå íåîáõîäèìîñòè âîçìîæåí ñáðîñ ÊÍÃÌÄ â èñõîäíîå ñîñòîÿíèå. Òàê êàê ïðè ýòîì òåðÿåòñÿ îðèåíòàöèÿ òåêóùåãî ïîëîæåíèÿ ìàãíèòíûõ ãîëîâîê íà ïîâåðõíîñòè äèñêà, òî çàòåì ñëåäóåò âûïîëíèòü ðåêàëèáðîâêó, ò.å. óñòàíîâèòü ãîëîâêó íà äîðîæêó 0.

Ôîðìàò îñíîâíîãî ðåãèñòðà ñîñòîÿíèÿ RS ïîêàçàí íà ðèñ. 3.

Äëÿ âûïîëíåíèÿ çàäàííîãî âàðèàíòà ïðîãðàììû èñïîëüçóþòñÿ òîëüêî áèòû D7 è D6 ðåãèñòðà RS.

Ðèñ. 3. Ôîðìàò îñíîâíîãî ðåãèñòðà ñîñòîÿíèÿ

Íà ýòàïå èíèöèàëèçàöèè ÊÍÃÌÄ, åñëè áèò D6=0 è áèò D7=1, ýòî óêàçûâàåò íà òî, ÷òî ðåãèñòð R I/O ïóñò è Ï ìîæåò çàãðóæàòü åãî áàéòîì êîìàíäû. Ïðè çàïèñè äàííûõ â ðåãèñòð R I/O áèò D7 ñáðàñûâàåòñÿ. Êîìáèíàöèÿ D7=D6=1 îçíà÷àåò, ÷òî ðåãèñòð R I/O ïîëîí (àâòîìàòè÷åñêè çàãðóæåí ñî ñòîðîíû ÊÍÃÌÄ) è Ï ìîæåò ñ÷èòûâàòü åãî ñîäåðæèìîå. Ïðè ÷òåíèè äàííûõ èç ðåãèñòðà R I/O áèò D7 ðåãèñòðà RS ñáðàñûâàåòñÿ. Òàêèì îáðàçîì, áèòû D7 è D6 ðåãèñòðà RS ñèíõðîíèçèðóþò ñîâìåñòíóþ ðàáîòó Ï è ÊÍÃÌÄ ñ ïîìîùüþ óñòàíîâêè è ñáðîñà áèòà D7, óêàçûâàþùåãî íà ãîòîâíîñòü R I/O.

Êîíòðîëëåð ÍÃÌÄ âûïîëíÿåò 19 êîìàíä: ôîðìàòèðîâàíèå äîðîæêè, çàïèñü äàííûõ, ÷òåíèå äàííûõ, ÷òåíèå èäåíòèôèêàòîðà ñåêòîðà, ÷òåíèå ñîñòîÿíèÿ ÍÃÌÄ, âêëþ÷åíèå (âûêëþ÷åíèå) ìîòîðà, âåðíóòü ñîñòîÿíèå ðåãèñòðîâ è ò.ä. Âûïîëíåíèå íåêîòîðûõ êîìàíä, íàïðèìåð, ñâÿçàííûõ ñ ïåðåäà÷åé äàííûõ, ñîñòîèò èç òðåõ ôàç: ôàçû ïðèêàçà (âûâîäà áàéòà êîìàíäû), ôàçû âûêëþ÷åíèÿ (ïåðåäà÷è äàííûõ) è ôàçû âûïîëíåíèÿ ðåçóëüòàòà (ââîäà áàéòîâ ñîñòîÿíèÿ). Ðàññìîòðèì ïðèìåðû âûïîëíåíèÿ íåêîòîðûõ îñíîâíûõ êîìàíä. Êîìàíäà ÷òåíèÿ äàííûõ èìååò ñëåäóþùèé ôîðìàò (ðèñ. 4).

Ðèñ. 4. Ôîðìàò êîìàíäû ÷òåíèÿ äàííûõ

Àíàëîãè÷íûé ôîðìàò èìååò êîìàíäà çàïèñè äàííûõ, êîä êîìàíäû êîòîðîé 00101.

Áàéòû êîìàíäû ïîñòóïàþò èç Ï â ÊÍÃÌÄ â ñòðîãî îïðåäåëåííîì ïîðÿäêå, êîòîðûé çàäàåòñÿ êîäîì êîìàíäû, ðàçìåùåííûì â ïåðâîì áàéòå. ÊÍÃÌÄ, ïîëó÷èâ ïåðâûé áàéò, ðàñïðåäåëÿåò âûâîäèìûå áàéòû â ñîîòâåòñòâóþùèå ðåãèñòðû áàéòîâ êîìàíäû.

Ïðè âûïîëíåíèè êîìàíäû ÷òåíèå äàííûõ Ï â ôàçå ïðèêàçà âûâîäèò â ÊÍÃÌÄ ÷åðåç ðåãèñòð R I/O 9 áàéòîâ êîìàíäû (ðèñ.5).

Ðèñ. 5. Ñõåìà ïîòîêîâ äàííûõ â ÊÍÃÌÄ

Âûâîä êàæäîãî èç 9 áàéòîâ êîìàíäû âûïîëíÿåòñÿ ïóòåì îïðîñà áèòîâ D7 è D6 ðåãèñòðà RS(3F4h). Åñëè â ðåãèñòðå RS D7D6=10, òî îñóùåñòâëÿåòñÿ âûâîä î÷åðåäíîãî áàéòà â R I/O (3F5h). Ïîñëå çàâåðøåíèÿ ôàçû ïðèêàçà âûïîëíÿåòñÿ ïåðåäà÷à äàííûõ ìåæäó ÎÏ è ÍÃÌÄ ÷åðåç ðåãèñòð R I/O è ñèñòåìíóþ øèíó (ÑØ) â ôàçå âûïîëíåíèÿ êîìàíäû.  êîíöå ýòîé ôàçû ôîðìèðóåòñÿ ñèãíàë çàïðîñà ïðåðûâàíèÿ IRQ 6, ÷òî îçíà÷àåò êîíåö ïåðåäà÷è äàííûõ è íà÷èíàåòñÿ ôàçà ðåçóëüòàòà, ñâÿçàííàÿ ñ ââîäîì 7 áàéòîâ çàâåðøåíèÿ (ñì. ðèñ.4). Ïåðåä ââîäîì êàæäîãî áàéòà ïðîâåðÿþòñÿ ñîñòîÿíèÿ áèòîâ D7,D6 ðåãèñòðà RS, êîòîðûå äîëæíû áûòü ðàâíû 1, ÷òî óêàçûâàåò íà ãîòîâíîñòü ðåãèñòðà R I/O ïåðåäàòü ýòîò áàéò (ðåãèñòð R I/O ïîëîí). ÊÍÃÌÄ àâòîìàòè÷åñêè çàãðóæàåò R I/O è óñòàíàâëèâàåò áèòû D7 è D6 ðåãèñòðà RS.

Ðåãèñòð ñîñòîÿíèÿ ÍÃÌÄ ST3 ñ÷èòûâàåòñÿ ïóòåì âûïîëíåíèÿ êîìàíäû «÷òåíèÿ ñîñòîÿíèÿ» ÍÃÌÄ, èìåþùåé ñëåäóþùèé ôîðìàò (ðèñ.6).

Ðèñ. 6. Ôîðìàò êîìàíäû ÷òåíèÿ ñîñòîÿíèÿ ÍÃÌÄ

Ýòà êîìàíäà òàêæå èìååò 3 ôàçû âûïîëíåíèÿ (ñì. ðèñ.5).  ïåðâîé ôàçå Ï âûâîäèò ÷åðåç ðåãèñòð R I/O 2 áàéòà êîìàíäû â ÊÍÃÌÄ. Âî âòîðîé ôàçå ðåàëèçàöèè êîìàíäû ÊÍÃÌÄ çàãðóæàåò ðåãèñòð R I/O ñîäåðæèìûì ST3 è óñòàíàâëèâàåò áèòû D7 è D6 ðåãèñòðà RS (3F4h) â åäèíè÷íîå ñîñòîÿíèå. Ï ïðîãðàììíî ñêàíèðóåò áèòû D7 è D6 ðåãèñòðà RS è ïîñëå óñòàíîâêè ôëàãà ãîòîâíîñòè (áèòà D7) ñ÷èòûâàåò çíà÷åíèå ST3 â ôàçå ðåçóëüòàòà. Áèòû D1 è D0 ðåãèñòðà ST3 óêàçûâàþò íà íîìåð ÍÃÌÄ, à áèò D2 îïðåäåëÿåò íîìåð ãîëîâêè. Åäèíè÷íûå çíà÷åíèÿ äðóãèõ áèòîâ D3-D7 ðåãèñòðà ST3 ñîîòâåòñòâåííî óñòàíàâëèâàþò íàëè÷èå ñëåäóþùèõ ñèãíàëîâ îò ÍÃÌÄ: äèñêåòà äâóõñòîðîííÿÿ, äîðîæêà 0, ãîòîâíîñòü, çàùèòà îò çàïèñè è îøèáêà.

Êîìàíäà ïîèñê èìååò ôàçó ïðèêàçà è ôàçó âûïîëíåíèÿ.  ôàçå ïðèêàçà Ï ÷åðåç ðåãèñòð R I/O âûâîäÿòñÿ 3 áàéòà êîìàíäû, à â ôàçå âûïîëíåíèÿ îñóùåñòâëÿåòñÿ ïîçèöèîíèðîâàíèå ãîëîâêè íà çàäàííóþ äîðîæêó (öèëèíäð). Ôîðìàò êîìàíäû ïîèñêà èçîáðàæåí íà ðèñ. 7.

Ðèñ. 7. Ôîðìàò êîìàíäû ïîèñêà

 òðåòüåì áàéòå ýòîé êîìàíäû óêàçûâàåòñÿ íîìåð òðåáóåìîé äîðîæêè (C). Ïîñëå óñòàíîâêè ãîëîâêè íà çàäàííîé äîðîæêå ÊÍÃÌÄ ñîîáùàåò îá ýòîì ñèãíàëîì ïðåðûâàíèÿ IRQ6.

Çàâåðøåíèå îïåðàöèè ïîèñêà ìîæåò áûòü îïðåäåëåíî è ïî áèòó D7 áàéòà ñîñòîÿíèÿ, ðàçìåùåííîãî â îáëàñòè äàííûõ BIOS ïî àäðåñó 0040:003E.

Ðàáîòîé ÍÃÌÄ óïðàâëÿåò äðàéâåð BIOS, äëÿ îáðàùåíèÿ ê íåìó èñïîëüçóåòñÿ ïðîãðàììíîå ïðåðûâàíèå INT13h, âûïîëíÿþùåå íåñêîëüêî ôóíêöèé: ñáðîñ ÍÃÌÄ (0), ñ÷èòàòü ñîñòîÿíèå (1), ÷èòàòü ñåêòîð (2), çàïèñàòü ñåêòîð (3), ïðîâåðèòü ñåêòîð (4), ðàçìåòèòü ñåêòîð (5).

Ýòè ôóíêöèè ðåàëèçóþòñÿ ñ ó÷åòîì áàçîâîé äèñêîâîé òàáëèöû, õðàíÿùåéñÿ â ÏÇÓ ñ íà÷àëüíûì àäðåñîì, çàäàííûì â âåêòîðå ïðåðûâàíèÿ 1Eh.  áàçîâîé äèñêîâîé òàáëèöå óêàçàíû ïàðàìåòðû ðàáîòû ÍÃÌÄ: âðåìÿ øàãà, çàãðóçêè (ïîäúåìà) ãîëîâêè, ñîõðàíåíèÿ ñîñòîÿíèÿ âêëþ÷åííîãî äâèãàòåëÿ è ò.ä. Êðîìå òîãî, â òàáëèöå çàäàíû ïàðàìåòðû äîðîæêè (N, EOT, GPL è DTL (ñì. ðèñ.4)).

Ôóíêöèÿ ïðîâåðêè ñåêòîðà ñîâïàäàåò ñ ôóíêöèåé «÷èòàòü ñåêòîð» çà èñêëþ÷åíèåì òîãî, ÷òî äàííûå íå ïåðåäàþòñÿ. Ýòà ôóíêöèÿ ïðîâåðÿåò ïîèñê çàäàííîãî ñåêòîðà è êîíòðîëüíûé êîä çàïèñàííûõ è ÷èòàåìûõ äàííûõ.

 îáëàñòè äàííûõ BIOS ñ íà÷àëüíûì àäðåñîì 0040:003Eh îòðàæàåòñÿ òåêóùåå ñîñòîÿíèå ÍÃÌÄ: ñîñòîÿíèå ïðèâîäà, ñ÷åò÷èê âðåìåíè ðàáîòû äâèãàòåëÿ, áàéò èíäèêàöèè îøèáîê è áàéòû óòî÷íåííîãî ñîñòîÿíèÿ.

 çàêëþ÷åíèå ïðèâåäåì ïîñëåäîâàòåëüíîñòü äåéñòâèé, êîòîðûå äîëæíà ðåàëèçîâàòü ïðîãðàììà âàðèàíòà çàäàíèÿ: ðàçðåøèòü ïðåðûâàíèÿ, îñóùåñòâèòü ïóñê äâèãàòåëÿ âûáðàííîãî ÍÃÌÄ ñ îæèäàíèåì íàáîðà îáîðîòîâ, âûïîëíèòü îïåðàöèþ ïîèñêà æåëàåìîé äîðîæêè (ñì. ðèñ. 7) ñ ó÷åòîì âðåìåíè óñïîêîåíèÿ ãîëîâêè, èíèöèàëèçèðîâàòü ÊÏÄÏ, óñòàíîâèòü óêàçàòåëü íà áàçó äàííûõ BIOS äèñêà (íîìåð âåêòîðà 1Eh), ôóíêöèÿ 35h ïðåðûâàíèÿ INT21h), âûâåñòè 9 áàéòîâ ïàðàìåòðîâ êîìàíäû ÷òåíèÿ ñîñòîÿíèÿ ÍÃÌÄ (ñì. ðèñ. 6), âûêëþ÷èòü äâèãàòåëü è ïðåäñòàâèòü íà ýêðàíå ìîíèòîðà áàéòû ñîñòîÿíèÿ ST0 – ST3 ñ îïèñàíèåì íàçíà÷åíèÿ êàæäîãî áèòà.

ÊÏÄÏ PC/AT èìååò 7 êàíàëîâ ÏÄÏ. Äëÿ ñîâìåñòíîé ðàáîòû ñ ÊÍÃÌÄ èñïîëüçóåòñÿ êàíàë 2. Êàæäîìó êàíàëó ñîîòâåòñòâóåò ðåãèñòð ðåæèìà (ïîðò 0Bh), â êîòîðîì, äëÿ íàøåãî ñëó÷àÿ, ñëåäóåò çàäàòü êîä 46h (ðåæèì ÷òåíèÿ). Êðîìå òîãî, â íà÷àëå ïðîãðàììû ñëåäóåò îäèí ðàç ñáðîñèòü òðèããåð ïåðâûé/ïîñëåäíèé (Tï/ï, ïîðò 0Ch), óïðàâëÿþùèé çàíåñåíèåì âûâîäèìûõ áàéòîâ â ìëàäøóþ (7-0) èëè ñòàðøóþ (15-8) ÷àñòü ñîîòâåòñòâóþùåãî 16-áèòîâîãî ðåãèñòðà ÊÏÄÏ.  ëþáîì êàíàëå ÊÏÄÏ ñîäåðæèòñÿ 16-áèòîâûé ðåãèñòð òåêóùåãî àäðåñà (ïîðò 04h äëÿ êàíàëà 2) è 16-áèòîâûé ðåãèñòð òåêóùåãî ÷èñëà öèêëîâ (ïîðò 05h äëÿ êàíàëà 2). Ðåãèñòð òåêóùåãî àäðåñà ïðåäíàçíà÷åí äëÿ õðàíåíèÿ ìëàäøåé ÷àñòè àäðåñà (áèòû 15-0) ïàìÿòè. Ñòàðøèå áèòû àäðåñà (23-16) çàäàþòñÿ â ðåãèñòðå ñòðàíèöû (ïîðò 81h äëÿ êàíàëà 2). Ñîäåðæèìîå ðåãèñòðà òåêóùåãî ÷èñëà öèêëîâ îïðåäåëÿåò êîëè÷åñòâî ïåðåäàâàåìûõ áàéòîâ (ñëîâ). ÊÏÄÏ, êðîìå òîãî, ñîäåðæèò ðåãèñòð ìàñêè (ïîðò 0Ah), êàæäûé áèò êîòîðîãî ðàçðåøàåò (çàïðåùàåò) ðàáîòó ñîîòâåòñòâóþùåãî êàíàëà, ñõåìà ïîðòîâ äëÿ êàíàëà 2 ïðåäñòàâëåíà íà ðèñ. 8.

Ðèñ. 8. Ñõåìà ïîðòîâ êàíàëà 2 ÊÏÄÏ

Èíèöèàëèçàöèÿ ÊÏÄÏ ñîñòîèò èç:

- âû÷èñëåíèÿ 24-áèòíîãî àäðåñà ïàìÿòè, ïðåäíàçíà÷åííîãî äëÿ õðàíåíèÿ ÷èòàåìîãî ñåêòîðà è çàíåñåíèÿ åãî â ðåãèñòð òåêóùåãî àäðåñà è ðåãèñòð ñòðàíèöû êàíàëà 2;

- çàãðóçêè ðåãèñòðà òåêóùåãî ÷èñëà öèêëîâ (ñ÷åò÷èêà êàíàëà 2) êîäîì êîëè÷åñòâà ïåðåäàâàåìûõ áàéòîâ, óìåíüøåííîãî íà 1;

 - ðàçðåøåíèÿ ðàáîòû êàíàëà 2 ïóòåì ñáðîñà ñîîòâåòñòâóþùåãî áèòà ðåãèñòðà ìàñêè, ÷òî âûïîëíÿåòñÿ ïóòåì ïîñûëêè êîäà 010 â ýòîò ðåãèñòð.

 çàêëþ÷åíèå ðàññìîòðèì ôîðìàò ðåãèñòðà ðåæèìà ÊÏÄÏ, ïîêàçàííûé íà ðèñ. 9.

Ðèñ. 9. Ôîðìàò ðåãèñòðà ðåæèìà

Ðàçáåðåì íàçíà÷åíèå áèòîâ ýòîãî ðåãèñòðà.  áèòàõ D1 è D0 óêàçûâàåòñÿ íîìåð êàíàëà, äëÿ êîòîðîãî íàïðàâëÿåòñÿ ñîäåðæèìîå ðåãèñòðà ðåæèìà, à â áèòàõ D3 è D2 – òèï âûïîëíÿåìîé îïåðàöèè. Áèò D4, ðàâíûé 1, çàäàåò ðåæèì àâòîèíèöèàëèçàöèè, çàêëþ÷àþùèéñÿ â òîì, ÷òî ïåðåäà÷à áëîêà äàííûõ ìîæåò áûòü ïîâòîðåíà ñ ïðåæíèìè ñòàðòîâûìè äàííûìè â ðåãèñòðàõ òåêóùåãî àäðåñà è òåêóùåãî ÷èñëà öèêëîâ. Óâåëè÷åíèå (óìåíüøåíèå) òåêóùåãî àäðåñà îïðåäåëÿåòñÿ áèòîì D5. Áèòû D7 è D6 óñòàíàâëèâàþò îäèí  èç ðåæèìîâ îáñëóæèâàíèÿ. Ðåæèì ïåðåäà÷è ïî òðåáîâàíèþ (D7/D6=0) ñîñòîèò â òîì, ÷òî äàííûå ïåðåäàþòñÿ ïðè íàëè÷èè ñèãíàëà çàïðîñ ÏÄÏ (DREQ N, ãäå N – íîìåð êàíàëà). Ñíÿòèå ýòîãî ñèãíàëà âûçûâàåò ïðåêðàùåíèå ïåðåäà÷è äàííûõ. Îäèíî÷íàÿ ïåðåäà÷à ñâÿçàíà ñ ïåðåäà÷åé îäíîãî áàéòà (ñëîâà), ïîñëå ÷åãî ÊÏÄÏ îñâîáîæäàåò (ïî êðàéíåé ìåðå, íà îäèí öèêë) ñèñòåìíóþ øèíó, à çàòåì âûïîëíÿåò î÷åðåäíîé åå çàõâàò äëÿ ïåðåäà÷è ñëåäóþùåãî áàéòà. Áëî÷íàÿ ïåðåäà÷à çàêëþ÷àåòñÿ â áåçîñòàíîâî÷íîé ïåðåäà÷å âñåãî áëîêà äàííûõ, ïîêà ñîäåðæèìîå ðåãèñòðà òåêóùåãî ñ÷åò÷èêà öèêëîâ íå ñòàíåò ðàâíûì FFFFh. Ðåæèì êàñêàäèðîâàíèÿ èñïîëüçóåòñÿ äëÿ ñîåäèíåíèÿ íåñêîëüêèõ ÊÏÄÏ ñ öåëüþ íàðàùèâàíèÿ ÷èñëà êàíàëîâ, íàïðèìåð, â PC/AT ïðèìåíÿåòñÿ äâà êàñêàäíî-âêëþ÷åííûõ ÊÏÄÏ, ïðè÷åì êàíàë ïîä íîìåðîì 4, ðåàëèçóþùèé êàñêàäíîå ñîåäèíåíèå, íå èñïîëüçóåòñÿ äëÿ óïðàâëåíèÿ ïåðåäà÷åé äàííûõ.  PC/AT êàíàëû 3-0 ïðèìåíÿþòñÿ äëÿ áàéòîâûõ ïåðåäà÷, à êàíàëû 7-5 – äëÿ îáìåíà 16-áèòîâûìè ñëîâàìè.

Åñëè çàñëàòü êîä 46h â ðåãèñòð ðåæèìà, òî ýòî áóäåò ñîîòâåòñòâîâàòü âûáîðó êàíàëà 2, çàäàíèþ ðåæèìà ÷òåíèÿ ÍÃÌÄ, çàïðåòó ðåæèìà àâòîèíèöèàëèçàöèè, èíêðåìåíòó àäðåñà è ðåæèìó îäèíî÷íîé ïåðåäà÷è.

9.3. Ïðèìåð âûïîëíåíèÿ âàðèàíòà çàäàíèÿ

Ïðîãðàììà âûïîëíÿåò ñëåäóþùèå äåéñòâèÿ.

1. Ââîä èìåíè íàêîïèòåëÿ. Ïåðåâîä èìåíè â íîìåð.

2. Ââîä íîìåðà ãîëîâêè. Ïîâòîð, åñëè íå 0 èëè 1.

3. Ââîä íîìåðà äîðîæêè. Ïîâòîð, åñëè íå 00-79.

4. Ââîä íîìåðà ñåêòîðà. Ïîâòîð, åñëè íå 01-18.

5. Âêëþ÷åíèå ìîòîðà è îæèäàíèå íàáîðà îáîðîòîâ.

6. Ïîñûëêà êîìàíäû ïîèñêà äîðîæêè. Îæèäàíèå óñòàíîâêè ôëàãà ãîòîâíîñòè. Çàäåðæêà íà ïîäõîä ãîëîâîê.

7. Íàñòðîéêà 2-ãî êàíàëà ÊÏÄÏ íà îáìåí ñ ÊÍÃÌÄ.

8. Ïîëó÷åíèå óêàçàòåëÿ òàáëèöû äèñêà.

9. Ïîñûëêà êîìàíäû ÷òåíèÿ îáëàñòè äàííûõ ñåêòîðà. Îæèäàíèå óñòàíîâêè ôëàãà ãîòîâíîñòè.

10.×òåíèå 7-ìè áàéòîâ ñòàòóñà.

11.Âûâîä ðåçóëüòàòà îïåðàöèè (äàííûå ëèáî êîä îøèáêè, ò.å. áàéò ñòàòóñà1).

12.Îæèäàíèå íàæàòèÿ êëàâèøè. Åñëè <Esc>, òî ïåðåõîä íà ïóíêò 13, èíà÷å ïåðåõîä íà ïóíêò 2.

13. Çàâåðøåíèå ïðîãðàììû.

;÷òåíèå ïðîèçâîëüíîãî ñåêòîðà

code segment

org           100h                       ;Ñìåùåíèå 100Í ïîä psp corn ïðîãðàììû

assume   cs:code,ds:code                   ;Íàçíà÷åíèå ñåãìåíòíûõ ðåãèñòðîâ

BEGIN:   jmp start              ;Ïåðåõîä íà âûïîëíåíèå ïðîãðàììû

;îïèñàíèå äàííûõ

buffer                                      db 512dup(0)                         ;áóôåð ïîä ñîäåðæèìîå ñåêòîðà

sta_buf                                   db 7 dup (0)                                         ;áóôåð ïîä ðåãèñòðû ñòàòóñà

messagel                                 db 'Îïåðàöèÿ: ÷òåíèå$ '   ;ñîîáùåíèå1

message2                                db 'Íàêîïèòåëü: '               ;íà÷àëî ñîîáùåíèÿ2

driveASCII                             db 0,'$'                                  ;èìÿ íàêîïèòåëÿ

messages                                db 'Ãîëîâêà:'                                       ;íà÷àëî ñîîáùåíèÿ3

headASCII                             db 0,'$'                                  ;íîìåð ãîëîâêè â ASCII êîäå

message4                                db 'Öèëèíäð:'                                      ;íà÷àëî ñîîáùåíèÿ4

cylindreASCII       db 0,0,'$'                                               ;íîìåð öèëèíäðà â ASCII êîäàõ

messages                                db 'Ñåêòîð:'                                         ;íà÷àëî ñîîáùåíèÿ5

sectorASCII                           db 0,0,'$'                                               ;íîìåð ñåêòîðà â ASCII êîäàõ

drive                                        db 0                                       ;íîìåð íàêîïèòåëÿ

head                                        db 0                                       ;íîìåð ãîëîâêè

cylindre                                   db 0                                       ;íîìåð öèëèíäðà

sector                                       db 0                                       ; íîìåð ñåêòîðà

line                                           db 80 dup (0C4h),'$'          ;ñòðîêà âèäà"-"

ermessage                               db 'Ïðè ÷òåíèè âîçíèêëà îøèáêà ( )$'

messages                                db 'Íàæìèòå ëþáóþ êëàâèøó (<ESC> - Âûõîä).$'

;ïðîöåäóðà î÷èñòêè ýêðàíà

CLRSCR      proc

mov     ah,06h                         ;6-ÿ ôóíêöèÿ ïðåðûâàíèÿ 10h

mov     al,0                              ;ïðîêðóòêà âñåãî ýêðàíà

mov     bh,0Fh                         ;àòðèáóò ñèìâîëà çàïîëíèòåëÿ

mov     ñõ,0                              ;êîîðäèíàòû âåðõíåãî ëåâîãî óãëà ýêðàíà

mov     dx,184Fh                                    ;êîîðäèíàòû ïðàâîãî íèæíåãî óãëà ýêðàíà

int       10h                                ;âûçîâ îáðàáîò÷èêà ïðåðûâàíèÿ

ret                                                              ;âîçâðàò èç ïðîöåäóðû

CLRSCR      endp

;ïðîöåäóðà âûâîäà ñòðîêè

WRITEXY     ðãîñ

mov      ah,02h                                        ;ôóíêöèÿ óñòàíîâêè êóðñîðà

mov      bh,0                             ;âèäåîñòðàíèöà 0

push   dx                                   ;ñîõðàíèì àäðåñ ñòðîêè

mov      dx,cx                           ;ïîäãîòîâèì êîîðäèíàòû êóðñîðà

int        10h                                ;îñòàíîâèì êóðñîð

pop      dx                                  ;âîññòàíîâèì àäðåñ ñòðîêè

mov     ah,09h                         ;ôóíêöèÿ âûâîäà ñòðîêè ñ [dx]

int        21h                                ;âûâåäåì ñòðîêó íà ýêðàí

ret                                                               ;âîçâðàò èç ïðîöåäóðû

WRITEXY    endp

;ïðîöåäóðà âûâîäà ñîäåðæèìîãî áóôåðà äàííûõ

WRITEBUF   proc

mov      ah,02h                                        ;ôóíêöèÿ óñòàíîâêè êóðñîðà

mov      bh,0                             ;âèäåîñòðàíèöà0

mov      dx,cx                           ;ïîäãîòîâèì êîîðäèíàòû êóðñîðà

int        10h                                ;îñòàíîâèì êóðñîð

mov      ñõ,512                                         ;îñòàíîâèì ÷èñëî âûâîäèìûõ ñèìâîëîâ

mov      bx,0                             ;óêàçàòåëü íà òåêóùèé áàéò

wf:    mov      al,buffer[bx]                                 ;âîçüìåì òåêóùèé ñèìâîë

push           ex                                            ;ñîõðàíèì ñ÷åò÷èê áàéòîâ

push           bx                                           ;ñîõðàíèì óêàçàòåëü

mov      ñõ,1                             ;÷èñëî ïîâòîðåíèé=1

mov      bh,0                             ;âèäåîñòðàíèöà 0

mov      ah,0Ah                                        ;ôóíêöèÿ 0À

int        10h                                ;âûâîä ñèìâîëà â ïîçèöèþ êóðñîðà

mov     ah,02h                         ;ôóíêöèÿ 02

inc       dl                                    ;ñäâèíåì ïîçèöèþ êóðñîðà â ñòðîêå

cmp     dl,80                             ;ïðîâåðèì íà êîíåö ñòðîêè

jne       wf1                                ;åñëè íåò, òî ïåðåõîä íà ìåòêó wf1

mov     dl,0                               ;êóðñîð â íà÷àëî ñòðîêè

inc       dh                                  ;êóðñîð íà ñëåäóþùóþ ñòðîêó

wf1:  int        10h                                  ;îñòàíîâèòü êóðñîð

pop      bx                                                ;âîññòàíîâèòü óêàçàòåëü

pop      ex                                                 ;âîññòàíîâèòü ñ÷åò÷èê

inc        bx                                                ;íàðàñòèòü óêàçàòåëü

loop      wf                                               ;ïîâòîð öèêëà (ñõ=0: âûõîä)

ret                                                             ; âîçâðàò èç ïðîöåäóðû

WRITEBUF                                                     endp

;Ïðîöåäóðà âûâîäà ðåçóëüòàòà

WRITE_RESULT  proc

call         cirscr                         ;î÷èñòèì ýêðàí

mov       al,drive                     ;âîçüìåì íîìåð íàêîïèòåëÿ

                            add                            al,41H     ;ïðåîáðàçóåì â èìÿ íàêîïèòåëÿ

mov       driveASCII,al          ;çàïèøåì â ïàìÿòü

mov       cx,0000h                  ; êóðñîð â 0,0

lea          dx,message1           ;dõ-àäðåñ ñîîáùåíèÿ1

call         writexy                     ;âûâîä ñîîáùåíèÿ 1

mov       cx,0100h                  ;êóðñîð â1,0

lea          dx,message2           ;dx-aäpec ñîîáùåíèÿ2

call         writexy                     ;âûâîä ñîîáùåíèÿ2

mov       cx,0200h                  ;êóðñîð â 2,0

mov       al,head                     ;âîçüìåì íîìåð ãîëîâêè

add        al,30h                       ;ïðåîáðàçóåì â ASCII-êîä

mov       headASCII,al          ;çàïèøåì â ïàìÿòü

lea          dx,message3           ;dx-aäpec ñîîáùåíèÿ3

call         writexy                     ;âûâîä ñîîáùåíèÿ3

mov       cx,0300h                  ;êóðñîð â 3,0

lea          dx,message4           ;dx-aäpec ñîîáùåíèÿ4

call         writexy                     ;âûâîä ñîîáùåíèÿ4

mov       cx,0400h                  ; êóðñîð â 4,0

lea          dx,message5           ;dx-àäðåñ ñîîáùåíèÿ5

call         writexy                     ;âûâîä ñîîáùåíèÿ5

mov       cx,0500h                  ;êóðñîð â 5,0

lea          dx,line                       ;dx-aäpec ñòðîêè line

 call        writexy                     ;âûâîä ñòðîêè

mov       al,sta_buf                ;âîçüìåì 1-é áàéò ñòàòóñà

 and        al,11000000b         ;óñòàíîâèì ôëàãè

 jz           m1                             ;åñëè 0, òî ïåðåõîä íà m1

                             lea                            dx,ermessage         ;èíà÷å dx-àäðåñ ñîîáùåíèÿ îá îøèáêå

 õîr         àõ,àõ                        ;î÷èñòèì ðåãèñòð àõ

 mov      al,sta_buf                ;âîçüìåì áàéò ñòàòóñà 1

 shl          ax,4                           ;âûäåëèì ïåðâóþ öèôðó

 shr         al,4                            ;âûäåëèì âòîðóþ öèôðó

 add        ah,30h                      ;ïîëó÷èì êîä ïåðâîé öèôðû

 mov                      ermessage+28,ah         ;çàïîìíèì åãî

                             add            al,30h                     ;ïîëó÷èì êîä âòîðîé öèôðû

mov       ermessage+29,al          ;çàïîìíèì åãî

mov       cx,0A00h ;êóðñîð â 10,0

call         writexy                       ;âûâîä äàííûõ ñîîáùåíèÿ îá îøèáêå

jmp        m2                              ;ïåðåõîä íà ìåòêó m2

m1:  mov           cx,0A00h ;êóðñîð â 10,0

call         writebuf     ;âûâîä ñîäåðæèìîãî áóôåðà äàííûõ

m2:  mov           cx,1700h   ;êóðñîð â 23,0

lea          dx,line                        ;dx-aäpec ñòðîêè line

call         writexy                       ;âûâîä ñòðîêè

mov       cx,1800h   ;êóðñîð â 18,0

lea          dx,message6             ;dx-àäðåñ ñîîáùåíèÿ6

call         writexy                       ;âûâîä ñîîáùåíèÿ6

                ret                                                           ;âîçâðàò èç ïðîöåäóðû
WRITE_RESULT endp

;ïðîöåäóðà ââîäà èìåíè íàêîïèòåëÿ

INPUTDRIVE  proc

jmp        ie1                               ;ïåðåõîä íà âûïîëíÿåìóþ ÷àñòü

questi     db 'Ââåäèòå èìÿ äèñêîâîäà: $'                            ;çàïðîñ1

buf1       db 5 dup (2)              ;áóôåð1 ñòðîêè ââîäà

buf2       db 6 dup (3)              ;áóôåð2 ñòðîêè ââîäà

ie1:   call                            clrscr                           ;î÷èñòêà ýêðàíà

                   mov                 cx,0000h   ; êóðñîð â 0,0

                   lea                    dx,quest1 ;dx-aäpec çàïðîñà1

                   call                   writexy                       ;âûâîä çàïðîñà1

                   mov                 ax,0C0Ah                 ;ïîäôóíêöèÿ 0À ôóíêöèè 0Ñ

                   lea                    dx,buf1                      ;dx-aäpec áóôåðà1

                   int                    21 h                            ;ââîä ñòðîêè

                   cmp                 buf1+1,0   ;ïðîâåðêà íà ââîä ïóñòîé ñòðîêè

                   je                      ie1                               ;åñëè ïóñòàÿ, òî ïîâòîð

                   cmp                 buf1+2,'A"                ;ïðîâåðêà íà ââîä'À'

                   je                      ie2                               ;åñëè äà, òî ïåðåõîä íà ìåòêó ie2

                   cmp                 buf1+2,'a' ;ïðîâåðêà íà ââîä'à'

                   je                      ie2                               ;åñëè äà, òî ïåðåõîä íà ìåòêó ie2

                   cmp                 buf1+2,'Â'                 ;ïðîâåðêà íà ââîä'Â'

                   je                      ie4                               ;åñëè äà, òî ïåðåõîä íà ìåòêó ie2

                   cmp                 buf1+2,'b' ;ïðîâåðêà íà ââîä 'b'

                   je                      ie4                               ;åñëè äà, òî ïåðåõîä íà ìåòêó ie2

jmp                        ie1               ;èíà÷å ïîâòîðíûé ââîä

ie2:   mov          drive,0                        ;çàïîìíèì íîìåð íàêîïèòåëÿ

jmp                        ie3               ;ïåðåõîä íà ìåòêó ie3

ie4:   mov          drive, 1                       ;çàïîìíèì íîìåð íàêîïèòåëÿ

ie3:   ret                                                  ;âîçâðàò èç ïðîöåäóðû

INPUTDRIVE   endp

;ïðîöåäóðà ââîäà êîîðäèíàò ñåêòîðà (H,C,S)

INPUTDATA          proc

        jmp             ia1              ;ïåðåõîä íà âûïîëíÿåìóþ ÷àñòü

        quest2        db 'Âåäèòå íîìåð ãîëîâêè (0 èëè 1): $'             ;çàïðîñ2

        space          db 80 dup (32),'$'                                                     ;ïóñòàÿ ñòðîêà

        quest3        db 'Ââåäèòå íîìåð öèëèíäðà (00-79): $'          ;çàïðîñ3

        quest4        db 'Ââåäèòå íîìåð ñåêòîðà (01-18): $'              ;çàïðîñ4

ia1:  call                            cirscr           ;î÷èñòêà ýêðàíà

                ;ââîä íîìåðà ãîëîâêè

mov                       cx,0000h                   ;êóðñîð â 0,0

lea                          dx,quest2                  ;dx-àäðåñ çàïðîñà2

call                         writexy                       ;âûâîä çàïðîñà2

mov                       ax,0C0Ah                 ;ïîäôóíêöèÿ 0À ôóíêöèè 0Ñ

lea                          dx,buf1                      ;dx-aäpec

int                           21h            ;ââîä ñòðîêè

cmp                       buf1+1,0                   ;ïðîâåðêà íà ïóñòóþ ñòðîêó

je                            IA1            ;åñëè äà, òî ïåðåõîä íà ìåòêó ia1

cmp                       buf1+2,30h               ;ïðîâåðêà íà ââîä'0'

je                            ia2              ;åñëè äà, òî ïåðåõîä íà ìåòêó ia2

cmp                       buf1+2,31h               ;ïðîâåðêà íà ââîä Ò

jne                          ia1              ;åñëè äà, òî ïåðåõîä íà ìåòêó ia1

mov                       head,1                        ;çàïîìíèì íîìåð ãîëîâêè

jmp                        ia3              ;ïåðåõîä íà ìåòêó ia3

ia2:  mov                       head,0            ;çàïîìíèì íîìåð ãîëîâêè

;ââîä íîìåðà öèëèíäðà

ia3:  mov      cx,0100h                        ;êóðñîðâ1,0

lea       dx,space                                       ;dx-aäpec ïóñòîé ñòðîêè

call       writexy                                         ;âûâîä ïóñòîé ñòðîêè

lea       dx,quest3                                     ;dx-aäpec çàïðîñàÇ

call       writexy                                         ;âûâîä çàïðîñà

mov     ax,0C0Ah                                   ;ïîäôóíêöèÿ 0À ôóíêöèè 0Ñ

lea       dx,buf2                         ;dx-aäpec áóôåðà ââîäà

                int                                          21h          ; ââîä ñòðîêè

            cmp                                       buf2+1,0 ;ïðîâåðêà íà ïóñòóþ ñòðîêó

                je                                            ia3            ;åñëè äà, òî ïåðåõîä íà ìåòêó ia3

                cmp                                       buf2+2,30h            ;ïðîâåðêè íà ââîä êîäîâ äâóõ

                jb                                           ia3            ;äåñÿòè÷íûõ öèôð

                cmp                                       buf2+2,39h            ;-//-

                ja                                           ia3            ;-//-

                cmp                                       buf2+3,30h            ;-//-

                jb                                           ia3            ;-//-

                cmp                                       buf2+3,39h            ;-//-

                ja                                           ia3            ;-//-

          mov                                       al,buf2+2                ;âîçüìåì êîä ïåðâîé öèôðû

                mov                                       cylindreASCII,al       ;çàïîìíèì äëÿ âûâîäà

                sub                                         al,30h      ;ïðåîáðàçóåì â ÷èñëî

                mov                                       bl,10        ;óìíîæèì íà 10,

                mul                                        bl              ;ò.ê. öèôðà ïåðâàÿ

                mov                                       ah,al        ;ïåðåïèøåì â al

           mov                                       al,buf2+3                ;âîçüìåì êîä âòîðîé öèôðû

           mov                                       cylindreASCII+1,al   ;çàïîìíèì äëÿ âûâîäà

                sub                                         al,30h      ;ïðåîáðàçóåì â ÷èñëî

                add                                        ah,al        ;äîáàâèì ê ïðåäûäóùåìó

                cmp                                       ah,79       ;ñðàâíèì ñ 79

                ja                                           ia3            ;åñëè áîëüøå, òî ïîâòîðíûé ââîä

            mov                                       cylindre.ah             ;çàïîìíèì íîìåð öèëèíäðà

                ;ââîä íîìåðà ñåêòîðà

ia4:         mov                                      ñõ,0200h                ;êóðñîð â 2,0

                lea                                          dx,space ;dx-aäpec ïóñòîé ñòðîêè

                call                                         writexy    ;âûâîä ïóñòîé ñòðîêè

                lea                                          dx,quest4                ;dx-aäpec çàïðîñà4

                call                                         writexy    ;âûâîä çàïðîñà

           mov                                       ax,0C0Ah               ;ïîäôóíêöèÿ 0À ôóíêöèè 0Ñ

                lea                                          dx,buf2   ;dx-àäðåñ áóôåðà ââîäà

                int                                          21h          ;ââîä ñòðîêè

             cmp                                       buf2+1,0 ;ïðîâåðêà íà ïóñòóþ ñòðîêó

                je                                            ia4            ;åñëè äà, òî ïåðåõîä íà ìåòêó ia3

                cmp                                       buf2+2,30h            ;ïðîâåðêè íà ââîä êîäîâ äâóõ

                jb                                           ia4            ;äåñÿòè÷íûõ öèôð

                cmp                                       buf2+2,39h            ;-//-

                ja                                           ia4            ;-//-

                cmp                                       buf2+3,30h            ;-//-

                jb                                           ia4            ;-//-

                cmp                                       buf2+3,39h            ;-//-

                ja                                           ia4            ;-//-

           mov                                       al,buf2+2                ;âîçüìåì êîä ïåðâîé öèôðû

                mov                                       sectorASCII,al       ;çàïîìíèì äëÿ âûâîäà

                sub       al,30h                      ;ïðåîáðàçóåì â ÷èñëî

                mov      bl,10                        ;óìíîæèì íà 10,

                mul       bl                              ;ò.ê. öèôðà ïåðâàÿ

                mov      ah,al                        ;ïåðåïèøåì â al

                mov      al,buf2+3               ;âîçüìåì êîä âòîðîé öèôðû

                mov      sectorASCII+1,al   ;çàïîìíèì äëÿ âûâîäà

                sub       al,30h                      ;ïðåîáðàçóåì â ÷èñëî

                add       ah,al                        ;äîáàâèì ê ïðåäûäóùåìó

                cmp      ah,18                       ;ñðàâíèì c 18

                ja          ia4                            ;åñëè áîëüøå, òî ïîâòîðíûé ââîä

                cmp      ah,1                         ;ñðàâíèì ñ 1

                jb          ia4                            ;åñëè ìåíüøå, òî ïîâòîðíûé ââîä

                mov      sector,ah                ;çàïîìíèì íîìåð ñåêòîðà

                ret                                          ;âîçâðàò èç ïðîöåäóðû

INPUTDATA   endp

; ïðîöåäóðà îïðîñà ôëàãà ãîòîâíîñòè

WA_RDY     proc

                mov      dx,3f4h                  ;ïîðò ðåãèñòðà ñîñòîÿíèÿ

wy1:in                                                   al,dx                        ;ïðî÷èòàåì ðåãèñòð

                test                                         al,80h                      ;ïðîâåðèì 7-é áèò

                jz                                            wy1                          ;åñëè 0, òî ïîâòîðíîå ÷òåíèå ðåãèñòðà

                ret                                          ;âîçâðàò èç ïðîöåäóðû

WA_RDY     endp

; ïðîöåäóðà çàïèñè áàéòà êîìàíäû

OU_FDC                                              proc                         ;àl-áàéò êîìàíäû

                call                                         wa_rdy                    ;îæèäàíèå ãîòîâíîñòè ÊÍÃÌÄ

                mov                                       dx,3F5h                  ;ïîðò ðåãèñòðà äàííûõ

                mov                                       al,ah                        ;ïåðåïèøåì al â ah

                out                                         dx,al                        ;çàïèøåì áàéò êîìàíäû â ðåãèñòð äàííûõ

                ret                                          ;âîçâðàò èç ïðîöåäóðû

OU_FDC                                              endp

;ïðîöåäóðà ÷òåíèÿ áàéòà ñîñòîÿíèÿ

IN_FDC                                                proc

                call                                         wa_rdy                    ;îæèäàíèå ãîòîâíîñòè ÊÍÃÌÄ

                mov                                       dx,3f5h   ;ïîðò ðåãèñòðà äàííûõ

                in                     al,dx               ;ïðî÷èòàåì äàííûå â àl

                ret                                            ;âîçâðàò èç ïðîöåäóðû

IN_FDC endp

; ïðîöåäóðà ÷òåíèÿ ñåêòîðà äèñêà ñ ââåäåííûìè êîîðäèíàòàìè

S_READ                        proc

                sti                     ;ðàçðåøèòü ïðåðûâàíèÿ

                ;âêëþ÷àåì ìîòîð

                mov                dx,3f2h         ;àäðåñ ðåãèñòðà öèôðîâîãî âûâîäà

                mov                à1,28             ;óñòàíîâèì áèòû 2,3,4

             or                     al,drive          ;äîáàâëÿåì íîìåð äèñêîâîäà

                out                   dx,al               ;ïîñûëàåì êîìàíäó çàïóñêà ìîòîðà

                mov                cx,0ffffh       ;îæèäàåì, ïîêà ìîòîð

sd1: push                       ex                   ;íàáåðåò îáîðîòû

          mov           cx,0fah                                 ;-//-

sd2: loop                        sd2                 ;-//-

          pop            ex                                           ;-//-

          loop           sd1                                         ;-//-

                ;ïîèñê äîðîæêè

                mov                ah,15             ;êîä êîìàíäû ïîèñêà äîðîæêè

                call                  ou_fdc           ;ïîñûëàåì áàéò êîìàíäû â ÊÍÃÌÄ

                mov                ah,head         ;ôîðìèðóåì 2-é áàéò êîìàíäû

                shl                    ah,2                ;-//-

                or                     ah,drive         ;-//-

                call                  ou_fdc           ;ïîñûëàåì áàéò êîìàíäû â ÊÍÃÌÄ

                mov                ah,cylindre ;íîìåð äîðîæêè

                call                  ou_fdc           ;ïîñûëàåì áàéò êîìàíäû â ÊÍÃÌÄ

                call                  wa_rdy          ;îæèäàåì óñòàíîâêè ôëàãà ãîòîâíîñòè

                mov                cx,0ffffh       ;îæèäàåì ïîêà óñòàíîâèòñÿ ãîëîâêà

sd3:        push                ex                   ;-//-

                mov                cx,0fah          ;-//-

sd4:        loop                 sd4                 ;-//-

                pop                  ex                   ;-//-

                loop                 sd3                 ;-//-

                ;èíèöèàëèçàöèÿ dma

                mov                al,46h            ;êîä ÷òåíèÿ äàííûõ ÊÍÃÌÄ

                out                   12,al               ;ïîñûëàåì â

                out                   11,al               ;îáà ïîðòà êàíàëà 2 ÊÏÄÏ

;âû÷èñëÿåì àäðåñ áóôåðà

lea             ax,buffer               ;âîçüìåì ñìåùåíèå áóôåðà

mov          bx,ds                                                                                                              ;âîçüìåì ñåãìåíò áóôåðà

mov          cl,4                                                                                                 ;ïðîêðóòèì àäðåñ ñåãìåíòà âëåâî

rol              bx,cl                                                                                                                                    ;íà 4 ðàçðÿäà

mov          dl,bl                                                                                                                             ;ïåðåïèøåì â dl bl

and            dl,0fh                                                                                                          ;âûäåëèì íîìåð ñòðàíèöû

and            bl,0f0h                                                                                                  ;îáíóëèì ìëàäøèå 4 ðàçðÿäà

add            ax,bx                                                                                 ;ïîëó÷èì ìëàäøèå 16 ðàçð. ôèç. àäðåñà

jnc             sd5                                                                                             ;åñëè íåò ïåðåíîñà, òî íà ìåòêó sd5

inc             dl                                                                                                   ;èíà÷å íàðàñòèì íîìåð ñòðàíèöû

sd5:  out                4,al                                                                                                 ;ïîñûëàåì ìëàäøèé áàéò àäðåñà

mov          al,ah                                                                                                       ;áåðåì ñòàðøèé áàéò àäðåñà

out             4,al                                                                                                  ;ïîñûëàåì ñòàðøèé áàéò àäðåñà

mov          al,dl                                                                                                                  ;áåðåì íîìåð ñòðàíèöû

out             81h,al                                                                                                       ;ïîñûëàåì íîìåð ñòðàíèöû

;êîíåö èíèöèàëèçàöèè

mov          àõ,511                                                                                                       ;çíà÷åíèå ñ÷åò÷èêà áàéò-1

out             5,al                                                                                                               ;ïîñûëàåì ìëàäøèé áàéò

mov          al.ah                                                                                                                     ;áåðåì ñòàðøèé áàéò

out             5,al                                                                                                                ;ïîñûëàåì ñòàðøèé áàéò

mov          al,2                                                                                                      ;ãîòîâèì ðàçðåøåíèå êàíàëà 2

out             10,al                                                                                                                            ;çàïóñêàåì ÊÏÄÏ

;ïîëó÷àåì óêàçàòåëü íà     áàçó äèñêà

mov                                          al,1eh                                                            ;íîìåð âåêòîðà íà òàáëèöó äèñêà

mov                                          ah,35h                                                                                                   ;ôóíêöèÿ 35

int                                              21 h                                                                      ;ås:[bõ]-óêàçàòåëü íà òàáëèöó

;ïîñûëàåì ïàðàìåòðû ÷òåíèÿ

mov                                          ah,66h                                                                      ;êîä ÷òåíèÿ îäíîãî ñåêòîðà

call                                            ou_fdc                                                      ;ïîñûëàåì áàéò êîìàíäû â ÊÍÃÌÄ

mov                                          ah,head                                                             ;ãîòîâèì âòîðîé áàéò êîìàíäû

shl                                             ah,2                                                                                                                        ;-//-

or                                               ah,drive                                                                                                                  ;-//-

call                                            ou_fdc                                                      ;ïîñûëàåì áàéò êîìàíäû â ÊÍÃÌÄ

mov                                          ah,cylindre                                                                                    ;íîìåð äîðîæêè

call                                            ou_fdc                                                      ;ïîñûëàåì áàéò êîìàíäû â ÊÍÃÌÄ

mov                                          ah,head                                                                                           ;íîìåð ãîëîâêè

call                                            ou_fdc                                                      ;ïîñûëàåì áàéò êîìàíäû â ÊÍÃÌÄ

mov                                          ah,sector                                                                                          ;íîìåð ñåêòîðà

call                                            ou_fdc                                                      ;ïîñûëàåì áàéò êîìàíäû â ÊÍÃÌÄ

mov                                          ah,es:[bx]+3                                                                        ;êîä ðàçìåðà ñåêòîðà

call                                            ou_fdc                                                      ;ïîñûëàåì áàéò êîìàíäû â ÊÍÃÌÄ

mov                                          ah,es:[bx]+4                                                                     ;íîìåð êîíöà äîðîæêè

call             ou_fdc                                   ;ïîñûëàåì áàéò êîìàíäû â ÊÍÃÌÄ

mov           ah,es:[bx]+5         ;äëèíà ñäâèãà

call             ou_fdc                                   ;ïîñûëàåì áàéò êîìàíäû â ÊÍÃÌÄ

mov           ah,es:[bx]+6         ;äëèíà äàííûõ

call             ou_fdc                                   ;ïîñûëàåì áàéò êîìàíäû â ÊÍÃÌÄ

call             wa_rdy                                  ;îæèäàåì óñòàíîâêè ôëàãà ãîòîâíîñòè

;÷èòàåì ðåçóëüòèðóþùèå áàéòû

mov      ñõ,7                                ;÷èòàåì 7 áàéòîâ ñòàòóñà

lea                                                bx,sta_buf          ;-//-

sd6:  call       in_fdc                                ;-//-

mov      [bx],al                            ;-//-

inc                                                bx                         ;-//-

loop      sd6                                 ;-//-

;âûêëþ÷àåì ìîòîð

mov                                             dx,3f2h                ;àäðåñ ðåãèñòðà öèôðîâîãî âûâîäà

mov                                             al,12                     ;îñòàâëÿåì áèòû 2 è 3

or                                                  al,drive                 ;äîáàâëÿåì íîìåð íàêîïèòåëÿ

out                                                dx,al                     ;ïîñûëàåì êîìàíäó îñòàíîâà ìîòîðà

ret                                                 ;âîçâðàò èç ïðîöåäóðû

S_READ      endp

; îñíîâíàÿ ÷àñòü ïðîãðàììû

START:

                call                                            inputdrive            ;ââîä íîìåðà íàêîïèòåëÿ

AGAIN:

                call                                            inputdata            ;ââîä îñòàëüíûõ äàííûõ (Í,Ñ,S)

                call                                            s_read                  ;÷òåíèå ñåêòîðà

                call                                            write_result         ;âûâîä ðåçóëüòàòà îïåðàöèè ÷òåíèÿ

                mov                                          àõ,0Ñ08h            ;ôóíêöèÿ 0Ñ(08):

                int                                              21 h                      ;îæèäàíèå ââîäà ñèìâîëà

                cmp                                          al,1Bh                  ;íàæàò ÅSÑ?

                je                                               exit                       ;åñëè äà, òî ïåðåõîä íà ìåòêó exit

                jmp                                           again                    ;ïîâòîð îïåðàöèè äëÿ òîãî æå íàêîïèòåëÿ

EXIT:

                mov                                          ah,4Ch                 ;ôóíêöèÿ çàâåðøåíèÿ ïðîãðàììû

                int                                              21 h                      ;çàâåðøèì ïðîãðàììó

                code                                          ends

                end                                            begin

9.4. Âàðèàíòû çàäàíèé

Âàðèàíòû çàäàíèé îïðåäåëÿþòñÿ ìîðôîëîãè÷åñêèì ãðàôîì (ðèñ. 10)

Ðèñ. 10. Ìîðôîëîãè÷åñêèé ãðàô âàðèàíòîâ çàäàíèé

Ïðåäñòàâëåííûé ìîðôîëîãè÷åñêèé ãðàô îïðåäåëÿåò 16 âàðèàíòîâ çàäàíèé. Âàðèàíòû çàäàíèé óêàçûâàþòñÿ ìàðøðóòîì â ãðàôå, íàïðèìåð, 2-9. Íà ïåðâîì óðîâíå ãðàôà âåðøèíû 1-4 ñîîòâåòñòâóþò âûïîëíåíèþ êîìàíäû «ïðîâåðèòü îïðåäåëåííûé ñåêòîð», à âåðøèíû 5-8 – êîìàíäû «÷èòàòü îïðåäåëåííûé ñåêòîð». Âåðøèíà 9 âòîðîãî óðîâíÿ ãðàôà ñîïîñòàâëÿåòñÿ ñ âûïîëíåíèåì êîìàíäû «÷òåíèå èäåíòèôèêàòîðà», à âåðøèíà 10 – ñ âûïîëíåíèåì êîìàíäû «÷òåíèå ñîñòîÿíèÿ ÍÃÌÄ» (ST3).  êà÷åñòâå îïðåäåëåííûõ ñåêòîðîâ â çàäàíèè ìîãóò áûòü èñïîëüçîâàíû: çàãðóçî÷íûé ñåêòîð, ñåêòîðû FAT, ñåêòîðû êàòàëîãà èëè ñåêòîðû ôàéëà ðàçðàáîòàííîé ïðîãðàììû. Êðîìå òîãî, â êà÷åñòâå âàðèàíòîâ çàäàíèé ìîãóò áûòü çàäàíèÿ, ñâÿçàííûå ñ ôîðìàòèðîâàíèåì äîðîæêè, çàïèñè ñåêòîðîâ è èíèöèàëèçàöèè ÊÍÃÌÄ.

Ïðåäûäóùàÿ

Ïîõîæèå ìàòåðèàëû:
Ïðîãðàììà ïðåäîñòàâëåíèÿ ãîñóäàðñòâåííûõ ôèíàíñîâûõ è ãîñóäàðñòâåííûõ ýêñïîðòíûõ êðåäèòîâ
Ãîí÷àðóê Â.À. Ìàðêåòèíãîâîå êîíñóëüòèðîâàíèå: Ïðîãðàììà îïòèìèçàöèè è îò÷åò êîíñóëüòàíòà
Ïðîãðàììà ãîñóäàðñòâåííûõ ãàðàíòèé Ðîññèéñêîé Ôåäåðàöèè, ãîñóäàðñòâåííûõ ãàðàíòèé ñóáúåêòîâ Ðîññèéñêîé Ôåäåðàöèè, ìóíèöèïàëüíûõ ãàðàíòèé â âàëþòå Ðîññèéñêîé Ôåäåðàöèè
Ïðîãðàììèðîâàíèå êîíòðîëëåðà ÍÆÌÄ
Ïðîãðàììèðóåìûé ïåðèôåðèéíûé èíòåðôåéñ - Àâäååâ Â.À. è äð., 2001
Ïðîãðàììíûé îáìåí



Î ñàéòå   Àâòîðàì   Ðåêëàìà è óñëóãè   Êîíòàêòû
Copyright © 2007-2021, Êîíñàëòåð.Ðó