Â.À. Àâäååâ, Â.Ô. Ãóçèê
Êîìïüþòåðû: øèíû, êîíòðîëëåðû, ïåðèôåðèéíûå óñòðîéñòâà
Ó÷åáíîå ïîñîáèå. Òàãàíðîã: ÒÐÒÓ, 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
Ïðîãðàììíûé îáìåí
|