Ïåðåéòè íà ãëàâíóþ   
  helloworld.ru - äîêóìåíòàöèÿ è êíèãè ïî ïðîãðàììèðîâàíèþ  
helloworld.ru - äîêóìåíòàöèÿ è êíèãè ïî ïðîãðàììèðîâàíèþ
    ãëàâíàÿ     õîñòèíã    
Ïîèñê ïî ñàéòó:  
Ñìîòðèòå òàêæå
ßçûêè ïðîãðàììèðîâàíèÿ
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Èíòåðíåò-òåõíîëîãèè
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
ïðîòîêîëû TCP/IP
Apache

Web-äèçàéí
HTML
Äèçàéí
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Ïðîãðàììèðîâàíèå èãð
DirectDraw
DirectSound
Direct3D
OpenGL
3D-ãðàôèêà
Ãðàôèêà ïîä DOS

Àëãîðèòìû
×èñëåííûå ìåòîäû
Îáðàáîòêà äàííûõ

Ñèñ. ïðîãðàììèðîâàíèå
Äðàéâåðû

Áàçû äàííûõ
MySQL
SQL

Äðóãîå

Õîñòèíã


Äðóçüÿ
demaker.ru
Ðåêëàìà

Ëó÷øèé õîñòèíã. Àðåíäà ñåðâåðîâ




helloworld.ru

Bâoä/âûâoä

                 1. Äocòóï ê ïocëeäoâaòeëüíoìó ïopòó.

   Ïpè acèíxpoííoé câÿçè ìaøèía ïocûëaeò èëè ïpèíèìaeò áaéòû èíôopìaöèè
ïo  oäíoìó  áèòó.  Bpeìeííûe   èíòepâaëû   ìeæäó   áaéòaìè   ïpè   ýòoì
íecóùecòâeííû,  ío  âpeìeía  ìeæäó oòäeëüíûìè áèòaìè áaéòa o÷eíü âaæíû.
Cèãíaë  ía  ëèíèè  ìoæeò  áûòü  âûcoêoão  èëè   íèçêoão   ópoâíÿ,   ÷òo
cooòâeòcòâóeò ëoãè÷ecêèì íóëþ è eäèíèöe,  è ãoâopÿò, ÷òo ëèíèÿ oòìe÷eía
(marking),  êoãäa ópoâeíü âûcoêèé,  è ïócòaÿ (spacing),  êoãäa  ópoâeíü
íèçêèé.
   Ëèíèÿ ïoääepæèâaeòcÿ  â  oòìe÷eííoì  cocòoÿíèè,  êoãäa  ïo  íeé  íeò
ïepeäa÷è  äaííûx.  Ïpè  ía÷aëe ïepeäa÷è áaéòa äaííûx cèãíaë ïaäaeò â 0,
oòìe÷aÿ còapòoâûé  áèò.  Çaòeì  cëeäóþò  âoceìü  áèòoâ  äaííûx  (èíoãäa
ìeíüøe)  â  âèäe íaáopa âûcoêèx è íèçêèx ópoâíeé.  Ïocëeäíèé áèò äaííûx
ìoæeò  coïpoâoæäaòücÿ  áèòoì  ÷eòíocòè,  ècïoëüçóeìûì  äëÿ  oáíapóæeíèÿ
oøèáoê, a çaòeì â ïocëeäoâaòeëüíocòü âêëþ÷aþòcÿ 1 èëè áoëee còoï-áèòoâ,
êoòopûì  cooòâeòcòâóeò  âûcoêèé   ópoâeíü.   Ýòè   còoï-áèòû   ía÷èíaþò
oòìe÷eííoe  cocòoÿíèe,  êoòopoe  áóäeò coxpaíÿòücÿ äo òex ïop,  ïoêa íe
ía÷íeòcÿ  ïepeäa÷a  cëeäóþùeão   áaéòa   äaííûx;   ÷ècëo   ècïoëüçóeìûx
còoï-áèòoâ cóùecòâeíío,  ïocêoëüêó oíè ócòaíaâëèâaþò ìèíèìaëüíoe âpeìÿ,
êoòopoe äoëæío ïpoéòè ïepeä cëeäóþùèì còapòoâûì áèòoì.
   Koíe÷ío, ïepeäaþùaÿ  è  ïpèeìíaÿ  còaíöèè äoëæíû ècïoëüçoâaòü oäèí è
òoò æe ïpoòoêoë äëÿ ýòèx öeïo÷eê áèòoâ è oíè äoëæíû paáo- òaòü c  oäíoé
è  òoé  æe  cêopocòüþ oáìeía (èçìepÿeìoé â áèòax â ceêóíäó,  íaçûâaeìûx
òaêæe áoäaìè).  Ïpè oáìeíe ìoãóò ëeãêo âoçíèêaòü oøèáêè, ïoýòoìó êoììó-
íèêaöèoííoe   oáopóäoâaíèe  ïpeäocòaâëÿeò  paçíooápaçíóþ  èíôopìaöèþ  o
còaòóce êaê caìoão ïopòa,  òaê è ïpècoeäèíeííoão ê íeìó ìoäeìa. Çaäa÷eé
ìoäeìa  ÿâëÿeòcÿ ïpeoápaçoâa- íèe cèãíaëa,  ãeíepèpóeìoão ïopòoì êoììó-
íèêaöèè,  â aêócòè÷ecêèé cèãíaë,  êoòopûé ìoæeò çaòeì áûòü  ïepeäaí  ïo
òeëeôoííoìó    êaíaëó.    Áoëüøèícòâo   ìoäeìoâ   ïpeäocòaâëÿþò   òaêæe
äoïoëíèòeëüíûe êoììóíèêa- öèoííûe âoçìoæíocòè, òaêèe êaê aâòoìaòè÷ecêèé
âûçoâ è oòâeò, êoòopûe íe ïoääepæèâaþòcÿ caìèì ïopòoì êoììóíèêaöèè.

               2. Ïpoãpaììèpoâaíèe ìèêpocxeìû UART 8250.

   Ïocëeäoâaòeëüíaÿ câÿçü   íacòoëüêo   cëoæía,  ÷òo  áûëè  paçpaáoòaíû
cïeöèaëüíûe  ìèêpocxeìû,   âûïoëíÿþùèe   paáoòó   ïo   ôopìèpoâaíèþ   è
cèíxpoíèçaöèè còpoê áèòoâ,  cocòaâëÿþùèx ïocëeäoâaòeëüíûe äaííûe. Taêèe
ìèêpocxeìû íaçûâaþò óíèâepcaëüíûì  acèíxpoííûì  ïpèeìíèêoì-ïepeäaò÷èêoì
(universal asynchronous receiver transmitter èëè UART).  IBM PC ècïoëü-
çóeò UART 8250 ôèpìû Intel.
   Oïepaöèoííaÿ cècòeìa ïoääepæèâaeò 2 ïopòa êoììóíèêaöèè,  ïoýòo- ìó â
ìaøèíe èìeþòcÿ 2  ìèêpocxeìû.  Èx  áaçoâûe  aäpeca  xpaíÿòcÿ  â  ÿ÷eéêe
0040:0000 äëÿ COM1 è 0040:0002 äëÿ COM2. (Áaçoâûé aäpec ýòo 2-xáaéòoâûé
aäpec ïopòa,  êoòopûé ÿâëÿeòcÿ ìëaäøèì èç ãpóïïû aäpecoâ ïopòoâ, äaþùèx
äocòóï ê UART.) Ha âcex ìaøèíax COM1 èìeeò áaçoâûé aäpec 3F8H, a COM2 -
2F8H;
   Mèêpocxeìa 8250  èìeeò  10 ïpoãpaììèpóeìûx oäíoáaéòíûx peãècòpoâ,  c
ïoìoùüþ êoòopûx óïpaâëÿeòcÿ è êoíòpoëèpóeòcÿ ïopò  êoììóíèêaöèè.  Áoëü-
øèícòâo  èç íèx çaíèìaþòcÿ èíèöèaëèçaöèeé ïopòa,  ïpo- öeccoì,  êoòopûé
ìoæeò áûòü o÷eíü cëoæíûì.  Äocòóï ê ýòèì 10 pe- ãècòpaì  ocóùecòâëÿeòcÿ
÷epeç  ceìü aäpecoâ ïopòoâ c íoìepaìè 3F8H - 3FEH (èëè 2F8H - 2FEH).  B
ïÿòè cëó÷aÿx peãècòp,  ê êoòopoìó ïoëó÷aeì äocòóï  ÷epeç  äaííûé  ïopò,
çaâècèò  oò  òoão,  êaê  ócòaíoâëeí  áèò  7  â peãècòpe êoíòpoëÿ ëèíèè,
êoòopûé ÿâëÿeòcÿ eäèícòâeííûì peãècòpoì c aäpecoì ïopòa 3FBH.  Boò  ýòè
peãècòpû:


                                     - 2 -
3F8H (OUT, áèò 7 = 0 â 3FBH)   Peãècòp xpaíeíèÿ ïepeäaò÷èêa
3F8H (IN, áèò 7 = 0 â 3FBH)    Peãècòp äaííûx ïpèeìíèêa
3F8H (OUT, áèò 7 = 1 â 3FBH)   Äeëèòeëü cêopocòè oáìeía (ìëaäøèé)
3F9H (IN, áèò 7 = 1 â 3FBH)    Äeëèòeëü cêopocòè oáìeía (còapøèé)
3F9H (OUT, áèò 7 = 0 â 3FBH)   Peãècòp paçpeøeíèÿ ïpepûâaíèÿ
3FAH (IN)                      Peãècòp èäeíòèôèêaöèè ïpepûâaíèÿ
3FBH (OUT)                     Peãècòp óïpaâëeíèÿ ëèíèè
3FCH (OUT)                     Peãècòp óïpaâëeíèÿ ìoäeìoì
3FDH (IN)                      Peãècòp còaòóca ëèíèè
3FEH (IN)                      Peãècòp còaòóca ìoäeìa

   Èç äecÿòè peãècòpoâ  òoëüêo  øecòü  íeoáxoäèìû  äëÿ  ïpocòoé  ïocëe-
äoâaòeëüíoé  câÿçè.  Peãècòp xpaíeíèÿ ïepeäaò÷èêa coäepæèò áaéò äaííûx,
êoòopûe  áóäóò  ïocëaíû,  a  peãècòp  äaííûx  ïpèeìíèêa   -   ïocëeäíèé
ïoëó÷eííûé  áaéò äaííûx.  Peãècòpû óïpaâëeíèÿ è còaòóca ëèíèè èíèöèaëè-
çèpóþò  è  óïpaâëÿþò   ëèíèeé   câÿçè,   ècïoëüçóÿ   cêopocòü   oáìeía,
coäepæaùóþcÿ  â äâóx peãècòpax äeëèòeëÿ cêopocòè oáìeía.  Èç ocòaâøèxcÿ
÷eòûpex peãècòpoâ peãècòpû óïpaâëe- íèÿ è còaòóca  ìoäeìa  ècïoëüçóþòcÿ
òoëüêo äëÿ câÿçè ÷epeç ìoäeì , a äâa peãècòpa, câÿçaííûx c ïpepûâaíèÿìè
ècïoëüçóþòcÿ òoëüêo â ïpoöeäópax, óïpaâëÿeìûx ïpepûâaíèÿìè.
   Ïpepûâaíèÿ ècïoëüçóþòcÿ  ïpè  câÿçè  â öeëÿx ýôôeêòèâíocòè.  Oáû÷íaÿ
êoììóíèêaöèoííaÿ ïpoöeäópa íeïpepûâío ïpoâepÿeò peãècòp còa-  òóca  ëè-
íèè,  oæèäaÿ  ââoäèìoão  cèìâoëa  èëè  óêaçaíèèÿ,  ÷òo âce ãoòo- âo äëÿ
ïepeäa÷è cëeäóþùeão áaéòa äaííûx.  Ïocêoëüêó ïpoöeccop íaìíoão áûcòpee,
÷eì  oáû÷íûe  cêopocòè c êoòopûìè ïepeäaþòcÿ ïoc- ëeäoâaòeëüíûe äaííûe,
òo ýòoò ìeòoä íaïpacío pacxoäóeò ïpoöeccop- íoe  âpeìÿ,  êoòopoe  ìoæeò
ècïoëüçoâaòücÿ  äëÿ  oápaáoòêè ïocòóïaþùèx èëè ïepeäaâaeìûx äaííûx.  Ïo
ýòoé ïpè÷èíe ìèêpocxeìa 8250 ìoæeò áûòü ócòaíoâëeía â peæèì, âûçûâaþùèé
ïpepûâaíèe  ïpè  ïoÿâëeíèè  cèìâoëa,  âoçíèêíoâeíèè  oøèáêè è ò.ï.  Ýòo
ïpepûâaíèe ìoìeíòaëüío  âûçoâeò  ïpoöeäópó  Baøeé  ïpoãpaììû,  êoòopaÿ,
cêaæeì,  áóäeò  ïepeäa-  âaòü  cëeäóþùèé  cèìâoë  èç  êoììóíèêaöèoííoão
áóôepa.

               3. Èíèöèaëèçaöèÿ ïocëeäoâaòeëüíoão ïopòa.

   Ïpè èíèöèaëèçaöèè ïopòa  êoììóíèêaöèè  ("oòêpûòèè")  ócòaíaâëèâaþòcÿ
âce  eão  ïapaìeòpû.  Ýòè  ïapaìeòpû  äëèíó  cëoâa,  ÷ècëo  còoï-áèòoâ,
ócòaíoâêó ÷eòíocòè è cêopocòü oáìeía.  Äëèía  cëoâa  ýòo  ÷ècëo  áèòoâ,
êoòopoe oápaçóeò ocíoâíóþ eäèíèöó äaííûx. Ecëè ìû paáoòaeì c ïpèâû÷íûìè
ïopöèÿìè ïo 8 áèòoâ, òo 7 áèòoâ äocòaòo÷íû äëÿ còaíäapòíûx ôaéëoâ ASCII
(â  êoòopûx  âce  cèìâoëû èìeþò êoäû,  íe ïpeâûøaþùèe ASCII 128),  â òo
âpeìÿ êaê äëÿ ïepeäa÷è ÷ècëeííûx äaííûx äocòaòo÷ío ïopöèé ïo 4 áèòa.

   Cpeäíèé ópoâeíü.

   Ôóíêöèÿ 0 ïpepûâaíèÿ 14H BIOS èíèöèaëèçèpóeò ïopò êoììóíèêa- öèè.  B
DX äoëæeí äaâaòücÿ íoìep êoììóíèêaöèoííoão êaíaëa (COM1 = 0, COM2 = 1).
B AL äoëæeí coäepæaòücÿ áaéò èíèöèaëèçaöèoííûx äaííûx,  çía÷eíèe  áèòoâ
êoòopoão cëeäóþùee:

   áèòû 1-0   äëèía cëoâa. 10 = 7 áèòoâ, 11 = 8 áèòoâ.
          2   ÷ècëo còoï-áèòoâ. 0 = 1, 1 = 2.
        4-3   ÷eòíocòü. 00 èëè 10 = íeò, 01 = íe÷eò., 11 = ÷eò.
        7-5   cêopocòü oáìeía. 000 = 110 áoä
                               001 = 150 áoä
                               010 = 300 áoä
                               011 = 600 áoä
                               100 = 1200 áoä
                               101 = 2400 áoä

                                     - 3 -
                               110 = 4800 áoä
                               111 = 9600 áoä

   B äaííoì  ïpèìepe  ïopò èíèöèaëèçèpóeòcÿ co cëoâoì â 8 áèòoâ,  oäíèì
còoï-áèòoì è ÷eòíoé ÷eòíocòüþ. Cêopocòü oáìeía 1200 áoä.

;---ïpècâaèâaeì çía÷eíèÿ ïapaìeòpoâ ïepeìeííûì
   MOV  WORDLENGTH,00000011B   ;äëèía cëoâa 8 áèòoâ
   MOV  STOPBITS,00000000B     ;1 còoï-áèò
   MOV  PARITY,00011000B       ;÷eòíaÿ ÷eòíocòü
   MOV  BAUDRATE,10000000B     ;cêopocòü 1200 áoä

;---èíèöèaëèçèpóeì COM1
   MOV  AL,0                   ;÷ècòèì AL
   OR   AL,WORDLENGTH          ;ócòaíaâëèâaeì íóæíûe áèòû
   OR   AL,STOPBITS            ;
   OR   AL,PARITY              ;
   OR   AL,BAUDRATE            ;
   MOV  AH,0                   ;ôóíêöèÿ èíèöèaëèçaöèè ïopòa
   MOV  DX,0                   ;âûáèpaeì COM1
   INT  14H                    ;èíèöèaëèçèpóeì ïopò

   Hèçêèé ópoâeíü.

   Heçaâècèìo oò òoão, çaíèìaeìcÿ ëè ìû ââoäoì èëè âûâoäoì, êaê ìèíèìóì
4  peãècòpa  ìèêpocxeìû  8250 äoëæíû áûòü èíèöèaëèçèpoâaíû äëÿ oïepaöèé
oáìeía. Ýòo peãècòpû äeëèòeëÿ cêopocòè oáìeía, pe- ãècòp êoíòpoëÿ ëèíèè
è peãècòp paçpeøeíèÿ ïpepûâaíèÿ.
   Äeëèòeëü cêopocòè  oáìeía  ýòo  ÷ècëo,  ía  êoòopoe  íaäo  paçäeëèòü
÷acòoòó  cècòeìíûx  ÷acoâ  (1190000  ãepö),  ÷òoáû  ïoëó÷èòü   æeëaeìóþ
cêopocòü  oáìeía.  Haïpèìep,  äëÿ  cêopocòè  oáìeía  1200  áoä äeëèòeëü
cêopocòè oáìeía äoëæeí áûòü paâeí 96,  ïocêoëüêó 1190000/96 ïpèáëèæeíío
paâío 1200.  ×eì áoëüøe äeëèòeëü,  òeì ìeíüøe cêopocòü oáìeía. Cêopocòè
oáìeía 300 è ìeíüøe òpeáóþò äâóxáaéòíoão ÷ècëa  äëÿ  äeëèòeëÿ.  Còapøèé
áaéò  ïocûëaeòcÿ  â 3F9H (èëè 2F9H),  a ìëaäøèé â 3F8H (2F8H).  B oáoèx
cëó÷aÿx áèò 7 peãècòpa óïpaâëeíèÿ ëèíèè  äoëæeí  áûòü  ócòaíoâëeí  â  1
ïepeä  çacûëêoé  çía÷eíèé;  â  ïpo-  òèâíoì cëó÷ae ïo ýòèì äâóì aäpecaì
çía÷eíèÿ  áóäóò  aäpecoâaíû  â  äpóãèe  peãècòpû  (cì.  [7.1.0]).   Boò
íeêoòopûe çía÷eíèÿ, òpeáóeìûe äëÿ oáû÷íûx cêopocòeé oáìeía:

   Cêopocòü oáìeía             3F9H            3F8H

        110                     04H             17H
        300                     01H             80H
        600                     00H             C0H
       1200                     00H             60H
       1800                     00H             40H
       2400                     00H             30H
       3600                     00H             20H
       4800                     00H             18H
       9600                     00H             0CH

   Bceãäa ócòaíaâëèâaéòe peãècòpû cêopocòè oáìeía ïepâûìè,  òaê êaê oíè
eäèícòâeííûe,  êoòopûe  òpeáóþò,  ÷òoáû áûë ócòaíoâëeí áèò 7 â peãècòpe
êoíòpoëÿ ëèíèè.  Ïocëe ýòoão íaäo èçìeíèòü coäepæèìoe peãècòpa êoíòpoëÿ
ëèíèè,  cápacûâaÿ 7-é áèò, ÷òoáû âce ocòaëüíûe äocòóïû ê peãècòpaì áûëè
ïpaâèëüíûìè. Ïocêoëüêó peãècòp êoíòpoëÿ ëèíèè ÿâëÿeòcÿ peãècòpoì òoëüêo
äëÿ   çaïècè,  òo  íeò  cïocoáa  âep-  íóòü  áèò  7  oápaòío  â  1  áeç
oäíoâpeìeííoé ócòaíoâêè âcex ocòaëüíûx áèòoâ ýòoão  peãècòpa.

                                     - 4 -
   Çía÷eíèe áèòoâ  peãècòpa êoíòpoëÿ ëèíèè,  aäpec ïopòa êoòopoão paâeí
3FBH (èëè 2FBH), cëeäóþùee:

   áèòû 1-0   Äëèía cèìâoëa. 00 = 5 áèòoâ, 01 = 6 áèòoâ
                             10 = 7 áèòoâ, 11 = 8 áèòoâ
          2   ×ècëo còoï-áèòoâ. 0 = 1, 1 = 1.5, ecëè äëèía
                                ïÿòè, èía÷e 2.
          3   ×eòíocòü. 1 = ãeíepèpóeòcÿ áèò ÷eòíocòè, 0 = íeò.
          4   Tèï ÷eòíocòè. 0 = íe÷eòíaÿ, 1 = ÷eòíaÿ
          5   Ôèêcaöèÿ ÷eòíocòè. Çacòaâëÿeò áèò ÷eòíocòè âceãäa
              áûòü 0 èëè 1. 0 = oòìeíeía
                  1 = âceãäa 1, ecëè áèò 3 = 1 & áèò 4 = 0
              èëè 1 = âceãäa 0, ecëè áèò 3 = 1 & áèò 4 = 1
              èëè 1 = íeò ÷eòíocòè, ecëè áèò 3 = 0
          6   Ócòaíoâêa ïepepûâa. Bûçûâaeò âûâoä còpoêè íóëeé
              â êa÷ecòâe cèãíaëa oòäaëeííoé còaíöèè.
              0 = çaïpeùeío, 1 = ïepepûâ
          7   Meíÿeò aäpeca ïopòoâ äpóãèx peãècòpoâ

Oáû÷ío áèòû 5-7 cápoøeíû  â  0.  Ocòaëüíûe  oïècûâaþò  çía÷eíèÿ,  oïpe-
äeëÿeìûe ïpoòoêoëoì oáìeía.
   Äaæe ecëè  Bû  íe  ècïoëüçóeòe  ïpepûâaíèÿ,  âce  paâío  Bû   äoëæíû
ïpoèçâecòè   çaïècü   â   peãècòp  paçpeøeíèÿ  ïpepûâaíèÿ,  ÷òoáû  áûòü
óâepeííûì, ÷òo ïpepûâaíèÿ çaïpeùeíû. Ïpocòo ïoìecòèòe â ýòoò peãècòp 0.
Peãècòp èäeíòèôèêaöèè ïpepûâaíèÿ ìoæío èãíopèpoâaòü.
   Èíèöèaëèçaöèÿ ocòaëüíûx peãècòpoâ  câÿçaía  c  ìoäeìaìè.  ßcío,  ÷òo
ìoäeìû  íóæíû  òoëüêo  äëÿ  câÿçè  c óäaëeííûìè ócòpoécòâaìè,  a íe äëÿ
óïpaâëeíèÿ áëèçëeæaùèìè ócòpoécòâaìè,  òaêèìè  êaê  ïocëeäoâa-  òeëüíûé
ïpèíòep.
   B äaííoì ïpèìepe èç oáëacòè äaííûx BIOS áepeòcÿ áaçoâûé aäpec  COM1,
ïocëe ÷eão paçëè÷íûe peãècòpû èíèöèaëèçèpóþòcÿ äëÿ cêopocòè oáìeía 1200
áoä, ceìèáèòíûx äaííûx, ÷eòíoé ÷eòíocòè è oäíoão còoï-áèòa.

;---ïoëó÷aeì áaçoâûé aäpec COM1
   MOV  AX,40H          ;ES óêaçûâaeò ía oáëacòü äaííûx BIOS
   MOV  ES,AX           ;
   MOV  DX,ES:[0]       ;ïoëó÷aeì áaçoâûé aäpec COM1
;---èíèöèaëèçèpóeè peãècòpû äeëèòeëÿ cêopocòè oáìeía ía 1200 áoä
   ADD  DX,3            ;óêaçûâaeì ía peãècòp êoíòpoëÿ ëèíèè
   MOV  AL,10000000B    ;ócòaíaâëèâaeì áèò 7
   OUT  DX,AL           ;ïocûëaeì áaéò
   DEC  DX              ;óêaçûâaeì ía còapøèé áaéò äeëèòeëÿ
   DEC  DX              ;cêopocòè oáìeía
   MOV  AL,0            ;còapøèé áaéò äëÿ 1200 áoä
   OUT  DX,AL           ;ïocûëaeì còapøèé áaéò äëÿ 1200 áoä
   DEC  DX              ;óêaçûâaeì ía ìëaäøèé áaéò äeëèòeëÿ
   MOV  AL,60H          ;ìëaäøèé áaéò äeëèòeëÿ äëÿ 1200 áoä
   OUT  DX,AL           ;ïocûëaeì ìëaäøèé áaéò
;---èíèöèaëèçèpóeì peãècòp êoíòpoëÿ ëèíèè
   MOV  AL,0            ;oáíóëÿeì AL
   OR   AL,10B          ;äëèía äaííûx 7 áèòoâ
   OR   AL,000B         ;1 còoï-áèò
   OR   AL,1000B        ;ãeíepèpóeòcÿ áèò ÷eòíocòè
   OR   AL,10000B       ;÷eòíaÿ ÷eòíocòü
   ADD  DX,3            ;óêaçûâae ía peãècòp êoíòpoëÿ ëèíèè
   OUT  DX,AL           ;ïocûëaeì èíèöèaëèçaöèoííoe çía÷eíèe

;---èíèöèaëèçèpóeì peãècòp paçpeøeíèÿ ïpepûâaíèÿ
   DEC  DX              ;óêaçûâaeì ía peãècòp paçpeøeíèÿ

                                     - 5 -
   DEC  DX              ;ïpepûâaíèÿ
   MOV  AL,0            ;çaïpeùaeì ïpepûâaíèÿ
   OUT  DX,AL           ;ïocûëaeì áaéò

            4. Ócòaíoâêa òeêóùeão êoììóíèêaöèoííoão ïopòa.

   Èìeþòcÿ äâa cïocoáa,  êoòopûìè ïpoãpaììa ìoæeò oïpeäeëèòü,  êaêoé èç
êoììóíèêaöèoííûx ïopòoâ äoëæeí ècïoëüçoâaòücÿ. Oäèí èç cïocoáoâ cocòoèò
â óêaçaíèè íoìepa êaíaëa â oïepaòope ïpoãpaììû. Bòopoé cïocoá cocòoèò â
íaïècaíèè  ïpoãpaììû  äëÿ  oáìeía ÷epeç ïopò COM1,  ío èçìeíeíèè êoììó-
íèêaöèoííoão aäaïòepa, äocòóï ê êoòopoìó èäeò ÷epeç COM1.
   Oáëacòü äaííûx   BIOS   coäepæèò   ìecòo   äëÿ   ÷eòûpex  2-xáaéòíûx
ïepeìeííûx,  êoòopûe coäepæaò áaçoâûe aäpeca  êoììóíèêaöèoííûx  êaíaëoâ
(MS DOS ïoääepæèâaeò òoëüêo ïepâûe äâa èç íèx). Áaçoâûé aäpec ïopòa ýòo
ìëaäøèé èç ãpóïïû aäpecoâ ïopòoâ, ÷epeç êoòopûe ìoæío ïoëó÷èòü äocòóï ê
äaííoìó  êoììóíèêaöèoííoìó  êaíaëó.  Áaçoâûé  aäpec äëÿ COM1 xpaíèòcÿ â
ÿ÷eéêe 0040:0000,  a äëÿ COM2 - â ÿ÷eéêe 0040:0002.  Äëÿ  cìeíû  êoììó-
íèêaöèoííûx  ïopòoâ  íaäo  ïpocòo ïoìeíÿòü ýòè äâa çía÷eíèÿ.  Ïoâòopíaÿ
cìeía çía÷eíèé ïpèâeäeò ê ïepâoía- ÷aëüíoìó íaçía÷eíèþ ïopòoâ.

   Cpeäíèé ópoâeíü.

   Ecëè ïpoãpaììa oápaùaeòcÿ ê êoììóíèêaöèoííoìó ïopòó ÷epeç ïpepûâaíèe
14H BIOS, òo COM ïopò oïpeäeëÿeòcÿ coäepæèìûì DX, êoòopoe paâío 0 èëè 1
(äëÿ COM1 èëè COM2). Bìecòo òoão, ÷òoáû ïpècâaèâaòü DX íeïocpeäcòâeííoe
çía÷eíèe,  çaïoëíÿéòe eão èç ïepe- ìeííoé, êoòopoé ìoæeò áûòü ïpècâoeío
çía÷eíèe 0 èëè 1.  Ïpoãpaììû, ècïoëüçóþùèe êoììóíèêaöèoííûe ôóíêöèè 3 è
4 ïpepûâaíèÿ 21H âceãäa aäpecóþòcÿ ê COM1.  B ýòoì cëó÷ae íaäo ïoìeíÿòü
áaçoâûe aäpeca:

;---oáìeí áaçoâûx aäpecoâ äëÿ COM1 è COM2
   MOV  AX,40H        ;ES óêaçûâaeò ía oáëacòü äaííûx BIOS
   MOV  ES,AX         ;
   MOV  DX,ES:[0]     ;ïoìeùaeì 1-é áaçoâûé aäpec â DX
   MOV  AX,ES:[2]     ;ïoìeùaeì 2-é áaçoâûé aäpec â AX
   MOV  ES:[0],AX     ;oáìeíèâaeì aäpeca
   MOV  ES:[2],DX     ;

            5. Oïpeäeëeíèe còaòóca êoììóíèêaöèoííoão ïopòa.

   Peãècòp còaòóca ëèíèè ìèêpocxeìû UART 8250 oïpeäeëÿeò ïpoòoêoë  câÿ-
çè.  Ýòoò  peãècòp  èìeeò  aäpec  ïopòa ía 5 áoëüøe,  ÷eì áaçoâûé aäpec
äaííoão êaíaëa. Oáû÷ío oí ïocòoÿíío ïpocìaòpèâaeòcÿ â ïpo- öecce êoììó-
íèêaöèoííoão oáìeía. Ïpè ïepeäa÷e äaííûx peãècòp cooáùaeò, ÷òo ïpeäûäó-
ùèé cèìâoë óæe ïocëaí,  ïoçâoëÿÿ ïpoãpaììe çaïècaòü íoâûé cèìâoë ïoâepx
eão.  Ïpè  ïpèeìe  äaííûx  peãècòp  èíôopìèpóeò ïpoãpaììó o ïocòóïëeíèè
cëeäóþùeão cèìâoëa,  c òeì ÷òoáû ïpoãpaììa ìoãëa ïpo÷èòaòü  eão  ïpeæäe
÷eì  oí  áóäeò  óíè÷òoæeí  cëe- äóþùèì ïpèáûâøèì.  Çía÷eíèe áèòoâ ýòoão
peãècòpa cëeäóþùee:

   áèò 0   1 = áaéò äaííûx ïoëó÷eí
       1   1 = ïoëó÷eííûe äaííûe áûëè ïepeçaïècaíû (ïpeäûäóùèé
               cèìâoë íe áûë âoâpeìÿ c÷èòaí)
       2   1 = oøèáêa ÷eòíocòè (âepoÿòío, èç-ça øóìa â ëèíèè)
       3   1 = oøèáêa oêpóæeíèÿ (ïepeäa÷a íe cèíxpoíèçoâaía)
       4   1 = oáíapóæeí ïepepûâ (ïoëó÷eía äëèííaÿ còpoêa eäèíèö,
               èíäèöèpóþùaÿ, ÷òo äpóãaÿ còaíöèÿ çaïpaøèâaeò
               êoíeö ïepeäa÷è)
       5   1 = peãècòp xpaíeíèÿ ïepeäaò÷èêa ïócò (â ýòoò peãècòp

                                     - 6 -
               äoëæíû ïoìeùaòücÿ ïepeäaâaeìûe äaííûe)
       6   1 = peãècòp cäâèãa ïepeäaò÷èêa ïócò (ýòoò peãècòp ïo-
               ëó÷aeò äaííûe èç peãècòpa xpaíeíèÿ è ïpeoápaçóeò
               èx â ïocëeäoâaòeëüíûé âèä)
       7   1 = òaéìaóò (ócòpoécòâo íe câÿçaío c ìaøèíoé)

   Cpeäíèé ópoâeíü.

   Ôóíêöèÿ 3  ïpepûâaíèÿ 14H BIOS âoçâpaùaeò â AH peãècòp còaòóca ëèíèè
(AL ïoëó÷aeò peãècòp còaòóca  ìoäeìa  [7.1.5]).  Ïpè  âxoäe  DX  äoëæeí
coäepæaòü  íoìep  êoììóíèêaöèoííoão  ïopòa,  ê  êoòopoìó ocóùecòâëÿeòcÿ
äocòóï,  ãäe COM1 = 0,  a COM2 =  1.  Kaê  è  ïpeäûäóùèé  ïpèìep,  ýòoò
ïpoâepÿeò íaëè÷èe ïepepûâa:

   MOV  AH,3          ;íoìep ôóíêöèè
   MOV  DX,1          ;âûáèpaeì COM2
   INT  14H           ;ïoëó÷aeì áaéò còaòóca
   TEST AH,10000B     ;oáíapóæeí ïepepûâ?
   JNZ  BREAK_DETECT  ;ecëè äa, òo ía ïpoöeäópó oápaáoòêè

   Hèçêèé ópoâeíü.

  Èç oáëacòè  äaííûx  BIOS  c÷èòûâaeòcÿ áaçoâûé aäpec êoììóíèêaöèoííoão
êaíaëa,  ê íeìó äoáaâëÿeòcÿ 5, a çaòeì èç ïoëó÷eííoão aäpeca ïopòa c÷è-
òûâaeòcÿ áaéò còaòóca.

   MOV  AX,40H          ;ES óêaçûâaeò ía oáëacòü äaííûx BIOS
   MOV  ES,AX           ;
   MOV  DX,ES:[2]       ;ïoëó÷aeì áaçoâûé aäpec COM2
   ADD  DX,5            ;äoáaâëÿeì 5 äëÿ peãècòpa còaòóca
   IN   AL,DX           ;ïoëó÷aeì áaéò còaòóca
   TEST AL,10000B       ;áèò 5 ócòaíoâëeí?
   JNZ  BREAK_DETECT    ;ecëè äa, òo ía oápaáoòêó ïepepûâa

                6. Èíèöèaëèçaöèÿ è óïpaâëeíèe ìoäeìoì.

   Èìeeòcÿ 6   ëèíèé,  ïo  êoòopûì  ìoäeìû  câÿçûâaþòcÿ  c  êoìïüþòepoì
(ócoâepøeícòâoâaííûe ìoäeëè ìoãóò èìeòü äoáaâo÷íûe ëèíèè ïo  èíòepôeécó
RS232). Boò èx íaçâaíèÿ, coêpaùeíèÿ è ôóíêöèè:

Oò êoìïüþòepa ê ìoäeìó:

Data Terminal Ready (DTR)        Èíôopìèpóeò ìoäeì, ÷òo êoìïüþòep
Ãoòoâíocòü êoìïüþòepa            âêëþ÷eí è ãoòoâ ê câÿçè.

Request To Send (RTS)            Èíôopìèpóeò ìoäeì, ÷òo êoìïüþòep
Çaïpoc ía ïocûëêó                oæèäaeò ïocûëêè äaííûx.

Oò ìoäeìa ê êoìïüþòepó:

Data Set Ready (DSR)             Èíôopìèpóeò êoìïüþòep, ÷òo ìoäeì
Ãoòoâíocòü ìoäeìa                âêëþ÷eí è ãoòoâ.

Clear To Send (CTS)              Èíôopìèpóeò êoìïüþòep, ÷òo ìoäeì
Ãoòoâíocòü ê ïocûëêe             ãoòoâ ía÷aòü ïepeäa÷ó äaííûx.

Data Carrier Detect (DCD)        Èíôopìèpóeò êoìïüþòep, ÷òo ìoäeì
Oáíapóæeí íocèòeëü äaííûx        câÿçaí c äpóãèì ìoäeìoì.


                                     - 7 -
Ring Indicator (RI)              Èíôopìèpóeò êoìïüþòep, ÷òo òeëe-
Èíäèêaòop çâoíêa                 ôoííaÿ ëèíèÿ, ïo êoòopoé ïpècoe-
                                 äèíeí ìoäeì èìeeò çâoíoê.

   Cía÷aëa êoìïüþòep ócòaíaâëèâaeò cèãíaë  DTR,  a  çaòeì  èícòóêòèpóeò
ìoäeì câÿçaòücÿ c óäaëeííoé còaíöèeé.  Ïocëe òoão,  êaê ìoäeì ócòaíoâèë
câÿçü oí ócòaíaâëèâaeò cèãíaë DSR.  Ýòoò cèãíaë èíôopìèpóeò  êoìïüþòep,
÷òo  ìoäeì  ãoòoâ  ê  câÿçè  è â ýòoò ìoìeíò êoìïüþòep ìoæeò ócòaíoâèòü
cèãíaë RTS. Koãäa ìoäeì oòâeòèò cèãíaëoì CTS, òo ïepeäa÷a ía÷èíaeòcÿ.
   Äâe còaíäapòíûe  ëèíèè,  ïo  êoòopûì  êoìïüþòep  óïpaâëÿeò  ìoäeìoì,
äocòóïíû ÷epeç peãècòp  êoíòpoëÿ  ìoäeìa  ìèêpocxeìû  UART  8250.  Ýòoò
peãècòp èìeeò aäpec ïopòa ía 4 áoëüøe,  ÷eì áaçoâûé aäpec ècïoëüçóeìoão
êoììóíèêaöèoííoão êaíaëa. Boò çía÷eíèe eão áèòoâ:

Peãècòp êoíòpoëÿ ìoäeìa:

   áèòû 7-5     (âceãäa 0)
          4     1 = âûxoä UART çaìêíóò ía âxoä
          3     äoáaâo÷íûé ïoëüçoâaòeëü íaçía÷eí ía âûâoä #2
          2     äoáaâo÷íûé ïoëüçoâaòeëü íaçía÷eí ía âûâoä #1
          1     1 = "çaïpoc ía ïocûëêó" aêòèâeí
          0     1 = "ãoòoâíocòü êoìïüþòepa" aêòèâía

   Oáû÷ío ócòaíoâëeíû áèòû 0 è 1 peãècòpa êoíòpoëÿ ìoäeìa,  a ocòaëüíûe
paâíû 0.  Áèò 2 paâeí 0,  ça ècêëþ÷eíèeì cëó÷aeâ,  êoãäa  ïpoèçâoäèòeëü
ìoäeìa  ïpeäíaçía÷èë  eão  äëÿ  cïeöèaëüíoão  ècïoëüço-  âaíèÿ.  Áèò  3
ócòaíoâëeí òoëüêo â cëó÷ae,  êoãäa ècïoëüçóþòcÿ ïpe-  pûâaíèÿ  [7.1.8].
Haêoíeö,  áèò 4 ïpeäocòaâëÿeò âoçìoæíocòü òecòèpoâaíèÿ êoììóíèêaöèoííûx
ïpoãpaìì áeç ócòaíoâëeíèÿ peaëüíoé câÿçè.  Bûxoäíoé  cèãíaë  ìèêpocxeìû
UART  ïoäaeòcÿ  ía  âxoä,  êaê  áóäòo  UART  ïpèíèìaeò ïocëeäoâaòeëüíûe
äaííûe. Ýòo câoécòâo ìoæío èc- ïoëüçoâaòü äëÿ òecòèpoâaíèÿ ïpaâèëüíocòè
paáoòû caìoé   ìèêpocxeìû.  Oío  íeäocòóïío  ïpè  ècïoëüçoâaíèè  êoììó-
íèêaöèoííûx ïpoöeäóp ïpepûâaíèÿ 14H BIOS.
   ×eòûpe ëèíèè,  ïo  êoòopûì  ìoäeì  ïocûëaþò  èíôopìaöèþ  êoìïüþòepó,
óïpaâëÿþòcÿ peãècòpoì còaòóca ìoäeìa. Ýòoò peãècòp pacïoëoæeí ïo aäpecó
ïopòa  ía  6 áoëüøe,  ÷eì áaçoâûé aäpec ècïoëüçóeìoão êoììóíèêaöèoííoão
aäaïòepa. Boò çía÷eíèe eão áèòoâ:

Peãècòp còaòóca ìoäeìa:

   áèò 7      1 = DCD
       6      1 = RI
       5      1 = DSR
       4      1 = CTS
       3      1 = èçìeíeíèe â DCD
       2      1 = èçìeíeíèe â RI
       1      1 = èçìeíeíèe â DSR
       0      1 = èçìeíeíèe â CTS

   Ïpoãpaììa íeïpepûâío  ïpoâepÿeò  ýòè  áèòû  â  xoäe êoììóíèêaöèoííûx
oïepaöèé.  Oòìeòèì,  ÷òo 4 ìëaäøèx  áèòa  ïapaëëeëüíû  còapøèì  ÷eòûpeì
áèòaì.  Ýòè  áèòû  ócòaíaâëèâaþòcÿ  â 1 òoëüêo òoãäa,  êoãäa ïpoècxoäèò
èçìeíeíèe â còaòóce cooòâeòcòâóþùeão còapøeão áèòa  c  òex  ïop,  êoãäa
peãècòp  ÷èòaëcÿ  ïocëeäíèé  paç.  Bce  4  ìëaäøèx  áèòa  aâòoìaòè÷ecêè
cápacûâaþòcÿ ïpè ÷òeíèè peãècòpa.  Ïpoãpaììû ëþáoão ópoâíÿ ìoãóò  ïpÿìo
÷èòaòü ýòoò peãècòp. Äpóãoé âoçìoæíocòüþ ÿâëÿeòcÿ ècïoëüçoâaíèe ôóíêöèè
3 ïpepûâaíèÿ 14H BIOS,  êoòopaÿ âoçâpaùaeò peãècòp còaòóca ìoäeìa â  AL
(ïpè ýòoì â AH áóäeò coäep- æaòücÿ peãècòp còaòóca ëèíèè). Ïpè âxoäe DX
äoëæeí coäepæaòü íoìep êoììóíèêaöèoííoão êaíaëa (0 èëè 1).

                                     - 8 -
   Áoëüøèícòâo ìoäeìoâ èìeeò íaìíoão áoëüøe âoçìoæíocòeé,  ïo cpaâíeíèþ
c òeìè,  ÷òo oòpaæeíû â äâóx câÿçaííûx  c  ìoäeìoì  peãècòpax.  Èìeþòcÿ
âoçìoæíocòè  aâòoìaòè÷ecêoé  câÿçè  è  aâòoìaòè÷ecêoão oòâeòa,  êoòopûe
êoíòpoëèpóþòcÿ óïpaâëÿþùeé còpoêoé.  Ýòa còpoêa ïocûëaeòcÿ â ìoäeì, êaê
áóäòo ïepeäaþòcÿ oáû÷íûe äaííûe. Moäeì âûäeëÿeò ýòó còpoêó èç äaííûx ïo
cïeöèaëüíoìó  cèìâoëó,  ècïoëüçóe-  ìoìó  òoëüêo  äëÿ  óêaçaíèÿ  ía÷aëa
óïpaâëÿþùeé  còpoêè.  Ýòoò  cèìâoë  ìoæeò  áûòü ïpeäoïpeäeëeííûì (÷acòo
ècïoëüçóeòcÿ êoä Esc - ASCII 27) èëè  âûáèpaeìûì  ïoëüçoâaòeëeì.  Moäeì
cïocoáeí  oïpeäeëèòü  íac-  êoëüêo  äëèííoé  äoëæía áûòü êaæäaÿ còpoêa,
ïoýòoìó ïo oêoí÷aíèè  còpoêè  oí  oïÿòü  paccìaòpèâaeò  âxoäÿùèé  ïoòoê
èíôopìaöèè êaê äaííûe. Kaæäûé ìoäeì èìeeò câoé íaáop êoìaíä.

   Hèçêèé ópoâeíü.

   Boò òa æe caìaÿ cxeìa ía ÿçûêe acceìáëepa:

;---ócòaíaâëèâaeì cèãíaë DTR
   MOV  DX,BASE_ADDRESS    ;ía÷èíaeì c áaçoâoão aäpeca
   ADD  DX,4               ;óêaçûâaeì ía peãècòp êoíòpoëÿ ìoäeìa
   MOV  AL,1               ;ócòaíaâëèâaeì áèò 1
   OUT  DX,AL              ;ïocûëaeì â ïopò
;---ïocûëaeì óïpaâëÿþùóþ còpoêó ìoäeìó äëÿ âûçoâa
    .
   (ýòoò êoä paçíûé äëÿ paçíûx ìoäeìoâ)
    .
;---oæèäaeì ïoêa áóäeò ócòaíoâëeí cèãíaë DSR
   INC  DX                 ;óêaçûâaeì ía peãècòp còaòóca ìoäeìa
   INC  DX                 ;
TRY_AGAIN:  IN   AL,DX     ;ïoëó÷aeì coäepæèìoe
   TEST AL,10B             ;ïpoâepÿeì âòopoé áèò
   JZ   TRY_AGAIN          ;æäeì ïoêa oí íe áóäeò paâeí 1

;---ócòaíaâëèâaeì áèò RTS
   DEC  DX                 ;âoçâpaùaeìcÿ ê peãècòpó óïpaâëeíèÿ
   DEC  DX                 ;
   MOV  AL,3               ;ócòaíaâëèâaeì cèãíaë RTS
   OUT  DX,AL              ;ïocûëaeì â ïopò
;---oæèäaeì cèãíaëa CTS
   INC  DX                 ;âoçâpaùaeìcÿ ê peãècòpó còaòóca
   INC  DX                 ;
ONCE_MORE:  IN   AL,DX     ;ïoëó÷aeì áaéò còaòóca
   TEST AL,1               ;ïpoâepÿeì áèò CTS
   JZ   ONCE_MORE          ;íe ïpoäoëæaeì ïoêa oí íe ócòaíoâëeí
;---òeïepü ìoæío ïocûëaòü äaííûe

                          6. Ïepeäa÷a äaííûx.

   Ïepeäa÷a äaííûx ïpoùe ÷eì ïpèeì,  ïocêoëüêó ïpoãpaììa  èìeeò  ïoëíûé
êoíòpoëü  íaä  cocòaâoì  äaííûx  è  cêopocòüþ,  c  êoòopoé  oíè  äoëæíû
ïocûëaòücÿ.  Teì íe ìeíee  ïpoöeäópû  ïepeäa÷è  ìoãóò  áûòü  äocòaòo÷ío
cëoæíûìè,   ecëè   oíè  oápaáaòûâaþò  äaííûe  ïo  ìepe  òoão,  êaê  oíè
ïocûëaþòcÿ.  Moãóò   áûòü   òaêæe   ïpoáëeìû   c   cèíxpoíèçaöèeé   ïpè
ècïoëüçoâaíèè  ïpoòoêoëa XON/XOFF.  Ýòoò ïpoòoêoë ècïoëüçóeò êoäû ASCII
17(XON) è 19(XOFF), äëÿ òoão ÷òoáû cèãíaëèçèpoâaòü ïpèíèìaþùeé còaíöèè,
÷òo  ïepeäaò÷èê  xo÷eò  ïpoäoëæèòü ïepeäa÷ó âpeìeíío ïpepâaííoão ïoòoêa
äaííûx.  ×òoáû ïpèíÿòü ýòè cèãíaëû,  ïpoãpaììa äoëæía íeïpepûâío aíaëè-
çèpoâaòü ïpèíèìaeìûe cèìâoëû ïpè ïepeäa÷e (â ïoëíoäóïëeêcíoì peæèìe,  â
êoòopoì oáû÷ío paáoòaþò ìoäeìû, cèãíaëû oäíoâpeìeíío èäóò â oáe còopoíû
ïo  òeëeôoííoìó êaíaëó).  Kpoìe òoão,  ÷òoáû oáíapóæèòü,  ÷òo óäaëeííaÿ

                                     - 9 -
còaíöèÿ ïocûëaeò còpoêó íóëeé,  â  êa÷ecòâe  cèãíaëa  ïepepûâa,  äoëæeí
íeïpe-  pûâío  aíaëèçèpoâaòücÿ  còaòóc áèòa ïepepûâa (íoìep 4) peãècòpa
còaòóca ëèíèè.
   Cpeäíèé ópoâeíü.

   Ôóíêöèÿ 1  ïpepûâaíèÿ 14H BIOS ïocûëaeò cèìâoë,  coäepæaùèécÿ â AL â
êoììóíèêaöèoííûé êaíaë.  Ïpè âxoäe DX coäepæèò íoìep ïopòa (0  èëè  1).
Ïpè  âoçâpaòe  AH  coäepæèò  áaéò  còaòóca,  â êoòopoì áèò 7 = 1,  ecëè
oïepaöèÿ íeócïeøía. B ýòoì cëó÷ae èìeþò çía÷eíèe cëeäóþùèe áèòû:

áèò 4   oáíapóæeí ïepepûâ (cèãíaë "còoï" oò ïpèíèìaþùeé còaíöèè)
    5   peãècòp cäâèãa ïepeäaò÷èêa ïócò
    6   peãècòp xpaíeíèÿ ïepeäaò÷èêa ïócò

   MS DOS  èìeeò  ôóíêöèþ  äëÿ  ïepeäa÷è  ïo  êoììóíèêaöèoííoìó  êaíaëó
cèìâoëa,  ïoìeùaeìoão â DL.  Ýòo ôóíêöèÿ íoìep 4 ïpepûâaíèÿ 21H, ío oía
íe èìeeò íèêaêèx ïpeèìóùecòâ ïepeä ôóíêöèeé  BIOS;  oía  íe  âoçâpaùaeò
còaòócíoé èíôopìaöèè è íe ïoçâoëÿeò íaçía÷aòü êaêoé èç êoììóíèêaöèoííûx
ïopòoâ íaäo ècïoëüçoâaòü (âceãäa ècïoëüçóeòcÿ COM1).
   ×òoáû âûâecòè  còpoêó äaííûç ècïoëüçóéòe ôóíêöèþ 40H ïpepûâaíèÿ 21H.
Ýòo  oáû÷íaÿ  ôóíêöèÿ  âûâoäa  äëÿ  âcex   ôaéëoâ   è   ócòpoécòâ   ïpè
ècïoëüçoâaíèè  ìeòoäa  äocòóïa  äecêpèïòopa  ôaéëoâ.  COM1  èìeeò  ïpe-
ëoïpeäeëeííûé íoìep #3.  Ïoìecòèòe íoìep ôaéëa  â  BX,  a  ÷ècëo  ïepe-
äaâaeìûx áaéòoâ â CX. Ïócòü DS:DX óêaçûâaþò ía áóôep âûâoäèìûx äaííûx è
âûçûâaéòe ôóíêöèþ.

   MOV  AH,40H         ;íoìep ôóíêöèè
   MOV  BX,3           ;ïpeäoïpeäeëeííûé íoìep ôaéëa äëÿ COM1
   MOV  CX,50          ;âûâoäèì 50 áaéòoâ
   LEA  DX,DATA_BUFFER ;DS:DX óêaçûâaþò ía áóôep äaííûx
   INT  21H            ;ïocûëaeì äaííûe
   JC   COM_ERROR      ;óxoä ía oápaáoòêó oøèáêè

   Hèçêèé ópoâeíü.

   Koãäa áaéò  äaííûx ïoìeùaeòcÿ â peãècòp xpaíeíèÿ ïepeäaò÷èêa,  òo oí
aâòoìaòè÷ecêè âûâoäèòcÿ â ïocëeäoâaòeëüíûé êaíaë ÷epeç  peãècòp  cäâèãa
ïepeäaò÷èêa,  êoòopûé cepèaëèçóeò äaííûe.  Heò íeoáxoäèìocòè â èìïóëüce
áèòa còpoáa,  êaê ýòo äeëaeòcÿ â cëó÷ae ïa- paëëeëüíoão aäaïòepa. Áèò 5
peãècòpa   còaòóca   ëèíèè  ïoêaçûâaeò  câoáoäeí  ëè  peãècòp  xpaíeíèÿ
ïepeäaò÷èêa äëÿ ïpèeìa äaííûx.  Pe- ãècòp ïocòoÿíío ïpoâepÿeòcÿ äo  òex
ïop,  ïoêa  áèò  5  íe còaíeò paâíûì 1.  Ïocëe ýòoão â peãècòp xpaíeíèÿ
ïepeäaò÷èêa  ïocûëaeòcÿ  o÷epeäíoé  áaéò  èç  òoão  ìecòa,  oòêóäa  oíè
áepóòcÿ.  B  ïpoöecce  ïepeäa÷è  áèò  5 paâeí 0 è òoëüêo êoãäa oí oïÿòü
còaíeò paâíûì 1,  òo â peãècòp xpaíeíèÿ ïepeäaò÷èêa ìoæeò  áûòü  ïocëaí
cëeäóþùèé cèìâoë. Ýòoò ïpoöecc ïoâòopÿeòcÿ äo òex ïop, ïoêa ýòo íóæío.
   B cëeäóþùeì  ïpèìepe  äaíû  ocíoâíûe  ïoíÿòèÿ  oá  ýòoé   ïpoöeäópe.
Koíe÷ío,  oía  ìoæeò  áûòü  cäeëaía  íeoáû÷aéío  cëoæíoé  (â ÷acòíocòè,
ïpoãpaììèpoâaíèe câÿçè òpeáóeò ocoáo  òùaòeëüíûx  ïpoöeäóp  oáíapóæeíèÿ
oøèáoê  è  âoccòaíoâëeíèÿ  ïpè  cáoÿx).  B ïpèìepe ïpeäïoëaãaeòcÿ,  ÷òo
êoììóíèêaöèoííûé ïopò è ìoäeì  óæe  èíèöèaëèçèpoâaíû.

;---æäeì ïoêa âce áóäeò ãoòoâo äëÿ ïocûëêè cèìâoëa
KEEP_TRYING:  MOV  DX,BASE_ADDRESS   ;áaçoâûé aäpec
   ADD  DX,5              ;óêaçûâaeì ía peãècòp còaòóca ëèíèè
   IN   AL,DX             ;ïoëó÷aeì áaéò còaòóca
   TEST AL,00011110B      ;ïpoâepÿeì ía oøèáêó
   JNZ  ERROR_ROUTINE     ;ecëè ecòü, òo ía ïpoöeäópó oápaáoòêè
   TEST AL,00000001B      ;ïpoâepÿeì ïoëó÷eíû ëè äaííûe

                                     - 10 -
   JNZ  RECEIVE           ;ecëè äa, òo ía ïpoöeäópó ïpèeìa
   TEST AL,00100000B      ;ïpoâepÿeì ãoòoâíocòü ê ïepeäa÷e
   JZ   KEEP_TRYING       ;ecëè íeò, òo âoçâpaùaeìcÿ íaçaä
;---ïepeäaeì cèìâoë ïpèíèìaeìûé c êëaâèaòópû
   MOV  AH,1              ;ôóíêöèÿ ïpoâepêè íaæaòèÿ êëaâèøè
   INT  16H               ;ïpepûâaíèe êëaâèaòópû BIOS
   JZ   KEEP_TRYING       ;âoçâpaò, ecëè íe áûëo íaæaòèÿ
   MOV  AH,0              ;ôóíêöèÿ ïoëó÷eíèÿ êoäa c êëaâèaòópû
   INT  16H               ;òeïepü íóæíûé cèìâoë â AL
   SUB  DX,5              ;aäpec peãècòpa xpaíeíèÿ ïepeäaò÷èêa
   OUT  DX,AL             ;ïocûëaeì cèìâoë
   JMP  SHORT KEEP_TRYING ;âoçâpaùaeìcÿ ê ía÷aëó öèêëa

                         7. Ïoëó÷eíèe äaííûx.

   Koììóíèêaöèoííaÿ ïpoãpaììa ãoòoâa ïpèíèìaòü äaííûe êaê  òoëüêo  èíè-
öèaëèçèpoâaí  êoììóíèêaöèoííûé  ïopò  è  ócòaíoâëeía  câÿçü c óäaëeííoé
còaíöèeé. Ïpèeì äaííûx íèêoãäa ïoëíocòüþ íe oòäeëeí oò ïepeäa÷è äaííûx,
ïocêoëüêó  ïpoãpaììe  ìoæeò  ïoòpeáo- âaòücÿ ïocëaòü cèãíaë XOFF (ASCII
19), ÷òoáû ocòaíoâèòü ïoòoê äaííûx, ecëè oíè ïocòóïaþò cëèøêoì áûcòpo è
oía íe ócïeâaeò èx oápaáaòûâaòü.  Koä XON (ASCII 17) cooáùaeò óäaëeííoé
còaíöèè, ÷òo ìoæío ïpoäoëæèòü ïepeäa÷ó.
   B çaâècèìocòè   oò   cëoæíocòè   ècïoëüçóeìoão   ïpoòoêoëa   oáìeía,
ïpèíèìaeìûe äaííûe ìoãóò òpeáoâaòü ïpocòoé èëè cëoæíoé oápaáoòêè. Te èç
íèx,  êoòopûe  ÿâëÿþòcÿ  oãpaíè÷èòeëÿìè  äaííûx ÷aùe oáíapóæèâaþòcÿ ïpè
cèíxpoííoì oáìeíe.  Ïpè âûâoäe ïoëó÷aeìûx cèìâoëoâ ía ýêpaí  ó÷èòûâaéòe
âëèÿíèe cèìâoëoâ ïepeâoäa còpoêè (ASCII 10),  ïocêoëüêó íeêoòopûe ÿçûêè
(âêëþ÷aÿ Áeécèê) aâòoìaòè÷ecêè âcòaâëÿþò ïepeâoä còpoêè ïocëe  âoçâpaòa
êapeòêè;  â  ýòoì  cëó÷ae  ècêëþ÷aéòe  ïepeâoäû  còpoêè  èç ïpèíèìaeìûx
äaííûx, ÷òoáû èçáeæaòü ïócòûx còpoê ïpè âûâoäe.

   Cpeäíèé ópoâeíü.

   Ôóíêöèÿ 2 ïpepûâaíèÿ 14H BIOS oæèäaeò  cèìâoë  èç  ïocëeäoâaòeëüíoão
ïopòa,  ïoìeùaeò  eão  â  AL  ïpè  ïoëó÷eíèè  è  çaòeì  âoçâpaùaeòcÿ  â
ïpoãpaììó.  Ïpè âxoäe íaäo  ïoìecòèòü  íoìep  ïopòa  (0-1)  â  DX.  Ïpè
âoçâpaòe  AX paâeí íóëþ,  ecëè íe áûëo oøèáêè.  Ecëè AH íe paâeí 0,  òo
ìoæeò áûòü âoçâpaùeí áaéò còaòóca,  â êoòopoì èìeþò çía÷eíèe  òoëüêo  5
áèòoâ. Ýòo cëeäóþùèe áèòû:

áèò  1   oøèáêa ïepeïoëíeíèÿ (íoâûé cèìâoë ïocòóïèë  paíüøe,  ÷eì
         áûë óäaëeí còapûé)
     2   oøèáêa ÷eòíocòè (âepoÿòío, èç-ça ïpoáëeì â ëèíèè)
     3   oøèáêa oôopìëeíèÿ (còapòoâûé èëè còoï-áèòû íeâepíû)
     4   oáíapóæeí ïepepûâ (ïoëó÷eía äëèííaÿ còpoêa áèòoâ 0)
     5   oøèáêa òaéìaóòa (íe ïoëó÷eí cèãíaë DSR)

   MS DOS  òaêæe  ïpeäocòaâëÿeò  êoììóíèêaöèoííóþ  ôóíêöèþ  äëÿ  ïpèeìa
oäíoão cèìâoëa, ýòo ôóíêöèÿ 3 ïpepûâaíèÿ 21H. Ôóíêöèÿ oæèäaeò cèìâoë èç
COM1 è ïoìeùaeò eão â AL.  Oòìeòèì,  ÷òo  ïpè  ýòoì  íeò  ôóíêöèè  èíè-
öèaëèçaöèè   ïopòa,  êoòopóþ  íaäo  äeëaòü  ÷epeç  ïpoöeäópó  BIOS  èëè
íeïocpeäcòâeíío,  êaê ïoêaçaío â [7.1.2].  Ïo óìoë÷aíèþ ïopò  èíèöèaëè-
çèpóeòcÿ co çía÷eíèÿìè 2400 áoä, íeò êoíòpoëÿ ÷eòíocòè, oäèí còoï-áèò è
8 áèòoâ ía cèìâoë. Ýòa ôóíêöèÿ íe èìeeò íèêaêèx äocòoèícòâ ïo cpaâíeíèþ
c ôóíêöèeé BIOS è íe âoçâpaùaeò èíôopìaöèè o còaòóce.

   Hèçêèé ópoâeíü.

   Ïpè ïoëó÷eíèè   äaííûx   áeç  ècïoëüçoâaíèÿ  êoììóíèêaöèoííoão  ïpe-

                                     - 11 -
pûâaíèÿ ïpoãpaììa äoëæía ïocòoÿíío  ïpoâepÿòü  peãècòp  còaòóca  ëèíèè,
aäpec  ïopòa  êoòopoão ía 5 áoëüøe áaçoâoão aäpeca ècïoëüçóeìoão êoììó-
íèêaöèoííoão aäaïòepa.  Áèò 0 ýòoão peãècòpa áóäeò paâeí íóëþ,  äo  òex
ïop  ïoêa  íe áóäeò ïoëó÷eí cèìâoë â pe- ãècòp äaííûx ïpèeìíèêa.  Koãäa
áèò 0 còaíoâèòcÿ paâíûì 1,  òo íaäo íeìeäëeíío c÷èòaòü eão èç peãècòpa,
c òeì ÷òoáû ía íeão íe íaëo- æèëcÿ cëeäóþùèé ïpèíèìaeìûé cèìâoë.  Ïocëe
òoão êaê cèìâoë c÷èòaí,  áèò 0 oïÿòü còaíoâèòcÿ  paâíûì  0  è  ocòaeòcÿ
òaêoâûì, ïoêa íe ïpèáóäeò íoâûé cèìâoë.
   Xoòÿ çäecü oá ýòoì  íe  ãoâopèëocü,  ío  êoììóíèêaöèoííûe  ïpoöeäópû
oáû÷ío  coçäaþò öèêëè÷ecêèé áóôep äëÿ cáopa ïocòóïaþùèx cèìâo- ëoâ.  Bû
äoëæíû òaêæe çíaòü,  ÷òo ecëè ïocòóïaþùèe äaííûe ïoäaâaòü ía  ýêpaí  co
cêopocòüþ 1200 áoä, òo ïpoöeäópa cäâèãa ýêpaía BIOS íe áóäeò ócïe- âaòü
è ïpoèçoéäeò ïepeïoëíeíèe.  Ïpocòoe  peøeíèe  ýòèx  ïpoáëeì  cocòoèò  â
ècïoëüçoâaíèè êoììóíèêaöèoííoão ïpepûâaíèÿ.
   Cëeäóþùèé ïpèìep ÷acòè÷ío äóáëèpóeò coäepæèìoe ïpeäûäóùeão  paçäeëa,
oòíocÿùeãocÿ  ê ïepeäa÷e cèìâoëoâ.  Kaê è â òoì cëó÷ae êoä ía÷èíaeòcÿ c
áecêoíe÷íoão öèêëa.

KEEP_TRYING:   MOV  DX,BASE_ADDRESS   ;áaçoâûé aäpec
   ADD  DX,5           ;óêaçûâaeì ía peãècòp còaòóca ëèíèè
   IN   AL,DX          ;ïoëó÷aeì áaéò còaòóca
   TEST AL,00011110B   ;ïpoâepÿeì ía oøèáêó
   JNZ  ERROR_ROUTINE  ;ecëè äa, òo ía oápaáoòêó oøèáêè

   TEST AL,00000001B   ;ïpoâepÿeì ïoëó÷eíû ëè äaííûe
   JNZ  RECEIVE        ;ía ïpoöeäópó ïpèeìa äaííûx
   TEST AL,00100000B   ;ïpoâepÿeì ãoòoâíocòü ê ïepeäa÷e
   JZ   KEEP_TRYING    ;ecëè íeò, òo ê ía÷aëó öèêëa
    .
   (çäecü pacïoëoæeía ïpoöeäópa ïepeäa÷è - cì. [7.1.6])
    .
;---ïoëó÷aeì äaííûe è âûâoäèì èx ía ýêpaí
RECEIVE:   MOV  DX,BASE_ADDRESS        ;áaçoâûé aäpec
   IN   AL,DX          ;÷èòaeì ïoëó÷eííûé cèìâoë
   CMP  AL,19          ;ïpoâepêa ía XOFF
   JE   XOFF_ROUTINE   ;
    .
   (è ò.ä.)
    .
   MOV  DL,AL          ;ãoòoâèì cèìâoë äëÿ âûâoäa ía ýêpaí
   MOV  AH,2           ;ôóíêöèÿ âûâoäa cèìâoëa
   INT  21H            ;âûâoäèì eão
   JMP  SHORT KEEP_TRYING   ;âoçâpaùaeìcÿ ía ía÷aëo öèêëa

  8. Ïocûëêa/ïoëó÷eíèe äaííûx c ïoìoùüþ êoììóíèêaöèoííoão ïpepûâaíèÿ.

   Xopoøaÿ êoììóíèêaöèoííaÿ ïpoãpaììa èìeeò cëèøêoì ìíoão paáoòû, ÷òoáû
ïocâÿòèòü  ceáÿ öeëèêoì ââoäó/âûâoäó.  Ïocòóïaþùèe äaííûe äoëæíû aíaëè-
çèpoâaòücÿ,  ïepeäaâaeìûe äaííûe äoëæíû  coáèpaòücÿ,  a  áoëüøèe  áëoêè
äaííûx  ìoãóò  çaïècûâaòücÿ  ía  äècê  èëè  c÷èòûâaòücÿ c íeão.  Koììó-
íèêaöèoííoe ïpepûâaíèe ïoçâoëÿeò ïpoãpaììe  íe  òpaòèòü  ía  ââoä/âûâoä
áoëüøe   âpeìeíè,  ÷eì  oí  òoão  òpeáóeò.  Haïpèìep,  ïocëe  ócòaíoâêè
ïpepûâaíèÿ,  óïpaâëeíèe ïepeäaeòcÿ ïpoöeäópe ïepe- äa÷è äaííûç òoëüêo â
òoì  cëó÷ae,  êoãäa  peãècòp  xpaíeíèÿ  ïepeäaò÷èêa ïócò è âoçâpaùaeòcÿ
ïpoãpaììe,  êaê òoëüêo ïocëaí áaéò äaííûx,  ïoçâoëÿÿ eé ïpoäoëæaòü câoþ
paáoòó  äo  òex  ïop,  ïoêa peãècòp xpaíeíèÿ ïepeäaò÷èêa íe áóäeò cíoâa
ãoòoâ.
   IBM PC   oòâoäèò  äâa  aïïapaòíûx  ïpepûâaíèÿ  äëÿ  êoììóíèêaöèoííûx
êaíaëoâ,  íoìep 3 (COM1) è 4 (COM2).  Mèêpocxeìa UART 8250 äoïócêaeò  4

                                     - 12 -
êëacca  ïpepûâaíèé  äëÿ êaæäoão êaíaëa,  ècïoëüçóÿ cëe- äóþùèe äâoè÷íûe
êoäoâûe ÷ècëa:

   00     èçìeíeíèe â peãècòpe còaòóca ìoäeìa
   01     peãècòp xpaíeíèÿ ïepeäaò÷èêa ïócò
   10     ïoëó÷eíû äaííûe
   11     oøèáêa ïpèeìa, èëè ïoëó÷eío ócëoâèe ïepepûâa

  Ýòè êoäû  coäepæaòcÿ â áèòax 2-1 peãècòpa èäeíòèôèêaöèè ïpepûâa- íèÿ,
aäpec ïopòa êoòopoão ía  2  áoëüøe,  ÷eì  áaçoâûé  aäpec  ècïoëüçóeìoão
êoììóíèêaöèoííoão  aäaïòepa.  Áèò  0 ýòoão peãècòpa ócòaíaâëèâaeòcÿ ïpè
âoçíèêíoâeíèè ïpepûâaíèÿ,  a ocòaëüíûe áèòû íe èc- ïoëüçóþòcÿ è  âceãäa
paâíû 0.
   ×òoáû âûápaòü oäío èëè áoëee ïpepûâaíèé,  íaäo  çaïpoãpaììèpo-  âaòü
peãècòp  paçpeøeíèÿ  ïpepûâaíèÿ,  aäpec  êoòopoão  ía 1 áoëüøe áaçoâoão
aäpeca. Çía÷eíèe eão áèòoâ òaêoe:

áèò 0     1 = ïpepûâaíèe ïpè ïoëó÷eíèè äaííûx
    1     1 = ïpepûâaíèe êoãäa peãècòp xpaíeíèÿ ïepeäaò÷èêa ïócò
    2     1 = ïpepûâaíèe ïpè oøèáêe ïpèeìa äaííûx
    3     1 = ïpepûâaíèe ïpè èçìeíeíèè peãècòpa còaòóca ìoäeìa
  7-4     íe ècïoëüçóþòcÿ, âceãäa 0

  Koãäa oäío èç ýòèx coáûòèé  ïpoècxoäèò,  òo  èíèöèèpóeòcÿ  aïïapaòíoe
ïpepûâaíèe,  âoçíèêaþùee  â  ìèêpocxeìe  oápaáoòêè  ïpepûâaíèé  8259 ïo
êaíaëó 3  äëÿ  COM1  è  ïo  êaíaëó  4  äëÿ  COM2.  Ïpoöeäópa  oápaáoòêè
ïpepûâaíèé   ïepeäaeò   óïpaâëeíèe  òoìó  êoäó,  ía  êoòopûé  óêaçûâaeò
cooòâeòcòâóþùèé  âeêòop  ïpepûâaíèÿ.  Ïocêoëüêó  ýòo  aïïapaòíoe   ïpe-
pûâaíèe,   òo  oío  ìoæeò  áûòü  ìacêèpoâaío.  Ïoìíèòe,  ÷òo  ïpoöeäópa
oápaáoòêè ïpepûâaíèÿ äoëæía çaâepøaòücÿ  còaíäapòíûì  êoäoì  âûxoäa  èç
aïïapaòíoão  ïpepûâaíèÿ  MOV  AL,20H/OUT 20H,AL.  Ha pèc.  7-3 ïoêaçaío
êoììóíèêaöèoííoe ïpepûâaíèe.
   Ëþáoe ÷ècëo  òèïoâ ïpepûâaíèÿ ìoæeò áûòü paçpeøeío oäíoâpeìeíío.  Ho
ecëè paçpeøeí áoëee ÷eì oäèí òèï,  òo  ïpoöeäópa  oápaáoòêè  ïpepûâaíèÿ
äoëæía  caìa  oïpeäeëÿòü êaêoé èç òèïoâ ïpepûâaíèÿ ïpoèçoøeë,  ïpoâepÿÿ
peãècòp èäeíòèôèêaöèè ïpepûâaíèÿ.  Oäíoâpeìeíío ìoãóò ïpoècxoäèòü áoëee
÷eì oäío ïpepûâaíèe,  ïoýòoìó áèò 0 pe- ãècòpa èäeíòèôèêaöèè cooáùaeò o
òoì,  ÷òo  ïocòóïèëo  eùe  oäío  ïpe-  pûâaíèe.  Koãäa  äâa  èëè  áoëee
ïpepûâaíèé   ïocòóïèëo   â  oäèí  è  òoò  æe  ìoìeíò  âpeìeíè,  òo  oíè
oápaáaòûâaþòcÿ  â  ïopÿäêe,  óêaçaííoì   â   íèæeïpèâeäeííoé   òaáëèöe.
Äoáaâo÷íûe  ïpepûâaíèÿ äoëæíû áûòü oápa- áoòaíû äo çaâepøeíèÿ ïpoöeäópû
oápaáoòêè ïpepûâaíèÿ.  Ócëoâèÿ ïpeäøecòâóþùèx ïpepûâaíèé "oòìeíÿþòcÿ" c
ïoìoùüþ äeécòâèé, ïpèâeäeííûx â ïpaâoì còoëáöe cëeäóþùeé òaáëèöû:

Koä             Tèï               Äeécòâèÿ äëÿ "cápoca"

 11       oøèáêa èëè ïepepûâ     ÷òeíèe peãècòpa còaòóca ëèíèè
 10       ïoëó÷eíû äaííûe        ÷òeíèe peãècòpa ïpèeìíèêa äaííûx
 01       ïepeäaò÷èê ãoòoâ       âûâoä cèìâoëa â peãècòp xpaíeíèÿ
                                 ïepeäaò÷èêa
 00    èçìeíeíèe còaòóca ìoäeìa  ÷òeíèe peãècòpa còaòóca ìoäeìa

   Hèçêèé ópoâeíü.

   Boò  oáùaÿ  ôopìa ïpoãpaììû,  oápaáaòûâaþùeé  êoììóíèêaöèoííûe
ïpepûâaíèÿ:

;---ócòaíoâêa âeêòopa êoììóíèêaöèoííoão ïpepûâaíèÿ
   PUSH DS                  ;coxpaíÿeì DS

                                     - 13 -
   MOV  DX,OFFSET IO_INT    ;DS:DX óêaçûâaþò ía ïpoöeäópó
   MOV  AX,SEG IO_INT       ;
   MOV  DS,AX               ;
   MOV  AL,0BH              ;íoìep âeêòopa äëÿ COM1
   MOV  AH,25H              ;ôóíêöèÿ èçìeíeíèÿ âeêòopa
   INT  21H                 ;ìeíÿeì âeêòop ïpepûâaíèÿ
;---èíèöèaëèçaöèÿ peãècòpa paçpeøeíèÿ ïpepûâaíèÿ (COM1)
   MOV  AX,40H              ;DS óêaçûâaeò ía äaííûe BIOS
   MOV  DS,AX               ;
   MOV  DX,DS:[0]           ;ïoëó÷aeì áaçoâûé aäpec COM1
   INC  DX                  ;óêaçûâaeì ía peãècòp paçpeøeíèÿ
   MOV  AL,3                ;ïpepûâaíèé è paçpeøaeì ïpepûâaíèÿ
   OUT  DX,AL               ;ïpèeìa è ïepeäa÷è
   POP  DS                  ;âoccòaíaâëèâaeì peãècòp

;---ïpoöeäópa oápaáoòêè ïpepûâaíèÿ - cía÷aëa oïpeäeëÿeì eão òèï
IO_INT      PROC FAR
NEXT_INT:   MOV  DX,BASEADDRESS     ;áaçoâûé aäpec
   INC  DX                  ;óêaçûâaeì ía peãècòp èäeíòèôèêaöèè
   INC  DX                  ;ïpepûâaíèÿ
   IN   AL,DX               ;÷èòaeì eão çía÷eíèe
   TEST AL,10B              ;ýòo ïpepûâaíèe ïepeäaò÷èêa?
   JNZ  TRANSMIT            ;ecëè äa, òo ía ïepeäa÷ó

RECEIVE:                    ;èía÷e ía ïpèeì
   .
   .
   JMP SHORT ANOTHER        ;ïpoâepÿeì íeò ëè äpóãoão ïpepûâaíèÿ

TRANSMIT:                   ;çäecü êoä äëÿ ïepeäa÷è
   .
   .

;---ïepeä âûxoäoì, ïpoâepÿeì íeò ëè äpóãoão ïpepûâaíèÿ
ANOTHER:   MOV  DX,BASEADDRESS       ;áaçoâûé aäpec
   INC  DX                  ;óêaçûâaeì ía peãècòp èäeíòèôèêaöèè
   INC  DX                  ;ïpepûâaíèÿ
   IN   AL,DX               ;÷èòaeì eão çía÷eíèe
   TEST AL,1                ;ïpoâepÿeì áèò 1
   JNZ  NEXT_INT            ;ecëè oí ócòaíoâëeí, òo ía ía÷aëo
   MOV  AL,20H              ;èía÷e êoä çaâepøeíèÿ aïïapaòíoão
   OUT  20H,AL              ;ïpepûâaíèÿ
   IRET
IO_INT      ENDP
[ Íàçàä | Îãëàâëåíèå | Äàëåå ]










helloworld.ru © 2001-2021
Âñå ïðàâà çàùèùåíû