Jozveban - Ir Elegram - Me/jozveban T Ir/sopnuu App. S
Jozveban - Ir Elegram - Me/jozveban T Ir/sopnuu App. S
آیا میدانستید با عضویت رد سایت زجوه بان میتوانید هب صورت رای گان زجوات و وهن
ن
سواالت دا ش گاهی را دانلود کنید ؟؟
👇👇👇👇👇👇👇👇👇👇👇👇👇👇
Jozveban.ir
telegram.me/jozveban
sapp.ir/sopnuu
ﺑﺴﻤﻪ ﺗﻌﺎﻟﻲ
ﮔﺮﭼﻪ ﺗﻌﺮﻳﻒ دوم ﺗﺎ ﺣﺪي درﺳﺖ اﺳﺖ ،اﻣﺎ ﺑﻪﻃﻮر دﻗﻴﻖﺗﺮ از دﻳﺪ ﻣﺎ ،ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ داراي ﺗﻌﺮﻳﻒ ﻣﺸﺨﺺ و ﻣﻌﻴﻨﻲ اﺳﺖ :ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ
ﻧﻮع ﺧﺎﺻﻲ از ﺑﺮﻧﺎﻣﻪﺳﺎزي اﺳﺖ ﻛﻪ ﻧﻴﺎزﻣﻨﺪ اﻃﻼع از ﺟﺰﺋﻴﺎت ﻓﻨﻲ ﺳﻴﺴﺘﻢ ﻣﻮرد ﻧﻈﺮ و دﺳﺘﺮﺳﻲ و ﻣﺪﻳﺮﻳﺖ ﻣﻨﺎﺑﻊ ﺳﺨﺖاﻓﺰاري ﺳﻴﺴﺘﻢ
ﺑﻪﺻﻮرت دﻟﺨﻮاه اﺳﺖ .اﻳﻦ ﻧﻮع ﺑﺮﻧﺎﻣﻪﺳﺎزي ﻋﻤﻮﻣﺎً ﺑﺮاي ﻧﻮﺷﺘﻦ ﻧﺮماﻓﺰارﻫﺎي ﺳﻴﺴﺘﻤﻲ 1ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﻲﮔﻴﺮد.
ﺑﺮﻧﺎﻣﻪﺳﺎزي ﻛﺎرﺑﺮدي 2در ﻣﻘﺎﺑﻞ ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ :ﺑﺮﻧﺎﻣﻪﺳﺎزي ﻛﺎرﺑﺮدي ﺷﺎﻣﻞ ﻣﺪﻳﺮﻳﺖ و اراﺋﻪي اﻃﻼﻋﺎت در ﻗﺎﻟﺐ ﻳﻚ ﺑﺮﻧﺎﻣﻪي ﻛﺎﻣﭙﻴﻮﺗﺮي
ﺑﻮده و ﻧﻴﺎزﻣﻨﺪ ﻧﮕﻬﺪاري اﻃﻼﻋﺎت در ﻗﺎﻟﺐ ﺳﺎﺧﺘﺎرﻫﺎي دادهاي )ﻧﻈﻴﺮ آراﻳﻪ ،رﻛﻮرد و ﻏﻴﺮه( و ﭘﺮدازش آﻧﻬﺎ اﺳﺖ .اﻟﮕﻮرﻳﺘﻢﻫﺎي ﻣﻮرد اﺳﺘﻔﺎده در ﺑﺮﻧﺎﻣﻪﺳﺎزي ﻛﺎرﺑﺮدي
ﻣﺴﺘﻘﻞ از ﺳﻴﺴﺘﻢ 3ﺑﻮده و ﺑﺮاي اﻏﻠﺐ ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎ ﻗﺎﺑﻞ ﺗﻌﺮﻳﻒ ﻫﺴﺘﻨﺪ .اﻣﺎ ،روﺷﻲ ﻛﻪ اﻃﻼﻋﺎت ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﻣﻨﺘﻘﻞ ﻣﻲﺷﻮد و ﻃﺮﻳﻘﻲ ﻛﻪ اﻃﻼﻋﺎت ﻧﻤﺎﻳﺶ داده ﻣﻲﺷﻮﻧﺪ
ﻳﺎ ﭼﺎپ ﻣﻲﺷﻮﻧﺪ ،واﺑﺴﺘﻪ ﺑﻪ ﺳﻴﺴﺘﻢ 4اﺳﺖ .در ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ ،ﻛﻨﺘﺮل ﻫﺮﻧﻮع ﺳﺨﺖاﻓﺰاري ﻛﻪ اﻃﻼﻋﺎت را ﺑﻪ ﻛﺎﻣﭙﻴﻮﺗﺮ ﻣﻲﻓﺮﺳﺘﺪ ﻳﺎ از آن درﻳﺎﻓﺖ ﻣﻲﻛﻨﺪ ،اﻧﺠﺎم
ﻣﻲﺷﻮد .ﺑﺮاي ﭘﺮدازش اﻳﻦ اﻃﻼﻋﺎت ﻧﻴﺎز ﺑﻪ ﺑﺮﻧﺎﻣﻪﻫﺎي ﻛﺎرﺑﺮدي ﻫﺴﺘﻴﻢ .از اﻳﻦرو ،ﺑﺮاي ﺑﻬﺮهﺑﺮداري از ﺳﺨﺖاﻓﺰار ﻛﺎﻣﭙﻴﻮﺗﺮ ،ﻫﺮ دو ﻧﻮع ﺑﺮﻧﺎﻣﻪﺳﺎزي ﻻزم ﻫﺴﺘﻨﺪ.
2-1ﻣﺪل ﺳﻪ ﻻﻳﻪاي
ﻣﻬﻤﺘﺮﻳﻦ ﻫﺪف ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ ،دﺳﺘﺮﺳﻲ و ﻣﺪﻳﺮﻳﺖ ﺳﺨﺖاﻓﺰار ﻛﺎﻣﭙﻴﻮﺗﺮ اﺳﺖ .ﻧﻮعِ ﺳﻴﺴﺘﻢِ ﻛﺎﻣﭙﻴﻮﺗﺮي ﻛﻪ ﻣﻮرد ﻧﻈﺮ ﻣﺎ اﺳﺖ ،ﻛﺎﻣﭙﻴﻮﺗﺮ
ﺷﺨﺼﻲ) 5(PCاﺳﺖ .اﻳﻦ ﻧﻮع ﻛﺎﻣﭙﻴﻮﺗﺮ داراي ﻣﻌﻤﺎري ﺧﺎص ﺑﻮده و اﺟﺰاء ﺳﺨﺖاﻓﺰاري آن ﺑﺎ ﺳﺎﻳﺮ ﻣﻌﻤﺎريﻫﺎ ﻣﺘﻔﺎوت اﺳﺖ .ﻧﻮﻋﻲ از ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ ﻛﻪ ﻣﻮرد
ﻧﻈﺮ ﻣﺎ اﺳﺖ ،ﺑﺮﻧﺎﻣﻪﺳﺎزي ﻫﻤﻴﻦ ﻧﻮع ﺳﻴﺴﺘﻢ ﻛﺎﻣﭙﻴﻮﺗﺮي ﺑﻮده و ﻫﺪف آن دﺳﺘﺮﺳﻲ و ﻣﺪﻳﺮﻳﺖ ﺳﺨﺖاﻓﺰار PCاﺳﺖ.
در ﻣﺤﻴﻂ ،PCدﺳﺘﺮﺳﻲ ﺑﻪ ﺳﺨﺖاﻓﺰار از ﻃﺮﻳﻖ ROM-BIOSﻳﺎ DOSﻧﻴﺰ اﻣﻜﺎن ﭘﺬﻳﺮ اﺳﺖ ،ROM-BIOS .ﻣﺨﻔﻒ Read Only
Memory-Basic Input/output Systemاﺳﺖ و DOSﻫﻢ ﻣﺨﻔﻒ Disk Operating Systemاﺳﺖ BIOS .و DOSواﺳﻄﻬﺎي ﻧﺮماﻓﺰاري6
ﻫﺴﺘﻨﺪ ﻛﻪ ﺑﻪﻃﻮر ﺧﺎص ﺑﺮاي ﻣﺪﻳﺮﻳﺖ ﺳﺨﺖاﻓﺰار اﻳﺠﺎد ﺷﺪهاﻧﺪ .در ﺷﻜﻞ ) (1-1ﻣﺪﻟﻲ ﺳﻪﻻﻳﻪاي از ارﺗﺒﺎط ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﺎ BIOSو DOSاراﺋﻪ ﺷﺪه اﺳﺖ.
ﺷﻜﻞ :1-1ﻣﺪل ﺳﻪﻻﻳﻪاي
Program
DOS
BIOS
Hardware
ﻣﻬﻤﺘﺮﻳﻦ ﻣﺰﻳﺖ اﺳﺘﻔﺎده از DOSﻳﺎ BIOSاﻳﻦ اﺳﺖ ﻛﻪ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﻧﻴﺎزﻣﻨﺪ دﺳﺘﺮﺳﻲ ﻣﺴﺘﻘﻴﻢ ﺑﻪ ﺳﺨﺖاﻓﺰار ﻧﻴﺴﺖ و در ﻋﻮض ﻳﻚ روال BIOS 7ﻳﺎ
DOSرا ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﻛﻨﺪ ﺗﺎ ﻛﺎر ﻣﻮردﻧﻈﺮ را ﺑﺮاﻳﺶ اﻧﺠﺎم دﻫﺪ .رواﻟﻬﺎي BIOSﭘﺲ از اﻧﺠﺎم ﻳﻚ ﻛﺎر ،اﻃﻼﻋﺎت وﺿﻌﻴﺖ 8را ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺑﺮﻣﻲﮔﺮداﻧﻨﺪ ﺗﺎ ﺑﺮﻧﺎﻣﻪ از
ﻧﺘﻴﺠﻪي ﻋﻤﻞ آﮔﺎه ﺷﻮد .اﻳﻦ واﺳﻄﻬﺎ ﺑﺎﻋﺚ ﻣﻲﺷﻮﻧﺪ ﻛﻪ ﺑﺮاي ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪﻫﺎ ،ﻫﺰﻳﻨﻪ و زﻣﺎن ﻛﻤﺘﺮي ﺻﺮف ﺷﻮد.
_________________________________________________________________________________
system softwares ١
application programming ٢
system independent ٣
system dependent ٤
Personal Computer ٥
software interfaces ٦
routine ٧
status information ٨
2-1 ﻓﺼﻞ :1ﻣﺒﺎﻧﻲ ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ
ﻣﺰﻳﺖ دﻳﮕﺮ اﺳﺘﻔﺎده از واﺳﻄﻬﺎي ﻓﻮق ،ﻋﺪم واﺑﺴﺘﮕﻲ ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﻣﺸﺨﺼﺎت ﻓﻴﺰﻳﻜﻲ ﺳﺨﺖاﻓﺰار اﺳﺖ .ﺑﺮاي ﻣﺜﺎل ،ﻧﻤﺎﻳﺶ اﻃﻼﻋﺎت ﺑﺮ روي ﺻﻔﺤﻪي ﻧﻤﺎﻳﺶ
ﺑﺎ اﺳﺘﻔﺎده از ﻛﺎرﺗﻬﺎي وﻳﺪﺋﻮﻳﻲ 1ﺗﻚ رﻧﮓ 2و رﻧﮕﻲ )ﻧﻈﻴﺮ SuperVGA ،VGA ،EGAو ﻏﻴﺮه( ﺑﺎ ﻫﻢ داراي ﺗﻔﺎوﺗﻬﺎي اﺳﺎﺳﻲ اﺳﺖ .اﮔﺮ ﺑﺮﻧﺎﻣﻪ ﺑﺨﻮاﻫﺪ ﺧﻮدش
اﻃﻼﻋﺎت را ﺑﺎ ﺑﺮﻧﺎﻣﻪﺳﺎزي ﻛﺎرت وﻳﺪﺋﻮﻳﻲ ،ﻧﻤﺎﻳﺶ دﻫﺪ ،ﺑﺎﻳﺪ رواﻟﻬﺎي ﻣﺠﺰاﻳﻲ ﺑﺮاي ﻫﺮ ﻛﺪام از اﻧﻮاع ﻛﺎرت وﻳﺪﺋﻮﻳﻲ ﻧﻮﺷﺘﻪ ﺷﻮد .اﻣﺎ اﮔﺮ از رواﻟﻬﺎي BIOSاﺳﺘﻔﺎده
ﻧﻤﺎﻳﺪ ،ﺑﺮﻧﺎﻣﻪ ﻣﺴﺘﻘﻞ از ﻧﻮع ﻛﺎرت وﻳﺪﺋﻮﻳﻲ ﺧﻮاﻫﺪ ﺑﻮد .ﭼﻮن اﻧﻮاع ﻣﺨﺘﻠﻒ ﻛﺎرﺗﻬﺎي وﻳﺪﺋﻮﻳﻲ ﺑﻮﺳﻴﻠﻪي BIOSﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲﺷﻮﻧﺪ.
ROM-BIOS 3-1
در ﺷﻜﻞ ) (1-1ﻳﻚ ﻣﺪل ﺳﻪﻻﻳﻪاي را ﻣﺸﺎﻫﺪه ﻣﻲﻛﻨﻴﺪ ﻛﻪ واﺳﻂ BIOSاز DOSﺑﻪ ﺳﺨﺖاﻓﺰار ﻧﺰدﻳﻚﺗﺮ اﺳﺖ BIOS .ﺗﻮاﺑﻌﻲ را ﺑﺮاي دﺳﺘﺮﺳﻲ و
ﻣﺪﻳﺮﻳﺖ ﻟﻮازم 3زﻳﺮ ﻓﺮاﻫﻢ ﻣﻲﻛﻨﺪ:
دﻳﺴﻜﺖ، .3
ﮔﺮﭼﻪ ﻣﻲﺗﻮان ﺑﺪون اﺳﺘﻔﺎده از BIOSﻧﻴﺰ ﺑﺎ ﺳﺨﺖاﻓﺰار ارﺗﺒﺎط ﺑﺮﻗﺮار ﻧﻤﻮد ،اﻣﺎ ﻋﻤﻮﻣﺎً ﺑﻬﺘﺮ اﺳﺖ از ﻃﺮﻳﻖ اﻳﻦ ﺗﻮاﺑﻊ اﺳﺘﺎﻧﺪارد ﺑﻪ ﻛﺎﻣﭙﻴﻮﺗﺮ دﺳﺘﺮﺳﻲ ﭘﻴﺪا
ﻛﺮد ،ﺗﺎ ﺑﺮﻧﺎﻣﻪ ﻣﺴﺘﻘﻞ از ﺳﺨﺖاﻓﺰار ﺑﺎﺷﺪ.
BIOSدر ﻳﻚ ﺗﺮاﺷﻪي ﺣﺎﻓﻈﻪ 8از ﻧﻮع ROMدر ﺑﺮد اﺻﻠﻲ 9ﺳﻴﺴﺘﻢ PCوﺟﻮد دارد .ﺑﻼﻓﺎﺻﻠﻪ ﭘﺲ از روﺷﻦ ﺷﺪن ﻛﺎﻣﭙﻴﻮﺗﺮ ،ﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ اﺳﺖ.
ﺗﻮاﺑﻊ ﻣﻮﺟﻮد در ،BIOSوﻇﺎﻳﻘﻲ ﻧﻈﻴﺮ آزﻣﻮن ﺣﺎﻓﻈﻪ و ﺑﺮرﺳﻲ ﻟﻮازم ﺟﺎﻧﺒﻲ را ﭘﺲ از روﺷﻦ ﺷﺪن ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﺮﻋﻬﺪه دارﻧﺪ .ﺑﻪ ﻫﻤﺮاه ﻫﺮ ﻧﻮع ﺟﺪﻳﺪ ﺑﺮد اﺻﻠﻲ PCو ﻣﺪل
،CPUﻧﮕﺎرﺷﻬﺎي 10ﺟﺪﻳﺪﺗﺮي از BIOSﻣﻌﺮﻓﻲ ﻣﻲﺷﻮﻧﺪ .از ﻣﻌﺮوﻓﺘﺮﻳﻦ اﻧﻮاع BIOSﻣﻲﺗﻮان از Awardو AMIﻧﺎم ﺑﺮد.
DOS 4-1
DOSﻛﻪ در ﺣﻘﻴﻘﺖ وﻇﻴﻔﻪي ﻳﻚ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ را ﺑﺮﻋﻬﺪه دارد ،ﺑﻮﺳﻴﻠﻪي BIOSاز روي دﻳﺴﻚ در ﺣﺎﻓﻈﻪي ﻛﺎﻣﭙﻴﻮﺗﺮ ﻗﺮار داده ﺷﺪه و اﺟﺮا ﻣﻲﺷﻮد .از
ﺟﻤﻠﻪ ﺗﻮاﺑﻌﻲ ﻛﻪ در DOSﻓﺮاﻫﻢ ﺷﺪه اﺳﺖ ،ﺗﻮاﺑﻌﻲ ﻫﺴﺘﻨﺪ ﻛﻪ اﻣﻜﺎن ﻛﺎر ﺑﺎ دﻳﺴﻚ را ﻓﺮاﻫﻢ ﻣﻲﻧﻤﺎﻳﻨﺪ و اﻳﻦ اﻣﺮ دﻟﻴﻞ ﻧﺎمﮔﺬاري DOSاﺳﺖ .ﻳﻌﻨﻲ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻠﻲ ﻛﻪ
ﺗﻮاﻧﺎﻳﻲ ﻛﺎر ﺑﺎ دﻳﺴﻚ را دارد.
در ﻛﻨﺎر DOS ،BIOSﻧﻴﺰ ﺗﻮاﺑﻌﻲ را ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﺳﺨﺖاﻓﺰار ﻓﺮاﻫﻢ ﻣﻲﻛﻨﺪ .از آﻧﺠﺎﻳﻲ ك DOSﺑﻪ ﺳﺨﺖاﻓﺰار ﺑﻪ ﻋﻨﻮان ﻟﻮازم ﻣﻨﻄﻘﻲ 11ﻧﮕﺎه
ﻣﻲﻛﻨﺪ ،ﻧﻪ ﻣﺜﻞ BIOSﺑﻪ ﻋﻨﻮان ﻟﻮازم ﻓﻴﺰﻳﻜﻲ ،ﻟﺬا ﺗﻮاﺑﻊ DOSﺳﺨﺖاﻓﺰار را ﺑﻪﻃﺮﻳﻘﻲ ﻣﺘﻔﺎوت ﻣﺪﻳﺮﻳﺖ ﻣﻲﻛﻨﻨﺪ .ﺑﺮاي ﻣﺜﺎل BIOS ،ﺑﻪ ﮔﺮداﻧﻨﺪهﻫﺎي دﻳﺴﻚ12
ﺑﻪﻋﻨﻮان ﮔﺮوﻫﻲ از ﺷﻴﺎرﻫﺎ 13و ﺑﺨﺸﻬﺎ 14ﻧﮕﺎه ﻣﻲﻛﻨﺪ ،اﻣﺎ DOSآﻧﻬﺎ را ﺑﻪﻋﻨﻮان ﮔﺮوهﻫﺎﻳﻲ از ﻓﺎﻳﻠﻬﺎ و ﻓﻬﺮﺳﺖﻫﺎ 15ﻣﻲﺑﻴﻨﺪ.
_________________________________________________________________________________
video cards ١
monochrome ٢
devices ٣
harddisk ٤
serial ports ٥
parallel ports ٦
battery-operated real-time clock ٧
memory chip ٨
mother board ٩
version ١٠
logical devices ١١
disk drives ١٢
tracks ١٣
sectors ١٤
directory ١٥
3-1 ﻓﺼﻞ :1ﻣﺒﺎﻧﻲ ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ
اﮔﺮ ﺑﺨﻮاﻫﻴﺪ 1000ﻛﺎراﻛﺘﺮ اول ﻳﻚ ﻓﺎﻳﻞ را ﺑﺮ روي ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ﺑﺒﻴﻨﻴﺪ ،از ﻃﺮﻳﻖ BIOSاﮔﺮ ﻋﻤﻞ ﻛﻨﻴﺪ ،ﺑﺎﻳﺪ ﻣﻜﺎن ﻓﺎﻳﻞ ﺑﺮ روي دراﻳﻮ )ﺷﻤﺎره ﺷﻴﺎر و
ﺑﺨﺶ( را ﺑﻪ BIOSﺑﮕﻮﻳﻴﺪ .اﻣﺎ ﺑﺎ اﺳﺘﻔﺎده از ﺗﻮاﺑﻊ ،DOSﻛﺎﻓﻲ اﺳﺖ ﺑﻪ DOSﺑﮕﻮﻳﻴﻢ ﻛﻪ ﻓﺎﻳﻞ ﺑﺎ ﻧﺎم دادهﺷﺪه را در ﮔﺮداﻧﻨﺪهي A:ﻳﺎ C:ﺑﺎز ﻧﻤﻮده و ﻧﻤﺎﻳﺶ دﻫﺪ.
ﮔﺮﭼﻪ اﻏﻠﺐ اوﻗﺎت DOSاز ﻃﺮﻳﻖ BIOSﺑﻪ ﺳﺨﺖاﻓﺰار دﺳﺘﺮﺳﻲ دارد ،وﻟﻲ ﮔﺎﻫﻲ اوﻗﺎت ﻫﻢ ﺑﻪﺻﻮرت ﻣﺴﺘﻘﻴﻢ ﺑﺎ ﺳﺨﺖاﻓﺰار ارﺗﺒﺎط ﺑﺮﻗﺮار ﻣﻲﻛﻨﺪ.
اﻧﺘﺨﺎب DOSﻳﺎ BIOS؟ اﻳﻦ اﻧﺘﺨﺎب ﺑﻪ ﻧﻮع ﻛﺎرﺑﺮد ﺑﺴﺘﮕﻲ دارد .ﺑﺮاي ﻣﺜﺎل اﮔﺮ ﻣﻲﺧﻮاﻫﻴﺪ در ﺑﺮﻧﺎﻣﻪ ﺑﺎ ﻓﺎﻳﻞ ﻛﺎر ﻛﻨﻴﺪ ،ﺑﺎﻳﺪ از ﺗﻮاﺑﻊ DOSاﺳﺘﻔﺎده
ﻛﻨﻴﺪ .وﻟﻲ اﮔﺮ ﻣﻲﺧﻮاﻫﻴﺪ ﻳﻚ دﻳﺴﻜﺖ را ﻗﺎﻟﺐﺑﻨﺪي 2ﻛﻨﻴﺪ ،ﺑﺎﻳﺪ از ﺗﻮاﺑﻊ BIOSاﺳﺘﻔﺎده ﻛﻨﻴﺪ .ﻫﻢ ﺗﻮاﺑﻊ DOSو ﻫﻢ ﺗﻮاﺑﻊ ،BIOSدر ﺑﺮﺧﻲ اوﻗﺎت ﻛﻨﺪ ﻫﺴﺘﻨﺪ .زﻳﺮا
ﻣﺪل ﺳﻪﻻﻳﻪاي ﺷﻜﻞ ) (1-1و ﻧﻴﺰ ﻋﻤﻮﻣﻲ ﺑﻮدن ﺗﻮاﺑﻊ ،ﺑﺎﻋﺚ ﻋﺪم ﺑﻬﻴﻨﻪﺑﻮدن ﺗﻮاﺑﻊ اﻳﻦ واﺳﻄﻬﺎ ﻣﻲﺷﻮد .ﺣﺘﻲ ﺑﻪ اﻳﻦ دﻟﻴﻞ ﻫﻢ ﮔﺎﻫﻲ اوﻗﺎت ﻣﺠﺒﻮر ﺑﻪ ﺑﺮﻧﺎﻣﻪﺳﺎزي
ﻣﺴﺘﻘﻴﻢ ﺳﺨﺖاﻓﺰار ﻫﺴﺘﻴﻢ.
6-1ﺳﺨﺖاﻓﺰار PC
ﺑﻠﻮك دﻳﺎﮔﺮام اﺟﺰاء ﺳﺨﺖاﻓﺰار PCدر ﺷﻜﻞ ) (2-1ﻧﻤﺎﻳﺶ داده ﺷﺪه اﺳﺖ:
Expansion Slots
Bus
ﭘﺮدازﻧﺪه CPU :در ،PCﻳﻜﻲ از رﻳﺰﭘﺮدازﻧﺪهﻫﺎي ﺳﺮي 80X86ﺳﺎﺧﺖ ﺷﺮﻛﺖ Intelاﺳﺖ .اوﻟﻴﻦ PCﺳﺎﺧﺖ ﺷﺮﻛﺖ IBMﺑﺎ ﻧﺎم System/23 •
DataMasterداراي رﻳﺰﭘﺮدازﻧﺪهي 8ﺑﻴﺘﻲ 8085ﺑﻮد .ﺳﭙﺲ ﺑﻪ ﺗﺮﺗﻴﺐ رﻳﺰﭘﺮدازﻧﺪهﻫﺎي 80486 ،80386 ،80286 ،8088 ،8086و Pentiumاز ﻃﺮف
ﺷﺮﻛﺖ Intelﻣﻌﺮﻓﻲ ﺷﺪﻧﺪ و اﻳﻦ ﭘﺮدازﻧﺪهﻫﺎ در ﻣﺪﻟﻬﺎي ﻣﺨﺘﻠﻒ ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎي ﺷﺨﺼﻲ ﺳﺎﺧﺖ ﺷﺮﻛﺖ IBMﻳﺎ ﺷﺮﻛﺘﻬﺎي دﻳﮕﺮ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﮔﺮﻓﺘﻨﺪ.
_________________________________________________________________________________
software library function ١
format ٢
4-1 ﻓﺼﻞ :1ﻣﺒﺎﻧﻲ ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ
ﮔﺬرﮔﺎه :1ﻳﻜﻲ از ﺑﺨﺸﻬﺎي اﺳﺎﺳﻲ ﺳﻴﺴﺘﻢ PCاﺳﺖ ﻛﻪ وﻇﻴﻔﻪي اﺗﺼﺎل اﺟﺰاء ﻣﺨﺘﻠﻒ آﻧﺮا دارد .ﮔﺬرﮔﺎه در ﺣﻘﻴﻘﺖ ﻳﻚ ﻛﺎﺑﻞ ﺑﺎ 62ﺧﻂ اﺗﺼﺎل اﺳﺖ .ﭘﺮدازﻧﺪه •
از ﻃﺮﻳﻖ ﮔﺬرﮔﺎه اﻃﻼﻋﺎت را از ﺣﺎﻓﻈﻪ ﺧﻮاﻧﺪه و ﭘﺮدازش ﻣﻲﻛﻨﺪ و دوﺑﺎره در آن ﻣﻲﻧﻮﻳﺴﺪ.
ﺗﺮاﺷﻪﻫﺎي ﭘﺸﺘﻴﺒﺎﻧﻲ :2ﭘﺮدازﻧﺪه ﺗﻮاﻧﺎﻳﻲ اﻧﺠﺎم ﻫﻤﻪي اﻋﻤﺎل ﻣﻮردﻧﻴﺎز در ﻳﻚ ﺳﻴﺴﺘﻢ ﻛﺎﻣﭙﻴﻮﺗﺮي را ﻧﺪارد .از اﻳﻦرو ﺗﺮاﺷﻪﻫﺎي ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻮرد ﻧﻴﺎز ﻫﺴﺘﻨﺪ ﺗﺎ •
اﻋﻤﺎﻟﻲ را ﻛﻪ ﭘﺮدازﻧﺪه ﻗﺎدر ﺑﻪ اﻧﺠﺎم آن ﻧﻴﺴﺖ ،ﺑﺮﻋﻬﺪه ﺑﮕﻴﺮﻧﺪ .اﻳﻦ ﺗﺮاﺷﻪﻫﺎ ﻛﻪ ﺑﻪ آﻧﻬﺎ ﻛﻨﺘﺮﻟﺮ 3ﻧﻴﺰ ﮔﻔﺘﻪ ﻣﻲﺷﻮد ،ﺑﺨﺸﻲ از ﺳﺨﺖاﻓﺰار را ﻛﻨﺘﺮل ﻣﻲﻛﻨﻨﺪ و
ﻛﺎرﻫﺎﻳﻲ را اﻧﺠﺎم ﻣﻲدﻫﻨﺪ و ﭘﺮدازﻧﺪه را ﺑﺮاي اﻧﺠﺎم ﻛﺎرﻫﺎي ﻣﻬﻤﺘﺮ آزاد ﻣﻲﮔﺬارﻧﺪ .ﺑﺮﺧﻲ از ﻣﻬﻤﺘﺮﻳﻦ اﻳﻦ ﺗﺮاﺷﻪﻫﺎ ﻛﻪ در ﺳﻴﺴﺘﻢ IBM PCوﺟﻮد داﺷﺖ ﻋﺒﺎرﺗﻨﺪ
از:
DMA :DMA Controller (8237) -ﻣﺨﻔﻒ Direct Memory Accessاﺳﺖ و اﻳﻦ ﺗﻜﻨﻴﻚ ﺑﻪ ﻟﻮازﻣﻲ ﻧﻈﻴﺮ دﻳﺴﻚ ﺳﺨﺖ اﺟﺎزه ﻣﻲدﻫﺪ
ﻛﻪ دادهﻫﺎ را ﺑﻪﻃﻮر ﻣﺴﺘﻘﻴﻢ ﺑﺮ روي ﺣﺎﻓﻈﻪ ﺑﻨﻮﻳﺴﻨﺪ .اﻳﻦ ﺗﻜﻨﻴﻚ ﺿﻤﻦ آﻧﻜﻪ ﺑﺎﻋﺚ ﻧﻘﻞ و اﻧﺘﻘﺎل ﺳﺮﻳﻊ دادهﻫﺎ ﺑﻴﻦ ﻟﻮازم و ﺣﺎﻓﻈﻪ ﻣﻲﺷﻮد ،ﺑﺎﻋﺚ آزاد ﻣﺎﻧﺪن
ﭘﺮدازﻧﺪه ﺑﺮاي اﻧﺠﺎم ﺳﺎﻳﺮ ﻛﺎرﻫﺎ ﻣﻲﺷﻮد.
:Interrupt Controller (8259) -وﻗﻔﻪ 4راﻫﻲ ﺑﺮاي آﮔﺎه ﻛﺮدن ﭘﺮدازﻧﺪه ﻧﺴﺒﺖ ﺑﻪ آﻣﺎدﮔﻲ ﻟﻮازم )ﻧﻈﻴﺮ دﻳﺴﻚ ﺳﺨﺖ ،ﺻﺤﻔﻪ ﻛﻠﻴﺪ و ﻏﻴﺮه( ﺑﺮاي
ﻧﻘﻞ و اﻧﺘﻘﺎل داده اﺳﺖ .ﺑﺎ اﺳﺘﻔﺎده از وﻗﻔﻪﻫﺎ ،ﻧﻴﺎز ﻧﻴﺴﺖ ﻛﻪ ﭘﺮدازﻧﺪه ﻣﻨﺘﻈﺮ آﻣﺎدهﺷﺪن ﻳﻚ وﺳﻴﻠﻪ ﺑﺮاي ﺗﺒﺎدل داده ﺑﺎﺷﺪ)ﺑﺎ روش ﺳﺮﻛﺸﻲ ،(5ﺑﻠﻜﻪ ﻫﺮ ﮔﺎه
وﺳﻴﻠﻪ آﻣﺎده ﺷﺪ ،ﻳﻚ ﺳﻴﮕﻨﺎل ﻛﻨﺘﺮﻟﻲ ﺑﻪ ﭘﺮدازﻧﺪه ﻣﻲﻓﺮﺳﺘﺪ و ﺑﺎﻋﺚ ﺗﻮﻗﻒ در ﻋﻤﻠﻴﺎت آن ﺷﺪه و درﺧﻮاﺳﺖ ﺳﺮوﻳﺴﻲ از ﭘﺮدازﻧﺪه ﻣﻲﻛﻨﺪ .ﻣﺜﻼً ﺑﺎ زدن ﻳﻚ
ﻛﻠﻴﺪ ،ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﻳﻚ ﺳﻴﮕﻨﺎل وﻗﻔﻪ ﺑﻪ ﭘﺮدازﻧﺪه ﻣﻲﻓﺮﺳﺘﺪ و زده ﺷﺪن ﻛﻠﻴﺪ را ﺑﻪ آن اﻃﻼع ﻣﻲدﻫﺪ .وﻗﻮع وﻗﻔﻪ از ﻃﺮف ﻟﻮازم ﻣﺨﺘﻠﻒ ﺑﺎﻳﺪ داراي ﻧﻈﻢ ﺑﺎﺷﺪ ﺗﺎ
ﺗﺪاﺧﻠﻲ ﺑﻴﻦ آﻧﻬﺎ ﭘﻴﺶ ﻧﻴﺎﻳﺪ و ﻣﺘﻨﺎﺳﺐ ﺑﺎ اﻟﻮﻳﺖ ﻟﻮازم ﺑﻪ آﻧﻬﺎ ﺳﺮوﻳﺲ داده ﺷﻮد .ﺗﺮاﺷﻪي 8259وﻇﻴﻔﻪي ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪﻫﺎي ﺳﺨﺖاﻓﺰاري را در ﺳﻴﺴﺘﻢ PC
ﺑﺮﻋﻬﺪه دارد.
:Programmable Peripheral Interface (8255) -اﻳﻦ ﺗﺮاﺷﻪ ﭘﺮدازﻧﺪه را ﺑﻪ ﻟﻮازم ﺟﺎﻧﺒﻲ ،ﻧﻈﻴﺮ ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﻳﺎ ﻣﻮﻟﺪ ﺻﻮت 6ﻣﺘﺼﻞ ﻣﻲﻛﻨﺪ و
ﻧﻘﺶ ﻳﻚ ﻣﻴﺎﻧﺠﻲ را ﺑﺎزي ﻣﻲﻛﻨﺪ.
:The Clock (8248) -اﮔﺮ ﭘﺮدازﻧﺪه را ﻣﻐﺰ ﺳﻴﺴﺘﻢ ﻛﺎﻣﭙﻴﻮﺗﺮي ﻓﺮض ﻛﻨﻴﻢ ،ﺳﺎﻋﺖ ﻗﻠﺐ آن ﺧﻮاﻫﺪ ﺑﻮد .اﻳﻦ ﻗﻠﺐ ﭼﻨﺪ ﻣﻴﻠﻴﻮن ﺑﺎر در ﺛﺎﻧﺒﻪ ﺿﺮﺑﺎن دارد
)ﻣﺜﻼً (233 MHZو وﺳﻴﻠﻪاي ﺑﺮاي ﻫﻤﺰﻣﺎنﺳﺎزي ﭘﺮدازﻧﺪه و ﻟﻮازم دﻳﮕﺮ ﺳﻴﺴﺘﻢ ﻛﺎﻣﭙﻴﻮﺗﺮي اﺳﺖ.
:The Timer (8253) -اﻳﻦ ﺗﺮاﺷﻪ ﺑﻪﻋﻨﻮان ﻳﻚ ﺷﻤﺎرﺷﮕﺮ و ﻧﮕﻬﺪارﻧﺪهي زﻣﺎن در ﺳﻴﺴﺘﻢ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﻲﮔﻴﺮد .اﻳﻦ ﺗﺮاﺷﻪ داراي ﺧﺮوﺟﻲﻫﺎﻳﻲ
اﺳﺖ ﻛﻪ ﺳﻴﮕﻨﺎﻟﻬﺎي اﻟﻜﺘﺮﻳﻜﻲ ﻣﻨﻈﻤﻲ را ﺻﺎدر ﻣﻲﻛﻨﺪ و ﺗﻨﺎوب آن ﻗﺎﺑﻞ ﺑﺮﻧﺎﻣﻪرﻳﺰي اﺳﺖ ،اﻳﻨﻜﻪ ﺳﻴﮕﻨﺎل ﺗﺎﻳﻤﺮ در ﭼﻪ ﻓﻮاﺻﻞ زﻣﺎﻧﻲ ﺻﺎدر ﺷﻮد-.
ﺣﻔﺮهﻫﺎي ﮔﺴﺘﺮش :7ﺑﺮﺧﻲ از ﺗﺮاﺷﻪﻫﺎي دﻳﮕﺮ ﻣﻮرد ﻧﻴﺎز در ﺳﻴﺴﺘﻢ PCدر اﻳﻦ ﻗﺴﻤﺖ ﻗﺮار داده ﻣﻲﺷﻮﻧﺪ .دو ﻣﻮرد ﻣﻬﻢ ﻋﺒﺎرﺗﻨﺪ از: •
:CRT Controller (6845) -اﻳﻦ ﺗﺮاﺷﻪ وﻇﻴﻔﻪي ﻛﻨﺘﺮل ﻟﻮﻟﻪي اﺷﻌﻪي ﻛﺎﺗﺪي 8را ﺑﺮ ﻋﻬﺪه دارد و در ﻛﺎرت وﻳﺪﺋﻮﻳﻲ ﻗﺮار دارد .وﻇﻴﻔﻪي اﻳﻦ ﻛﻨﺘﺮﻟﺮ،
ﻣﺪﻳﺮﻳﺖ و ﻛﺪﺑﻨﺪي ﻧﺤﻮهي ﻧﻤﺎﻳﺶ اﻃﻼﻋﺎت در ﺻﻔﺤﻪي ﻧﻤﺎﻳﺶ اﺳﺖ.
:Disk Controller (765) -اﻳﻦ ﻛﻨﺘﺮﻟﺮ ﻫﻢ در ﻗﺴﻤﺖ ﺣﻔﺮهﻫﺎي ﮔﺴﺘﺮش ﻧﺼﺐ ﻣﻲﺷﻮد و ﺗﻮﺳﻂ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﻧﺸﺎندﻫﻲ ﺷﺪه و ﮔﺮداﻧﻨﺪهي دﻳﺴﻚ را
ﻣﺪﻳﺮﻳﺖ ﻣﻲﻛﻨﺪ .ﺣﺮﻛﺖ دادن ﻫﺪ دﻳﺴﻚ ﺑﺮاي ﺧﻮاﻧﺪن و ﻧﻮﺷﺘﻦ اﻃﻼﻋﺎت در ﺑﺨﺸﻬﺎي ﻣﺨﺘﻠﻒ دﻳﺴﻚ ،وﻇﻴﻔﻪي اﻳﻦ ﻛﻨﺘﺮﻟﺮ اﺳﺖ.
ﺣﺎﻓﻈﻪ :در ﺳﻴﺴﺘﻤﻬﺎي PCدو ﻧﻮع ﺣﺎﻓﻈﻪ وﺟﻮد دارد .ﺣﺎﻓﻈﻪﻫﺎي ﻓﻘﻂ ﺧﻮاﻧﺪﻧﻲ ﻳﺎ ،9ROMﻛﻪ دادهﻫﺎ و ﻛﺪﻫﺎي ﻏﻴﺮﻗﺎﺑﻞ ﺗﻐﻴﻴﺮ در آن ﻧﮕﻬﺪاري ﻣﻲﺷﻮد و •
ﻧﻤﻮﻧﻪي ﻣﺸﺨﺺ آن ROM-BIOS ،اﺳﺖ .ﻧﻮع دوم ﺣﺎﻓﻈﻪ ،ﺣﺎﻓﻈﻪي ﺧﻮاﻧﺪﻧﻲ-ﻧﻮﺷﺘﻨﻲ اﺳﺖ ﻛﻪ ﺑﻪﺻﻮرت ﺗﺼﺎدﻓﻲ ﻗﺎﺑﻞ دﺳﺘﻴﺎﺑﻲ اﺳﺖ و ﺑﻪ آن 10RAM
ﮔﻔﺘﻪ ﻣﻲﺷﻮد .اﻳﻦ ﻧﻮع ﺣﺎﻓﻈﻪ ﻣﺤﻞ ﻧﮕﻬﺪاري دادهﻫﺎ و ﭘﺮدازش آﻧﻬﺎ ﺑﻮﺳﻴﻠﻪي ﭘﺮدازﻧﺪه اﺳﺖ .اوﻟﻴﻦ ﻧﻮع PCداراي 16KBﺣﺎﻓﻈﻪ ﺑﻮد و در PCﻫﺎي اﻣﺮوزي
اﻣﻜﺎن ﻗﺮار دادن ﭼﻨﺪ ﺻﺪ MBﺣﺎﻓﻈﻪ وﺟﻮد دارد .ﺗﺮاﺷﻪﻫﺎي ﺣﺎﻓﻈﻪ ﺑﻪ ﺻﻮرت ﻣﺎﺟﻮﻟﻬﺎﻳﻲ ﻫﺴﺘﻨﺪ ﻛﻪ در ﻣﻜﺎﻧﻬﺎي ﻣﺸﺨﺺ در ﺑﺮد اﺻﻠﻲ ﺳﻴﺴﺘﻢ ﻧﺼﺐ ﻣﻲﺷﻮﻧﺪ
و ﻗﺎﺑﻞ ﻛﻢ و زﻳﺎد ﺷﺪن ﻫﺴﺘﻨﺪ.
ﺳﻴﺴﺘﻢﻫﺎي ﻋﺎﻣﻞ ﻣﺨﺘﻠﻒ ﺗﻮاﻧﺎﻳﻲ اﺳﺘﻔﺎده از ﻫﻤﻪﻳﺎ ﺑﺨﺸﻬﺎﻳﻲ از ﺣﺎﻓﻈﻪ را دارﻧﺪ .ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ DOSﻧﻬﺎﻳﺘﺎً ﻣﻲﺗﻮاﻧﺪ 640KBﺣﺎﻓﻈﻪ را ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار
دﻫﺪ و اﮔﺮ ﻣﻘﺪار ﺣﺎﻓﻈﻪ ﺑﻴﺸﺘﺮ ﺑﺎﺷﺪ ،ﻣﺎﺑﻘﻲ ﺑﻼاﺳﺘﻔﺎده ﻣﻲﻣﺎﻧﺪ .در ،PCﺑﺮاي ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪ و ﺗﺨﺼﻴﺺ آن ﺑﻪ ﺑﺮﻧﺎﻣﻪﻫﺎ ،ﺣﺎﻓﻈﻪﺑﻪ ﻗﻄﻌﻪﻫﺎي 64KB 11ﺗﻘﺴﻴﻢ
ﻣﻲﺷﻮد .ﺑﻨﺎﺑﺮ اﻳﻦ ﻛﻞ ﺣﺎﻓﻈﻪﻫﺎي ﻣﻮﺟﻮد در ﺳﻴﺴﺘﻢ PCداراي ﻧﻤﺎي زﻳﺮ اﺳﺖ:
_________________________________________________________________________________
Bus ١
support chips ٢
controler ٣
interrupt ٤
polling ٥
speaker ٦
expansion slots ٧
Cathode Ray Tube (CRT) ٨
Read Only Memory ٩
Random Access Memory ١٠
segment ١١
5-1 ﻓﺼﻞ :1ﻣﺒﺎﻧﻲ ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ
ﭘﺮدازﻧﺪه1 7-1ﺛﺒﺎﺗﻬﺎي
ﻧﻜﺘﻪي ﻣﻬﻢ در ﻣﻮرد اﻧﻮاع ﭘﺮدازﻧﺪهﻫﺎ ،ﻣﺪل ﺑﺮﻧﺎﻣﻪﺳﺎزي آن اﺳﺖ و در اﻳﻦ ﻣﻴﺎن ،ﺛﺒﺎﺗﻬﺎ ﻧﻘﺶ ﻣﻬﻤﻲ در ﺑﺮﻧﺎﻣﻪﺳﺎزي دارﻧﺪ .ﺛﺒﺎﺗﻬﺎ ،ﻣﻜﺎﻧﻬﺎي ﺣﺎﻓﻈﻪاي در
درون ﭘﺮدازﻧﺪه ﻫﺴﺘﻨﺪ ،و ﺑﻪ اﻳﻦ دﻟﻴﻞ ﺑﻪ ﻣﺮاﺗﺐ ﺳﺮﻳﻊﺗﺮ از RAMﻗﺎﺑﻞ دﺳﺘﻴﺎﺑﻲ ﻫﺴﺘﻨﺪ .ﻫﻤﭽﻨﻴﻦ ،ﺛﺒﺎﺗﻬﺎ ﻣﻜﺎﻧﻬﺎي وﻳﮋهاي ﺑﺮاي اﻧﺠﺎم اﻋﻤﺎل ﺣﺴﺎﺑﻲ و ﻣﻨﻄﻘﻲ ﺑﻮﺳﻴﻠﻪي
ﭘﺮدازﻧﺪه ﻫﺴﺘﻨﺪ .ﺑﺮاي ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ ،آﺷﻨﺎﻳﻲ ﺑﺎ اﻳﻦ ﺛﺒﺎﺗﻬﺎ ،ﺑﺴﻴﺎر ﻣﻬﻢ اﺳﺖ .زﻳﺮا ،ﺟﺮﻳﺎن اﻃﻼﻋﺎت ﺑﻴﻦ ﺑﺮﻧﺎﻣﻪ DOS ،و ،BIOSﺑﺎ اﺳﺘﻔﺎده از ﺛﺒﺎﺗﻬﺎ ﺑﺮﻗﺮار
ﻣﻲﺷﻮد .ﺑﺮﻧﺎﻣﻪﻫﺎ ﭘﺎراﻣﺘﺮﻫﺎ را از ﻃﺮﻳﻖ ﺛﺒﺎﺗﻬﺎ ﺑﻪ ﺗﻮاﺑﻊ واﺳﻄﻬﺎي DOSﻳﺎ BIOSارﺳﺎل ﻧﻤﻮده و ﻧﺘﺎﻳﺞ و اﻃﻼﻋﺎت وﺿﻌﻴﺖ را ﺑﻪ ﻋﻨﻮان ﻣﻘﺎدﻳﺮ ﺑﺎزﮔﺸﺘﻲ از اﻳﻦ ﺗﻮاﺑﻊ
درﻳﺎﻓﺖ ﻣﻲﻛﻨﻨﺪ.
از دﻳﺪﮔﺎه ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ ﺑﺎ وﺟﻮد ﻣﻌﺮﻓﻲ ﻣﺪﻟﻬﺎي ﺟﺪﻳﺪﺗﺮ ﭘﺮدازﻧﺪهﻫﺎي ،80X86اﻳﻦ ﺛﺒﺎﺗﻬﺎ از 8086ﺑﻪ ﺑﻌﺪ ﺗﻐﻴﻴﺮ ﻧﻜﺮدهاﻧﺪ .اﻳﻦ اﻣﺮ ﺑﺪان دﻟﻴﻞ اﺳﺖ
ﻛﻪ BIOSو DOSواﺑﺴﺘﻪ ﺑﻪ اﻳﻦ ﭘﺮدازﻧﺪه اﻳﺠﺎد ﺷﺪهاﻧﺪ و ﺑﻪدﻻﻳﻞ ﺳﺎزﮔﺎري ،ﺑﻌﺪاً ﺗﻐﻴﻴﺮ اﺳﺎﺳﻲ از دﻳﺪ ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ در آﻧﻬﺎ داده ﻧﺸﺪه اﺳﺖ .ﭼﻮن ﺛﺒﺎﺗﻬﺎي اﻳﻦ
ﭘﺮدازﻧﺪه 16 ،ﺑﻴﺘﻲ ﺑﻮد ،ﺑﺎ اﺳﺘﻔﺎده از ،DOSﺗﺤﺖ ﭘﺮدازﻧﺪهﻫﺎي 32ﺑﻴﺘﻲ 80386ﻳﺎ 80486ﻫﻢ ﻓﻘﻂ ﻧﺼﻒ ﺛﺒﺎت ،ﻳﺎ -16ﺑﻴﺖ آن ﻗﺎﺑﻞ دﺳﺘﻴﺎﺑﻲ اﺳﺖ.
ﺣﺎل ﺑﻪ اﻧﻮاع ﺛﺒﺎﺗﻬﺎي 8088ﻧﮕﺎه ﻣﻲﻛﻨﻴﻢ .ﺛﺒﺎﺗﻬﺎ ﺑﻪ ﭼﻨﺪ دﺳﺘﻪ ﺗﻘﺴﻴﻢ ﻣﻲﺷﻮﻧﺪ:
1. Common Registers:
- AX (AH, AL) : Accumulator
- BX (BH, BL) : Base
- CX (CH, CL) : Count
- DX (DH, DL) : Data
- DI : Destination Index
- SI : Source Index
- SP :Stack Pointer
- BP : Base Pointer
2. Segment Registers:
_________________________________________________________________________________
processor registers ١
6-1 ﻓﺼﻞ :1ﻣﺒﺎﻧﻲ ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ
ﺛﺒﺎﺗﻬﺎي ﻣﺸﺘﺮك :ﻋﻤﻮﻣﺎً ﺑﺮاي ﻓﺮاﺧﻮاﻧﻲ ﺗﻮاﺑﻊ DOSو BIOSﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﻲﮔﻴﺮﻧﺪ .ﻫﻤﭽﻨﻴﻦ اﻳﻦ ﺛﺒﺎﺗﻬﺎ ﺑﻮﺳﻴﻠﻪي اﻋﻤﺎل رﻳﺎﺿﻲ )ﻣﺜﻞ ﺟﻤﻊ،
ﺗﻔﺮﻳﻖ و ﻏﻴﺮه( دﺳﺘﻜﺎري ﻣﻲﺷﻮﻧﺪ .ﭼﻬﺎر ﺛﺒﺎت 16ﺑﻴﺘﻲ CX ،BX ،AXو DXداراي وﻳﮋﮔﻲ ﻗﺎﺑﻞ ﻗﺴﻤﺖﺷﺪن ﺑﻪ دو ﺑﺨﺶ 8ﺑﻴﺘﻲ Highو Lowﻫﺴﺘﻨﺪ .ﺑﻨﺎﺑﺮ
اﻳﻦ AL ،AX ،و ،AHﻫﺮ ﺳﻪ ﻗﺎﺑﻞ دﺳﺘﻴﺎﺑﻲ ﻫﺴﺘﻨﺪ .ﻣﻘﺪار AXﺑﺎ اﺳﺘﻔﺎده از ﻣﻘﺎدﻳﺮ ALو AHﻗﺎﺑﻞ ﻣﺤﺎﺳﺒﻪ اﺳﺖAX = AH * 256 + AL :
ﺛﺒﺎت ﭘﺮﭼﻢ :1اﻳﻦ ﺛﺒﺎت ﺑﺮاي ﺑﺮﻗﺮاري ارﺗﺒﺎط ﻣﺎﺑﻴﻦ دﺳﺘﻮرات ﭘﻲدرﭘﻲ اﺳﻤﺒﻠﻲ ﺑﻪﻛﺎر ﻣﻲرود و ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر وﺿﻌﻴﺖ ﻋﻤﻠﻴﺎت رﻳﺎﺿﻲ و ﻣﻨﻄﻘﻲ را
ﻧﮕﻬﺪاري ﻣﻲﻛﻨﺪ .ﺑﺮاي ﻣﺜﺎل ﺑﺎ اﺳﺘﻔﺎده از Carry Flagﻳﻚ ﺑﺮﻧﺎﻣﻪ ﻣﻲﺗﻮاﻧﺪ ﺗﻌﻴﻴﻦ ﻛﻨﻴﺪ ﻛﻪ آﻳﺎ در ﻫﻨﮕﺎم ﺟﻤﻊ دو ﺛﺒﺎت 16ﺑﻴﺘﻲ ،ﺣﺎﺻﻞ ﺑﻴﺶ از 65535ﺷﺪه اﺳﺖ ﻳﺎ
ﻧﻪ.
اﻳﻦ ﺛﺒﺎت ﻫﻢ 16ﺑﻴﺘﻲ اﺳﺖ ،وﻟﻲ ﻓﻘﻂ 9ﺑﻴﺖ آن ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﮔﺮﻓﺘﻪ اﺳﺖ ﻛﻪ ﻋﺒﺎرﺗﻨﺪ از:
)- Bit 0: CF (Carry Flag
)- Bit 2: PF (Parity Flag
)- Bit 4: AF (Auxiliary Flag
)- Bit 6: ZF (Zero Flag
)- Bit 7: SF (Sign Flag
)- Bit 8: TF (Trap Flag
)- Bit 9: IF (Interrupt Flag
)- Bit 10: DF (Direction Flag
)- Bit 11: OF (Overflow Flag
در ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ ﺑﺎ اﺳﺘﻔﺎده از زﺑﺎﻧﻬﺎي ﺳﻄﺢ ﺑﺎﻻ ﻓﻘﻂ دو ﭘﺮﭼﻢ ZFو CFﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﻲﮔﻴﺮﻧﺪ .زﻳﺮا اﻏﻠﺐ ﺗﻮاﺑﻊ DOSو BIOSاز آﻧﻬﺎ
ﺑﺮاي ﻣﺸﺨﺺ ﻛﺮدن رﺧﺪاد ﺧﻄﺎ در ﻫﻨﮕﺎم ﻋﻤﻠﻴﺎت اﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ.
ﺛﺒﺎت ﻧﺸﺎﻧﻲ :2ﺗﻌﺪاد ﻣﻜﺎﻧﻬﺎي ﺣﺎﻓﻈﻪ ﻛﻪ ﻳﻚ ﭘﺮدازﻧﺪه ﻣﻲﺗﻮاﻧﺪ ﺑﻪ آﻧﻬﺎ دﺳﺘﺮﺳﻲ داﺷﺘﻪ ﺑﺎﺷﺪ ،ﺑﻪ اﻳﻦ ﺛﺒﺎت ﺑﺴﺘﮕﻲ دارد .ﻫﺮ ﻗﺪر ﺗﻌﺪاد ﺑﻴﺘﻬﺎي اﻳﻦ ﺛﺒﺎت
ﺑﻴﺸﺘﺮ ﺑﺎﺷﺪ ،ﺣﺪاﻛﺜﺮ ﺣﺎﻓﻈﻪي ﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ ،ﺑﻴﺸﺘﺮ ﻣﻲﺷﻮد .اﮔﺮ اﻳﻦ ﺛﺒﺎت 16ﺑﻴﺘﻲ ﺑﺎﺷﺪ ،ﺣﺪاﻛﺜﺮ 65535ﻣﻜﺎن ﺣﺎﻓﻈﻪ ،ﻗﺎﺑﻞ دﺳﺘﻴﺎﺑﻲ اﺳﺖ .ﺑﻪ ﻫﻤﻴﻦ دﻟﻴﻞ اﺳﺖ ﻛﻪ
ﭘﺮدازﻧﺪهﻫﺎي اوﻟﻴﻪ ﻓﻘﻂ ﻗﺎدر ﺑﻪ دﺳﺘﺮﺳﻲ ﺑﻪ 64Kﺣﺎﻓﻈﻪ ﺑﻮدﻧﺪ .ﺑﺮاي ﻧﺸﺎﻧﻲدﻫﻲ 1MBﺣﺎﻓﻈﻪ ،اﻳﻦ ﺛﺒﺎت ﺑﺎﻳﺪ داراي ﺣﺪاﻗﻞ 20ﺑﻴﺖ ﺑﺎﺷﺪ .اﻣﺎ در زﻣﺎن ﻃﺮاﺣﻲ ،8088
اﻣﻜﺎن اﺳﺘﻔﺎده از ﺛﺒﺎت ﻧﺸﺎﻧﻲ 20ﺑﻴﺘﻲ وﺟﻮد ﻧﺪاﺷﺖ .از اﻳﻦرو ،راه ﺣﻞ دﻳﮕﺮي ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﮔﺮﻓﺖ و دو ﻋﺪد 16ﺑﻴﺘﻲ ﻣﺘﻔﺎوت ﺑﺮاي ﺗﺸﻜﻴﻞ ﻧﺸﺎﻧﻲ 20ﺑﻴﺘﻲ ﻣﻮرد
اﺳﺘﻔﺎده ﻗﺮا ﻣﻲﮔﻴﺮد .ﻧﺨﺴﺘﻴﻦ ﻋﺪد در ﻳﻚ ﺛﺒﺎت ﻗﻄﻌﻪ 3ﻗﺮار ﻣﻲﮔﻴﺮد و دوﻣﻴﻦ ﻋﺪد در ﻳﻚ ﺛﺒﺎت دﻳﮕﺮ ﻳﺎ در ﻳﻚ ﻣﻜﺎن ﺣﺎﻓﻈﻪ .ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ ﻧﺸﺎﻧﻲ داراي دو ﺑﺨﺶ
ﻗﻄﻌﻪ و ﻣﺒﺪأ 4ﺧﻮاﻫﺪ ﺑﻮد .ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪ ،ﻛﻪ در ﺛﺒﺎت ﻗﻄﻌﻪ وﺟﻮد دارد ،ﺷﺮوع ﻳﻚ ﻗﻄﻌﻪ ﺣﺎﻓﻈﻪ را ﻧﺸﺎن ﻣﻲ دﻫﺪ .ﻧﺸﺎﻧﻲ ﻣﺒﺪأ ،ﺷﻤﺎرهي ﻣﻜﺎن ﺣﺎﻓﻈﻪ را در درون ﻗﻄﻌﻪ
ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ .ﭼﻮن ﻧﺸﺎﻧﻲ ﻣﺒﺪأ ﻳﻚ ﻋﺪد 16ﺑﻴﺘﻲ اﺳﺖ ،ﭘﺲ ﻳﻚ ﻗﻄﻌﻪ ﻧﻤﻲﺗﻮاﻧﺪ داراي ﺑﻴﺶ از 65535ﻳﺎ 64Kﻣﻜﺎن ﺣﺎﻓﻈﻪﺑﺎﺷﺪ.
_________________________________________________________________________________
flag register ١
address register ٢
segment register ٣
offset ٤
7-1 ﻓﺼﻞ :1ﻣﺒﺎﻧﻲ ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ
درﮔﺎهﻫﺎ2 8-1
درﮔﺎهﻫﺎ ،واﺳﻄﻲ ﺑﻴﻦ ﭘﺮدازﻧﺪه و ﺳﺎﻳﺮ اﺟﺰاء ﺳﺨﺖاﻓﺰار ﺳﻴﺴﺘﻢ ﻫﺴﺘﻨﺪ .ﻫﺮ درﮔﺎه ﻣﺸﺎﺑﻪ ﻳﻚ درﻳﭽﻪي 8ﺑﻴﺘﻲ ورودي ﻳﺎ ﺧﺮوﺟﻲ اﺳﺖ ﻛﻪ ﺑﻪ ﺑﺨﺶ ﺧﺎﺻﻲ
از ﻳﻚ ﺟﺰء ﺳﺨﺖاﻓﺰاري ﻣﺘﺼﻞ اﺳﺖ و ﺑﺎ ﻣﻘﺎدﻳﺮ ﺑﻴﻦ 0ﺗﺎ 65535ﻗﺎﺑﻞ ﻧﺸﺎﻧﻲدﻫﻲ اﺳﺖ .درﮔﺎهﻫﺎ در ﺣﻘﻴﻘﺖ ،ﺛﺒﺎﺗﻬﺎﻳﻲ در اﺟﺰاء ﺳﺨﺖاﻓﺰاري ﻫﺴﺘﻨﺪ ﻛﻪ ﺑﺮاي ارﺗﺒﺎط ﺑﺎ
آن ،ﻣﻘﺪاري در آن ﻧﻮﺷﺘﻪ ﻳﺎ از آن ﺧﻮاﻧﺪه ﻣﻲﺷﻮد .ﭘﺮدازﻧﺪه از ﮔﺬرﮔﺎه ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ درﮔﺎهﻫﺎ اﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ و در ﭘﺮدازﻧﺪهﻫﺎي 80x86از دو دﺳﺘﻮراﻟﻌﻤﻞ INو
OUTﻣﻲﺗﻮان ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ درﮔﺎهﻫﺎ در ﺑﺮﻧﺎﻣﻪﻫﺎي اﺳﻤﺒﻠﻲ اﺳﺘﻔﺎده ﻧﻤﻮد.
9-1وﻗﻔﻪﻫﺎ
وﻗﻔﻪ ﻣﻜﺎﻧﻴﺴﻤﻲ اﺳﺖ ﻛﻪ ﭘﺮدازﻧﺪه را ﻣﺠﺒﻮر ﻣﻲﻛﻨﺪ ﺗﺎ اﺟﺮاي ﺑﺮﻧﺎﻣﻪي ﺟﺎري را ﻣﺘﻮﻗﻒ ﻧﻤﻮده و ﻳﻚ روال ﺧﺎﺻﻲ را ﻛﻪ وﻇﻴﻔﻪي ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪ 3را دارد را
اﺟﺮا ﻛﻨﺪ .وﻗﻔﻪﻫﺎ ﻫﻢ ﺑﺮاي ﻛﻨﺘﺮل ﺳﺨﺖاﻓﺰارﻫﺎ اﺳﺘﻔﺎده ﻣﻲﺷﻮﻧﺪ و ﻫﻢ ﺑﺮاي ﺑﺮﻗﺮار ارﺗﺒﺎط ﺑﻴﻦ ﺑﺮﻧﺎﻣﻪ و ﺗﻮاﺑﻊ DOSو .BIOSﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ دو ﻧﻮع وﻗﻔﻪ دارﻳﻢ:
وﻗﻔﻪﻫﺎي ﻧﺮماﻓﺰاري :4اﻳﻦ ﻧﻮع وﻗﻔﻪﻫﺎ ﺑﺮاي ﻓﺮاﺧﻮاﻧﻲ ﺗﻮاﺑﻊ DOSﻳﺎ BIOSاﺳﺘﻔﺎده ﻣﻲﺷﻮﻧﺪ .در اﻳﻦ ﺣﺎﻟﺖ ،ﺗﻮاﺑﻊ ﻓﺮاﺧﻮاﻧﻲ ﺷﺪه ،ﻫﻤﺎﻧﻨﺪ ﻳﻚ زﻳﺮروال5 •
ﺑﺮﻧﺎﻣﻪ ﻋﻤﻞ ﻣﻲﻛﻨﻨﺪ و ﭘﺲ از ﭘﺎﻳﺎن اﺟﺮاي ﺗﺎﺑﻊ ،ﺑﻪ ﺑﺮﻧﺎﻣﻪي اﺻﻠﻲ ﺑﺮﮔﺸﺖ اﻧﺠﺎم ﻣﻲﺷﻮد .ﺗﻮاﺑﻊ DOSو BIOSﺑﻪ ﺗﺮﺗﻴﺐ ﺧﺎﺻﻲ در ﺣﺎﻓﻈﻪ ﻗﺮار ﻣﻲﮔﻴﺮﻧﺪ و
ﺗﺸﻜﻴﻞ ﻳﻚ ﺟﺪول را ﻣﻲدﻫﻨﺪ ﻛﻪ ﺑﻪ آن ﺟﺪول ﺑﺮدار وﻗﻔﻪ 6ﻣﻲﮔﻮﻳﻨﺪ .اﻳﻦ ﺟﺪول داراي دو ﺳﺘﻮن ورودي ﻳﺎ ﺷﻤﺎره ﺗﺎﺑﻊ و ﻧﺸﺎﻧﻲ ﺷﺮوع ﻛﺪ ﻣﺮﺑﻮﻃﻪ در ﺣﺎﻓﻈﻪ
اﺳﺖ .ﻓﺮاﺧﻮاﻧﻲ ﺗﻮاﺑﻊ ﺑﺎ اﺳﺘﻔﺎده از ورودي ﻣﺮﺑﻮﻃﻪ در اﻳﻦ ﺟﺪول اﻧﺠﺎم ﻣﻲﺷﻮد .ﺑﺮاي ﻣﺜﺎل ،اﮔﺮ ﺗﺎﺑﻊ DOS 21Hرا ﻓﺮاﺧﻮاﻧﻲ ﻛﻨﻴﻢ ،ﭘﺮدازﻧﺪه ﻧﺸﺎﻧﻲ ﺷﺮوع ﻛﺪ
ﺗﺎﺑﻊ 21Hرا از ﺟﺪول ﺑﺮدار وﻗﻔﻪﻫﺎ ﺑﺪﺳﺖ آورده و ﺑﻪ آن ﭘﺮش ﻣﻲﻛﻨﺪ.
وﻗﻔﻪﻫﺎي ﺳﺨﺖاﻓﺰاري :7اﻳﻦ وﻗﻔﻪﻫﺎ ﺑﻮﺳﻴﻠﻪي اﺟﺰاء ﺳﺨﺖاﻓﺰاري ﺗﻮﻟﻴﺪ ﻣﻲﺷﻮﻧﺪ و از ﻃﺮﻳﻖ ﻛﻨﺘﺮﻟﺮ وﻗﻔﻪﻫﺎ ﺑﻪ ﭘﺮدازﻧﺪه ﻣﻨﺘﻘﻞ ﻣﻲﺷﻮﻧﺪ .ﺑﺮﺧﻲ از وﻗﻔﻪﻫﺎي •
ﺳﺨﺖاﻓﺰاري ﻗﺎﺑﻞ ﻧﺎﺗﻮانﺳﺎزي 8ﻫﺴﺘﻨﺪ .ﻳﻌﻨﻲ ﺑﺎﻋﺚ ﻣﻲﺷﻮد ﻛﻪ ﻳﻚ ﺳﺨﺖاﻓﺰار ﻧﺘﻮاﻧﺪ ﺑﻪ ﭘﺮدازﻧﺪه وﻓﻘﻪ ﺑﺪﻫﺪ .اﻣﺎ ﺑﺮﺧﻲ از وﻓﻘﻪﻫﺎ ﻏﻴﺮﻗﺎﺑﻞ ﻧﺎﺗﻮانﺳﺎزي ﻫﺴﺘﻨﺪ ﻛﻪ
ﺑﻪ آﻧﻬﺎ 9NMIﻳﺎ Trapﮔﻔﺘﻪ ﻣﻲﺷﻮد.
ﺳﻴﺴﺘﻢ10 7-1ﻣﺤﺎورهي
ﺑﺮاي اﻧﺠﺎم ﻛﺎرﻫﺎ در ﺳﻴﺴﺘﻢ ،PCاﺟﺰاء ﻣﺨﺘﻠﻒ ﺳﺨﺖاﻓﺰاري و ﻧﺮماﻓﺰاري ﺑﺎ ﻫﻢ ﻛﺎر ﻣﻲﻛﻨﻨﺪ .ﺑﺮاي ﻣﺜﺎل ﺑﺮاي ﺧﻮاﻧﺪن ﻳﻚ ﻛﻠﻴﺪ ﻓﺸﺎر داده ﺷﺪه ﺑﺮ روي
ﺻﻔﺤﻪ ﻛﻠﻴﺪ ،ﻣﻮارد زﻳﺮ ﻣﻄﺮح ﻫﺴﺘﻨﺪ:
ﺳﺨﺖاﻓﺰار ﺻﻔﺤﻪ ﻛﻠﻴﺪ :وﻗﺘﻲ ﻳﻚ ﻛﻠﻴﺪ ﻓﺸﺎر داده ﻣﻲﺷﻮد ،ﺳﺨﺖاﻓﺰار ﺻﻔﺤﻪ ﻛﻠﻴﺪ)در ﺻﻮرت ﺗﻮاﻧﺎ ﺑﻮدن وﻗﻔﻪﻫﺎي ﺳﺨﺖاﻓﺰاري( ،وﻗﻔﻪي ﺷﻤﺎرهي 09Hرا •
ﺑﻪ ﭘﺮدازﻧﺪه ﻣﻲﻓﺮﺳﺘﺪ .ﭘﺮدازﻧﺪه ﭘﺲ از درﻳﺎﻓﺖ اﻳﻦ وﻗﻔﻪ ،ﺑﺮاﺳﺎس اﻟﻮﻳﺖ وﻗﻔﻪﻫﺎ و اﮔﺮ درﺣﺎل اﺟﺮاي ﻳﻚ وﻗﻔﻪ ﺑﺎ اﻟﻮﻳﺖ ﺑﺎﻻﺗﺮ ﻧﺒﺎﺷﺪ ،روال ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪي
ﺷﻤﺎرهي 09Hرا اﺟﺮا ﺧﻮاﻫﺪ ﻛﺮد.
روال ﻣﺪﻳﺮﻳﺖ ﺻﻔﺤﻪﻛﻠﻴﺪ :BIOSرواﻟﻲ ﻛﻪ ﭘﺮدازﻧﺪه ﺑﺮاي ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪي 09Hﻓﺮاﺧﻮاﻧﻲ ﻣﻲﻛﻨﺪ ،ﻣﺮﺑﻮط ﺑﻪ ﺗﻮاﺑﻊ BIOSاﺳﺖ .اﻳﻦ روال ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ •
اﻳﻨﻜﻪ ﭼﻪ ﻛﻠﻴﺪي ﻓﺸﺎر داده ﺷﺪه اﺳﺖ ،ﻛﺪ ﻣﺮﺑﻮﻃﻪ را ﺑﺪﺳﺖ ﻣﻲآورد و ﻣﻌﺘﺒﺮ ﺑﻮدن آن را ﺑﺮرﺳﻲ ﻣﻲﻛﻨﺪ.
_________________________________________________________________________________
stack ١
ports ٢
interrupt handler ٣
software interrupts ٤
subroutine ٥
interrupt vector table ٦
hardare interrupt ٧
disable ٨
Non-Maskable Interrupt ٩
system interaction ١٠
8-1 ﻓﺼﻞ :1ﻣﺒﺎﻧﻲ ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ
ﺑﺎﻓﺮ ﺻﻔﺤﻪﻛﻠﻴﺪ :ﭘﺲ از آﻧﻜﻪ روال ﻣﺪﻳﺮﻳﺖ ﺻﻔﺤﻪﻛﻠﻴﺪ ،ﻛﺪ ﻛﻠﻴﺪ ﻓﺸﺎر داده ﺷﺪه را ﻣﻌﺘﺒﺮ ﺗﺸﺨﻴﺺ داد ،آﻧﺮا در ﻳﻚ ﺑﺎﻓﺮ 16ﺑﺎﻳﺘﻲ در RAMذﺧﻴﺮه ﻣﻲﻛﻨﺪ. •
اﻳﻦ ﺑﺎﻓﺮ ﻣﺜﻞ ﻳﻚ ﺻﻒ اﺳﺖ و ﻛﻠﻴﺪﻫﺎ ﺑﻪ ﺗﺮﺗﻴﺐ ﻓﺸﺎر داده ﺷﺪن در آن ﻗﺮار ﻣﻲﮔﻴﺮﻧﺪ و ﭼﻮن 16ﺑﺎﻳﺘﻲ اﺳﺖ ،در ﺻﻮرﺗﻲ ﻛﻪ ﺑﻴﺶ از 16ﻛﻠﻴﺪ ﻓﺸﺎر داده ﺷﻮد ،ﭘﺮ
ﺧﻮاﻫﺪ ﺷﺪ و در اﻳﻦ ﺻﻮرت اﺳﺖ ﻛﻪ ﺻﺪاي ﺑﻮق ﺷﻨﻴﺪه ﻣﻲﺷﻮد.
وﻗﻔﻪي ﺻﻔﺤﻪﻛﻠﻴﺪ :BIOSﻣﺮﺣﻠﻪي ﺑﻌﺪ ،ﺧﻮاﻧﺪن ﻛﺎراﻛﺘﺮ از ﺑﺎﻓﺮ ﻓﻮق و آﻣﺎدهﺳﺎزي آن ﺑﺮاي ﺑﺮﻧﺎﻣﻪ اﺳﺖ .اﻳﻦ ﻛﺎر ﺑﻮﺳﻴﻠﻪي وﻗﻔﻪي ﺷﻤﺎرهي 16Hﻗﺎﺑﻞ •
اﻧﺠﺎم اﺳﺖ .ﭘﺲ ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ اﻳﻦ وﻗﻔﻪي ﻧﺮماﻓﺰاري ،ﻛﺎراﻛﺘﺮ ﻣﻮﺟﻮد در ﺑﺎﻓﺮ و وﺿﻌﻴﺖ ﺧﻮاﻧﺪه ﻣﻲﺷﻮﻧﺪ .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ﻣﻲﺗﻮان از دﺳﺘﻮر INTاﺳﻤﺒﻠﻲ اﺳﺘﻔﺎده
ﻛﺮد.
در ﺳﻄﺢ :DOSﻫﻤﭽﻨﻴﻦ در DOSﻧﻴﺰ ﺗﻮاﺑﻌﻲ ﺑﺮاي ﻛﺎر ﻛﺮدن ﺑﺎ ﺻﻔﺤﻪﻛﻠﻴﺪ وﺟﻮد دارد ﻛﻪ ﺟﺰو ﺗﻮاﺑﻊ 21Hﻫﺴﺘﻨﺪ .اﻳﻦ ﺗﻮاﺑﻊ ،ﻛﺎرﻫﺎي ﺑﻴﺸﺘﺮي را در •
ﻣﻘﺎﻳﺴﻪ ﺑﻪ ﺗﺎﺑﻊ BIOS 16Hاﻧﺠﺎم ﻣﻲدﻫﻨﺪ .ﺑﺮاي ﻧﻤﻮﻧﻪ ﻛﻠﻴﺪ زده ﺷﺪه را ﺑﺮ روي ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ،ﻧﺸﺎن ﻣﻲدﻫﻨﺪ.
ﻓﺼﻞ :2ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ در ﻋﻤﻞ
)(System Programming in Practice
1-2ﻣﻘﺪﻣﻪ
در اﻳﻦ ﺑﺨﺶ درﺑﺎرهي ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ ﺑﺎ اﺳﺘﻔﺎده از زﺑﺎن اﺳﻤﺒﻠﻲ ،زﺑﺎن ﭘﺎﺳﻜﺎل )ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي ﺗﻮرﺑﻮ ﻳﺎ ﺑﻮرﻟﻨﺪ ﭘﺎﺳﻜﺎل( و زﺑﺎن ) Cﺑﺎ ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي
ﻣﻴﻜﺮوﺳﺎﻓﺖ و ﺑﻮرﻟﻨﺪ( ،ﻣﻄﺎﻟﺒﻲ اراﺋﻪ ﻣﻲﺷﻮد .ﮔﺮﭼﻪ ﻫﺪف اﺻﻠﻲ زﺑﺎن ،Cﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ ﺑﻮده و از اﻳﻦ ﻧﻈﺮ از زﺑﺎن ﭘﺎﺳﻜﺎل ﻣﻨﺎﺳﺐﺗﺮ اﺳﺖ ،وﻟﻲ زﺑﺎن ﭘﺎﺳﻜﺎﻟﻲ ﻛﻪ از
ﻃﺮﻳﻖ ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي ﺑﻮرﻟﻨﺪ در اﺧﺘﻴﺎر ﻗﺮار ﮔﺮﻓﺘﻪ ،ﺗﻤﺎﻣﻲ اﻣﻜﺎﻧﺎت ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ در ﻣﺤﻴﻂ DOSرا در اﺧﺘﻴﺎر ﻗﺮار ﻣﻲدﻫﺪ.
ﻓﺮاﺧﻮاﻧﻲ وﻗﻔﻪﻫﺎ در زﺑﺎن اﺳﻤﺒﻠﻲ :دﺳﺘﻮراﻟﻌﻤﻞ ﻓﺮاﺧﻮاﻧﻲ وﻗﻔﻪﻫﺎ در زﺑﺎن اﺳﻤﺒﻠﻲ ،80x86دﺳﺘﻮراﻟﻌﻤﻞ intاﺳﺖ ،ﻛﻪ ﻳﻚ ﻋﻤﻠﻮﻧﺪ دارد و آن
ﺷﻤﺎرهي وﻗﻔﻪ اﺳﺖ .ﺑﺮاي ﻣﺜﺎل دﺳﺘﻮراﻟﻌﻤﻞ زﻳﺮ ،ﺑﺎﻋﺚ ﻓﺮاﺧﻮاﻧﻲ روال ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪي 2ﺷﻤﺎره 00Hﻛﻪ وﻗﻔﻪي "ﺗﻘﺴﻴﻢ ﺑﺮ ﺻﻔﺮ "3اﺳﺖ ،ﻣﻲﺷﻮد:
int interrupt_no
ﭘﺮدازﻧﺪهﻫﺎي 80x86ﺗﻮاﻧﺎﻳﻲ ﻣﺪﻳﺮﻳﺖ 256وﻗﻔﻪ را دارﻧﺪ .ﭘﺲ interrupt_noﻣﻘﺪاري ﺑﻴﻦ 00Hو FFHرا ﻣﻲﺗﻮاﻧﺪ داﺷﺘﻪ ﺑﺎﺷﺪ .دﺳﺘﻮراﻟﻌﻤﻞ int
ﭘﺲ از ﻓﺮاﺧﻮاﻧﻲ ،ﻣﻘﺪار ﺛﺒﺎت ﭘﺮﭼﻤﻬﺎ را در ﭘﺸﺘﻪ pushﻣﻲﻛﻨﺪ و ﺳﭙﺲ ﻣﻘﺎدﻳﺮ ﭘﺮﭼﻤﻬﺎي IFو TFرا 0ﻣﻲﻛﻨﺪ .ﻣﻘﺪار 0ﺑﺮاي IFﺑﺎﻋﺚ ﻣﻲﺷﻮد ﻛﻪ از وﻗﻮع ﺳﺎﻳﺮ
وﻗﻔﻪﻫﺎ ﺟﻠﻮﮔﻴﺮي ﺷﻮد ،ﻣﮕﺮ آﻧﻜﻪ وﻗﻔﻪ NMIﺑﺎﺷﺪ .ﻫﻤﭽﻨﻴﻦ ﻣﻘﺪار 1ﺑﺮاي TFﺑﺎﻋﺚ ﻣﻲﺷﻮد ﻛﻪ ﭘﺮدازﻧﺪه ﺑﻪ ﺣﺎﻟﺖ ﺗﻚﻣﺮﺣﻠﻪاي 4ﺑﺮود ﻛﻪ ،ﺣﺎﻟﺖ اﺷﻜﺎﻟﺰداﻳﻲ 5اﺳﺖ و
ﺻﻔﺮ ﻛﺮدن آن اﻳﻦ ﺣﺎﻟﺖ را ﻏﻴﺮ ﻓﻌﺎل ﻣﻲﻛﻨﺪ .دﻟﻴﻞ ﺻﻔﺮ ﻛﺮدن ،IFﻧﺎﺗﻮانﺳﺎزي 6وﻗﻔﻪﻫﺎي دﻳﮕﺮ اﺳﺖ ،ﭼﻮن رواﻟﻬﺎي وﻗﻔﻪ ﻧﻤﻲﺗﻮاﻧﻨﺪ ﺑﻪ ﺻﻮرت ﻣﺘﺪاﺧﻞ اﺟﺮا ﺷﻮﻧﺪ.
ﺳﭙﺲ ﻳﻚ far callﺑﻪ روال ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪ ،ﻛﻪ ﻧﺸﺎﻧﻲ آن در ﺟﺪول ﺑﺮدار وﻗﻔﻪﻫﺎ 7و ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﺷﻤﺎرهي وﺟﻮد دارد ،اﻧﺠﺎم ﻣﻲﺷﻮد .ﺑﺮاي ﻣﻌﺮﻓﻲ ﻳﻚ روال ﻣﺪﻳﺮﻳﺖ
وﻗﻔﻪ ﺑﻪ ﺳﻴﺴﺘﻢ ﻳﺎ ﺗﻐﻴﻴﺮ روال ﻣﺪﻳﺮﻳﺖ ﻳﻚ وﻗﻔﻪي ﻣﻮﺟﻮد ﺑﺎﻳﺪ ﻧﺸﺎﻧﻲ روال ﺟﺪﻳﺪ در اﻳﻦ ﺟﺪول ﻗﺮار داده ﺷﻮد .ﭼﻮن رواﻟﻬﺎ farﻫﺴﺘﻨﺪ ،ﭘﺲ ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪ و ﻣﺒﺪأ ،ﻛﻪ 4
ﺑﺎﻳﺖ اﺳﺖ در اﻳﻦ ﺟﺪول ﻗﺮار ﮔﻴﺮد .ﺑﻪ ﻋﺒﺎرت دﻗﻴﻖﺗﺮ ،ﻧﺸﺎﻧﻲ ﻣﺒﺪأ روال ﺑﺎﻳﺪ در ﻧﺸﺎﻧﻲ 4*interrupt_noو ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪي آن در ﻧﺸﺎﻧﻲ 4*int_no+2ﺣﺎﻓﻈﻪ
ذﺧﻴﺮه ﺷﻮد .در ﺻﻮرت ﺗﻐﻴﻴﺮ روال وﻗﻔﻪﻫﺎي ﺣﺴﺎس ،روال ﻗﺒﻠﻲ ﺑﺎﻳﺪ در روال ﺟﺪﻳﺪ ﻓﺮاﺧﻮاﻧﻲ ﺷﻮد.
رواﻟﻬﺎي ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪ :ﻳﻚ روال ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪ ،از ﻫﺮ ﺟﻬﺖ ﺷﺒﻴﻪ ﻳﻚ روال ﻣﻌﻤﻮﻟﻲ )اﻟﺒﺘﻪ (far procدر زﺑﺎن اﺳﻤﺒﻠﻲ اﺳﺖ .ﺑﺎ اﻳﻦ ﺗﻔﺎوت ﻛﻪ ﺑﺮاي
ﺑﺮﮔﺸﺖ از اﻳﻦ ﮔﻮﻧﻪ رواﻟﻬﺎ ﺑﺎﻳﺪ از دﺳﺘﻮراﻟﻌﻤﻞ (interrupt return) iretﺑﻪ ﺟﺎي retاﺳﺘﻔﺎده ﺷﻮد iret .ﻛﺎر اﺿﺎﻓﻪاي ﻛﻪ ﻧﺴﺒﺖ ﺑﻪ retاﻧﺠﺎم ﻣﻲدﻫﺪpop ،
ﻛﺮدن ﺧﻮدﻛﺎر ﻣﻘﺪار ﺛﺒﺎت ﭘﺮﭼﻤﻬﺎ از روي ﭘﺸﺘﻪ اﺳﺖ.
ﺳﺎﻳﺮ دﺳﺘﻮرات ﻣﺮﺑﻮط ﺑﻪ وﻗﻔﻪﻫﺎ :دو دﺳﺘﻮر دﻳﮕﺮ ﻧﻴﺰ در ارﺗﺒﺎط ﺑﺎ وﻗﻔﻪﻫﺎ وﺟﻮد دارد ،ﻛﻪ ﻳﻜﻲ cliاﺳﺖ و ﻣﻘﺪار IF=0و دﻳﮕﺮي stiاﺳﺖ ﻛﻪ
IF=1ﻣﻲﻛﻨﺪ و ﺑﻪ ﺗﺮﺗﻴﺐ ﺑﺎﻋﺚ ﻧﺎﺗﻮانﺳﺎزي و ﺗﻮاﻧﺎﺳﺎزي وﻗﻔﻪﻫﺎ ﻣﻲﺷﻮﻧﺪ.
_________________________________________________________________________________
low-level ١
interrupt handler or Interrupt Service Routine (ISR) ٢
dicision by zero ٣
single-step mode ٤
debugging mode ٥
disable ٦
interrupt vector table ٧
2-2 ﻓﺼﻞ :2ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ در ﻋﻤﻞ
دﺳﺘﻮرات دﺳﺘﺮﺳﻲ ﺑﻪ درﮔﺎهﻫﺎ :درﮔﺎهﻫﺎ ،واﺳﻄﻲ ﺑﻴﻦ ﭘﺮدازﻧﺪه و ﺳﺎﻳﺮ اﺟﺰاء ﺳﺨﺖاﻓﺰار ﺳﻴﺴﺘﻢ ﻫﺴﺘﻨﺪ .ﻫﺮ درﮔﺎه ﻣﺸﺎﺑﻪ ﻳﻚ درﻳﭽﻪي 8ﺑﻴﺘﻲ ورودي
ﻳﺎ ﺧﺮوﺟﻲ اﺳﺖ ﻛﻪ ﺑﻪ ﺑﺨﺶ ﺧﺎﺻﻲ از ﻳﻚ ﺟﺰء ﺳﺨﺖاﻓﺰاري ﻣﺘﺼﻞ اﺳﺖ و ﺑﺎ ﻣﻘﺎدﻳﺮ ﺑﻴﻦ 00Hﺗﺎ FFFFHﻗﺎﺑﻞ ﻧﺸﺎﻧﻲدﻫﻲ اﺳﺖ .درﮔﺎهﻫﺎ در ﺣﻘﻴﻘﺖ ،ﺛﺒﺎﺗﻬﺎﻳﻲ در
اﺟﺰاء ﺳﺨﺖاﻓﺰاري ﻫﺴﺘﻨﺪ ﻛﻪ ﺑﺮاي ارﺗﺒﺎط ﺑﺎ آن ،ﻣﻘﺪاري در آن ﻧﻮﺷﺘﻪ ﻳﺎ از آن ﺧﻮاﻧﺪه ﻣﻲﺷﻮد .ﺑﺮاي ﻣﺜﺎل ﺑﺮاي ﭼﺎپ ﻳﻚ ﻛﺎراﻛﺘﺮ ﺑﻮﺳﻴﻠﻪي ﭼﺎﭘﮕﺮ ،ﺑﺎﻳﺪ ﻛﺪ اَﺳﻜﻲ آن
ﻛﺎراﻛﺘﺮ در درﮔﺎه ﻣﻮازي 1ﻛﻪ ﭼﺎﭘﮕﺮ ﺑﻪ آن ﻣﺘﺼﻞ اﺳﺖ ،ﻧﻮﺷﺘﻪ ﺷﻮد.
در ﭘﺮدازﻧﺪهﻫﺎي 80x86از دو دﺳﺘﻮراﻟﻌﻤﻞ inو outﻣﻲﺗﻮان ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ درﮔﺎهﻫﺎ در زﺑﺎن اﺳﻤﺒﻠﻲ اﺳﺘﻔﺎده ﻛﺮد:
out 04a5h, al ; illegal port address for this format
و ﺑﺎﻳﺪ ﻣﻘﺪار 04a5hدر ﺛﺒﺎت DXﻗﺮار داده ﺷﻮد:
اﻳﻦ روال ﺷﻤﺎرهي وﻗﻔﻪ را ﺑﻪﻋﻨﻮان ﭘﺎراﻣﺘﺮ اول ﻧﻴﺎز ﻧﺪارد .اﻳﻦ روال اﻣﻜﺎن دﺳﺘﻴﺎﺑﻲ ﺑﻪ وﻗﻔﻪي 21Hرا ﻛﻪ ﺷﺎﻣﻞ ﺗﻮاﺑﻊ واﺳﻂ ﺑﺮﻧﺎﻣﻪي ﻛﺎرﺑﺮدي 2DOSاﺳﺖ را ﻓﺮاﻫﻢ
ﻣﻲﻛﻨﺪ .اﻳﻦ APIﺷﺎﻣﻞ ﺣﺪود 200ﺗﺎﺑﻊ اﺳﺖ ﻛﻪ ﺑﻮﺳﻴﻠﻪي ﻓﺮﻣﺎﻧﻬﺎ و ﺑﺮﻧﺎﻣﻪﻫﺎي DOSﻓﺮاﻫﻢ ﻣﻲﺷﻮﻧﺪ.
ﻧﻮﺷﺘﻦ روال ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪي ﺟﺪﻳﺪ :در ﺑﺮﻧﺎﻣﻪي زﻳﺮ ،ﻧﻤﻮﻧﻪاي از ﻳﻚ روال ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪ اراﺋﻪ ﺷﺪه اﺳﺖ .روال ، TimerHandlerوﻗﻔﻪي
1CHرا ﻛﻪ ﺑﻪ ” “Clock Tickﻣﻌﺮوف اﺳﺖ و در ﻫﺮ ﺛﺎﻧﻴﻪ 18.2ﺑﺎر ﻳﻚ ﺑﺎر ﻓﻌﺎل ﻣﻲﺷﻮد ،ﻋﻮض ﻧﻤﻮده اﺳﺖ .در اﻳﻦ روال ﻳﻚ ﺷﻤﺎرﺷﮕﺮ ﺳﺮاﺳﺮي ﻳﻚ واﺣﺪ
اﺿﺎﻓﻪ ﺷﺪه و ﺳﭙﺲ ﻧﻤﺎﻳﺶ داده ﻣﻲﺷﻮد .در ﺑﺮﻧﺎﻣﻪي اﺻﻠﻲ ،اﺑﺘﺪا ﻧﺸﺎﻧﻲ روال ﻗﺒﻠﻲ ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪي 1CHﺑﺎ ﻓﺮاﺧﻮاﻧﻲ GetIntVecدر ﻣﺘﻐﻴﺮ ،Int1CSaveذﺧﻴﺮه
ﺷﺪه اﺳﺖ و ﺳﭙﺲ روال ﺟﺪﻳﺪ ﺑﺮاي وﻗﻔﻪي 1CHﺑﺎ ﻓﺮاﺧﻮاﻧﻲ ،SetIntVecﻧﺼﺐ ﺷﺪه اﺳﺖ .در ﺣﺎﻟﻴﻜﻪ ﺑﺮﻧﺎﻣﻪي اﺻﻠﻲ ،ﻣﻨﺘﻈﺮ زده ﺷﺪن ﻳﻚ ﻛﻠﻴﺪ اﺳﺖ ،روال
وﻗﻔﻪي ،1CHﺷﻤﺎرﺷﮕﺮ را اﻓﺰاﻳﺶ داده و ﻧﻤﺎﻳﺶ ﻣﻲدﻫﺪ .ﭘﺲ از زدن ﻛﻠﻴﺪ ،روال ﻗﺒﻠﻲ 1CHﺑﺮﮔﺮداﻧﺪه ﻣﻲﺷﻮد.
ﺑﺮاي ﺳﺎدهﺳﺎزي ارﺟﺎع ﺑﻪ ﺛﺒﺎﺗﻬﺎ ،ﻧﻮع Registersﺑﻪﺻﻮرت ﻳﻚ رﻛﻮرد ﻣﺘﻐﻴﺮ 1ﺗﻌﺮﻳﻒ ﺷﺪه اﺳﺖ:
اﮔﺮ Regsﻳﻚ ﻣﺘﻐﻴﺮ از ﻧﻮع Registersﺑﺎﺷﺪ ،ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﺛﺒﺎﺗﻬﺎي ﭘﺮدازﻧﺪه ﺑﻪﺳﻬﻮﻟﺖ ﻣﻲﺗﻮان از ﻓﻴﻠﺪﻫﺎي اﻳﻦ ﻣﺘﻐﻴﺮ از ﻧﻮع رﻛﻮرد اﺳﺘﻔﺎده ﻧﻤﻮد:
- Regs.AX,
- Regs.BX,
- Regs.AH,
- Regs.DL, etc.
ﺑﺮاي ارﺳﺎل ﻣﻘﺪار D3Hﺑﻪ ﺛﺒﺎت DLﺑﺮاي ﻓﺮاﺧﻮاﻧﻲ ﻳﻚ وﻗﻔﻪ ،ﺑﻪﺻﻮرت زﻳﺮ ﻋﻤﻞ ﻛﻨﻴﺪ:
;Regs.DL := $D3
ﻗﺒﻞ از ﻓﺮاﺧﻮاﻧﻲ ﻳﻚ وﻗﻔﻪ ﺑﺎ Intrﻳﺎ ،MsDosﻣﻘﺎدﻳﺮ ﻣﻮردﻧﻈﺮ را در ﺛﺒﺎﺗﻬﺎﻳﻲ ﻛﻪ ﺑﻮﺳﻴﻠﻪي ﺗﺎﺑﻊ ،ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﺧﻮاﻫﻨﺪ ﮔﺮﻓﺖ ،ﻗﺮار دﻫﻴﺪ .وﻗﻔﻪ ﻓﻘﻂ
از اﻃﻼﻋﺎت ﻗﺮار داده ﺷﺪه در ﺛﺒﺎﺗﻬﺎي ﻣﻮردﻧﻈﺮش اﺳﺘﻔﺎده ﻣﻲﻛﻨﺪ و از ﻣﺎﺑﻘﻲ ﺻﺮفﻧﻈﺮ ﻣﻲﻛﻨﺪ.
ﺧﻮاﻧﺪن ﭘﺮﭼﻢﻫﺎي ﺛﺒﺎت ﭘﺮﭼﻢ :در ﺑﺴﻴﺎري از ﺣﺎﻟﺖﻫﺎ ،ﺛﺒﺎت ﭘﺮﭼﻢ ﻣﻲﺗﻮاﻧﺪ اﻃﻼﻋﺎﺗﻲ را ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺑﺮﮔﺮداﻧﺪ .ﺗﻮاﺑﻊ DOSﺑﻪﻃﻮر ﮔﺴﺘﺮده از Carry
Flagاﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ ،ﻛﻪ ﭘﺲ از ﭘﺎﻳﺎن ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ ﻳﺎ اﺟﺮاي ﻧﺎﻣﻮﻓﻖ آن ،ﻣﻘﺪاردﻫﻲ ﻣﻲﺷﻮد .ﺑﺮاي ﺳﻬﻮﻟﺖ ﺑﺮرﺳﻲ ﭘﺮﭼﻢﻫﺎ ،در ﻳﻮﻧﻴﺖ DOSﺛﺎﺑﺖﻫﺎي ﻣﺨﺘﻠﻔﻲ
ﺗﻌﺮﻳﻒ ﺷﺪهاﺳﺖ و ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﻣﻘﺎدﻳﺮ ﺑﻴﺘﻬﺎي ﭘﺮﭼﻤﻬﺎي ﭘﺮدازﻧﺪه اﺳﺖ .ﺑﺮاي ﺗﻌﻴﻴﻦ اﻳﻨﻜﻪ ﻛﺪاﻣﻴﻚ از ﺑﻴﺖﻫﺎ ﻣﻘﺪار ﮔﺮﻓﺘﻪ اﺳﺖ ،ﻣﻲﺗﻮان از ﻋﻤﻠﮕﺮ ANDاﺳﺘﻔﺎده ﻧﻤﻮد.
ﻋﺒﺎرت زﻳﺮ در ﺻﻮرﺗﻲﻛﻪ ﻣﻘﺪار ﺑﻴﺖ Carry Flagﻳﻚ ﺷﺪه ﺑﺎﺷﺪ ،ﺑﻪ ﻣﺘﻐﻴﺮ ﺑﻮﻟﻲ Errorﻣﻘﺪار Trueﻣﻲدﻫﺪ:
ﺑﺎﻓﺮﻫﺎ و ﺗﻮرﺑﻮ ﭘﺎﺳﻜﺎل :ﺑﺴﻴﺎري از ﺗﻮاﺑﻊ وﻗﻔﻪ ﺑﻪ ﭘﺎراﻣﺘﺮﻫﺎﻳﻲ از ﻧﻮع اﺷﺎرهﮔﺮ ﺑﻪ ﺑﺎﻓﺮ ﺑﺮاي ﻓﺮاﺧﻮاﻧﻲ ﻧﻴﺎز دارﻧﺪ .اﻳﻦ ﺗﻮاﺑﻊ ﻳﺎ اﻃﻼﻋﺎت را از ﺑﺎﻓﺮ ﺑﺮﻣﻲدارﻧﺪ
ﻳﺎ در آن ﻗﺮار ﻣﻲدﻫﻨﺪ .اﻳﻦ اﺷﺎرهﮔﺮﻫﺎ ﻫﻤﻴﺸﻪ FARﺑﻮده و ﺷﺎﻣﻞ ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪ و ﻧﺸﺎﻧﻲ ﻣﺒﺪأ ﻫﺴﺘﻨﺪ .اﺷﺎرهﮔﺮﻫﺎي FARﺑﺮﺧﻼف اﺷﺎرهﮔﺮﻫﺎي ،NEARﺑﻪ
دادهﻫﺎي ﻣﻮﺟﻮد در ﻫﺮ ﺟﺎي ﺣﺎﻓﻈﻪ و ﺧﺎرج از ﻗﻄﻌﻪي ﺟﺎري ﺑﺮﻧﺎﻣﻪ ﻣﻲﺗﻮاﻧﻨﺪ اﺷﺎره ﻛﻨﻨﺪ.
ارﺳﺎل اﺷﺎرهﮔﺮﻫﺎ ﺑﻪ ﺗﻮاﺑﻊ وﻗﻔﻪ :ﺗﺎﺑﻊ ،DOS 09Hﻣﺜﺎﻟﻲ از ﻳﻚ ﺗﺎﺑﻊ اﺳﺖ ﻛﻪ ﭘﺎراﻣﺘﺮي از ﻧﻮع اﺷﺎرهﮔﺮ دارد .اﻳﻦ ﺗﺎﺑﻊ ﻳﻚ رﺷﺘﻪ را ﺑﺮ روي
ﺻﻔﺤﻪي ﻧﻤﺎﻳﺶ و از ﻧﻘﻄﻪي ﺷﺮوع ﻣﺤﻞ ﻓﻌﻠﻲ ﻣﻜﺎنﻧﻤﺎ ،ﻧﺸﺎن ﻣﻲدﻫﺪ .ﻫﻤﺎﻧﻨﺪ ﻫﻤﻪي ﺗﻮاﺑﻊ ،DOSاﻳﻦ ﺗﺎﺑﻊ اﻧﺘﻈﺎر دارد ﻛﻪ ﺷﻤﺎرهي ﺗﺎﺑﻊ در ﺛﺒﺎت AHﺑﺎﺷﺪ و ﻧﺸﺎﻧﻲ
ﺷﺮوع ﺑﺎﻓﺮ ﺣﺎوي رﺷﺘﻪاي ﻛﻪ ﻗﺮار اﺳﺖ ﻧﻤﺎﻳﺶ داده ﺷﻮد در زوج ﺛﺒﺎت DS:DXﻗﺮار داﺷﺘﻪ ﺑﺎﺷﺪ DS .ﻣﻘﺪار ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪ و DXﻧﺸﺎﻧﻲ ﻣﺒﺪأ ﺑﺎﻓﺮ اﺳﺖ.
ﺑﺎ وﺟﻮدﻳﻜﻪ اﻳﺠﺎد رﺷﺘﻪ در ﭘﺎﺳﻜﺎل آﺳﺎن اﺳﺖ ،وﻟﻲ ﺑﺎﻳﺪ ﺑﺪاﻧﻴﺪ ﻛﻪ ﭼﮕﻮﻧﻪ ﻧﺸﺎﻧﻲ ﺑﺎﻓﺮ رﺷﺘﻪ را ﺑﺪﺳﺖ آورده و در ﺛﺒﺎﺗﻬﺎي DSو DXﻗﺮار دﻫﻴﺪ .ﺑﺮاي اﻳﻦ
ﻣﻨﻈﻮر در ﺗﻮرﺑﻮ ﭘﺎﺳﻜﺎل دو ﺗﺎﺑﻊ )( Segو )( Ofsوﺟﻮد دارد ،ﻛﻪ ﺑﻪﺗﺮﺗﻴﺐ ﻧﺸﺎﻧﻲﻫﺎي ﻗﻄﻌﻪ و ﻣﺒﺪأ ﻳﻚ ﺷﺊ را در ﺣﺎﻓﻈﻪ ﺑﺪﺳﺖ ﻣﻲدﻫﻨﺪ.
ﻣﺜﺎل زﻳﺮ ﻧﺸﺎن ﻣﻲدﻫﺪ ﻛﻪ ﭼﮕﻮﻧﻪ ﻣﻲ ﺗﻮاﻧﻴﺪ اﻳﻦ ﺗﻮاﺑﻊ را ﺑﺎ ﺗﺎﺑﻊ DOS 09Hﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار دﻫﻴﺪ .اﻳﻦ ﺑﺮﻧﺎﻣﻪ از ﺗﺎﺑﻊ DOS 09Hﺑﺮاي ﻧﻤﺎﻳﺶ
رﺷﺘﻪي ﻣﻮﺟﻮد در ﻣﺘﻐﻴﺮ ﭘﻴﻐﺎم ﺑﺮ روي ﺻﻔﺤﻪي ﻧﻤﺎﻳﺶ اﺳﺘﻔﺎده ﻣﻲﻛﻨﺪ .ﺑﺮﺧﻼف ﺳﺎﻳﺮ ﺗﻮاﺑﻊ ،DOSﺗﺎﺑﻊ 09Hﻧﻴﺎز ﺑﻪ ﻣﺸﺨﺺ ﺷﺪن ﭘﺎﻳﺎن رﺷﺘﻪ ﺑﺎ ﻛﺎراﻛﺘﺮ ’ ‘$دارد،
ﻧﻪ ﺑﺎﻳﺖ . null
;program 9HDemoP
uses ;DOS
var Regs ;: Registers
;]Message : string[20
begin
;’Message := ‘DOSPrint$
;Regs.AH := $09
;) ]Regs.DS := Seg( Message[1
;) ]Regs.DX := Ofs( Message[1
;) MsDos (Regs
end.
درﻳﺎﻓﺖ اﺷﺎرهﮔﺮﻫﺎ از ﺗﻮاﺑﻊ وﻗﻔﻪ :ﺑﺮﻧﺎﻣﻪي زﻳﺮ ﺗﺎﺑﻊ DOS 1BHرا ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﻛﻨﺪ ﻛﻪ ﻳﻚ اﺷﺎرهﮔﺮ را در زوج ﺛﺒﺎت DS:BXﺑﺮﻣﻲﮔﺮداﻧﺪ.
اﻳﻦ اﺷﺎرهﮔﺮ ﺑﻪ ﻳﻚ ﺑﺎﻳﺖ ﻛﻪ ﺷﺎﻣﻞ ﻛﺪ رﺳﺎﻧﻪي 1ﮔﺮداﻧﻨﺪهي ﺟﺎري اﺳﺖ ،اﺷﺎره ﻣﻲﻛﻨﺪ DOS .از ﻛﺪﻫﺎي رﺳﺎﻧﻪ F0Hﺗﺎ FFHﺑﺮاي ﺗﻮﺻﻴﻒ اﻧﻮاع ﻣﺨﺘﻠﻒ
ﮔﺮداﻧﻨﺪهﻫﺎ اﺳﺘﻔﺎده ﻣﻲﻛﻨﺪ .ﻣﻘﺪار F8Hﻫﻤﻪي اﻧﻮاع دﻳﺴﻚ ﺳﺨﺖ را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ.
ﺑﺮاي ﺗﻌﻴﻴﻦ ﺷﻨﺎﺳﻪي رﺳﺎﻧﻪ از اﺷﺎرهﮔﺮ ﺑﺮﮔﺸﺘﻲ ،ﻧﻮع MediaPtrﺑﻪ ﻋﻨﻮان اﺷﺎرهﮔﺮي ﺑﻪ ﻳﻚ ﺑﺎﻳﺖ ،در اﺑﺘﺪاي ﺑﺮﻧﺎﻣﻪ ﺗﻌﺮﻳﻒ ﺷﺪه اﺳﺖ .از آﻧﺠﺎﻳﻲ ﻛﻪ
اﺷﺎرهﮔﺮﻫﺎ در ﺗﻮرﺑﻮ ﭘﺎﺳﻜﺎل ﻫﻤﻴﺸﻪ FARﻫﺴﺘﻨﺪ ،ﻣﻄﻤﺌﻦ ﺧﻮاﻫﻴﺪ ﺑﻮد ﻛﻪ ﻳﻚ اﺷﺎرهﮔﺮ FARاﻳﺠﺎد ﻧﻤﻮدهاﻳﺪ .در ﺑﺮﻧﺎﻣﻪ MPﺑﻪﻋﻨﻮان ﻣﺘﻐﻴﺮي از اﻳﻦ ﻧﻮع ﺗﻌﺮﻳﻒ ﺷﺪه
اﺳﺖ .ﭘﺲ از ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ ،DOS 1BHﺑﺮﻧﺎﻣﻪ اﺷﺎرهﮔﺮ ﺑﺮﮔﺸﺘﻲ را ﭘﺲ از ﺑﺪﺳﺖآوردن از زوج ﺛﺒﺎت DS:BXدر MPﻗﺮار ﻣﻲدﻫﺪ .ﺑﺮﻧﺎﻣﻪ ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر از ﺗﺎﺑﻊ
Ptrﺗﻮرﺑﻮ ﭘﺎﺳﻜﺎل اﺳﺘﻔﺎده ﻣﻲﻛﻨﺪ .اﻳﻦ ﺗﺎﺑﻊ ﻧﺸﺎﻧﻲﻫﺎي ﻗﻄﻌﻪ و ﻣﺒﺪأ را درﻳﺎﻓﺖ ﻧﻤﻮده و ﻳﻚ اﺷﺎرهﮔﺮ از آﻧﻬﺎ ﺗﺸﻜﻴﻞ ﻣﻲدﻫﺪ .اﻳﻦ اﺷﺎرهﮔﺮ ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ اﻃﻼﻋﺎت
ﻣﻮرد اﺷﺎره ،ﻗﺎﺑﻞ اﺳﺘﻔﺎده اﺳﺖ .دﺳﺘﻮر WriteLnدر ﭘﺎﻳﺎن ﺑﺮﻧﺎﻣﻪ اﻳﻦ ﻣﺴﺄﻟﻪ را ﻧﺸﺎن ﻣﻲدﻫﺪ.
;program MediaIdP
uses ;Dos
type ;MediaPtr = ^byte
var Regs ;: Registers
MP ;: MediaPtr
begin
;Regs.AH := $1B
;) MsDos ( Regs
;) MP := Ptr (Regs.DS, Regs.BX
;) ^WriteLn ( ‘Media ID = ‘, MP
end.
دﺳﺘﺮﺳﻲ ﺑﻪ ﺣﺎﻓﻈﻪ ﺑﺎ MemW ،Memو : MemLدر ﺗﻮرﺑﻮ ﭘﺎﺳﻜﺎل از ﺳﻪ ﺗﺎﺑﻊ ازﻗﺒﻞﺗﻌﺮﻳﻒ ﺷﺪهي MemW ،Memو MemLﺑﺮاي
دﺳﺘﺮﺳﻲ ﺑﻪ ﺣﺎﻓﻈﻪ ﺑﻪﺗﺮﺗﻴﺐ ﺑﺎ اﻧﻮاع word ،byteو ) longint(dwordsﻣﻲﺗﻮان اﺳﺘﻔﺎده ﻛﺮد .از ﻳﻚ ﻧﺤﻮ ﺧﺎص ﺑﺮاي ﻛﺎر ﺑﺎ اﻳﻦ آراﻳﻪﻫﺎ اﺳﺘﻔﺎده ﻣﻲﺷﻮد ﻛﻪ در
داﺧﻞ ﻛﺮوﺷﻪﻫﺎ ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪ از ﻧﺸﺎﻧﻲ ﻣﺒﺪأ ﺑﺎ ’ ‘:ﺟﺪا ﻣﻲﺷﻮد .ﺑﺮاي ﻣﺜﺎل ﺷﻨﺎﺳﻪي رﺳﺎﻧﻪ را ﻣﻲﺗﻮان ﺑﻪ ﺻﻮرت زﻳﺮ ﻫﻢ در ﺑﺮﻧﺎﻣﻪي ﻓﻮق ﺑﺪﺳﺖ آورد:
_________________________________________________________________________________
media code ١
5-2 ﻓﺼﻞ :2ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ در ﻋﻤﻞ
ﻓﺮاﺧﻮاﻧﻲ وﻗﻔﻪﻫﺎ از :Cﻫﻢ ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي ﻣﻴﻜﺮوﺳﺎﻓﺖ و ﻫﻢ ﺑﻮرﻟﻨﺪ ،ﺗﻮاﺑﻊ )( intdos() ،int86x() ،int86و )( intdosxرا ﺑﺮاي ﻓﺮاﺧﻮاﻧﻲ
وﻗﻔﻪﻫﺎي ﻧﺮماﻓﺰاري ﻓﺮاﻫﻢ ﻣﻲﻛﻨﻨﺪ .درﺣﺎﻟﻴﻜﻪ ﺗﻮاﺑﻊ )( int86و )( int86xﻣﻲﺗﻮاﻧﻨﺪ ﻫﻤﻪي 256وﻗﻔﻪي ﭘﺮدازﻧﺪهي Intelرا ﻓﺮاﺧﻮاﻧﻲ ﻛﻨﻨﺪ ،ﺗﻮاﺑﻊ )( intdosو
)( intdosxﻣﺨﺼﻮص وﻗﻔﻪي ) 21H (0x21ﻫﺴﺘﻨﺪ ،ﻛﻪ ﺷﺎﻣﻞ ﺗﻮاﺑﻊ واﺳﻂ ﺑﺮﻧﺎﻣﻪي ﻛﺎرﺑﺮدي DOSاﺳﺖ و ﺑﻴﺶ از 200ﺗﺎﺑﻊ را ﻣﻲﭘﻮﺷﺎﻧﺪ.
اﻋﻼن اﻳﻦ ﺗﻮاﺑﻊ در ﻫﺮ دو ﻛﺎﻣﭙﺎﻳﻠﺮ در ﻓﺎﻳﻞ DOS.Hﻗﺮار دارد و ﺑﻪ ﺻﻮرت زﻳﺮ اﺳﺖ:
ﺑﺮاي ﺳﻬﻮﻟﺖ ﻧﺸﺎﻧﻲدﻫﻲ ﺑﻪ ﺛﺒﺎﺗﻬﺎي 8ﺑﻴﺘﻲ و 16ﺑﻴﺘﻲ REGS ،ﻳﻚ unionرا ﻛﻪ ﺷﺎﻣﻞ دو ﺳﺎﺧﺘﺎر WORDREGSو BYTEREGSاﺳﺖ را
ﻧﺸﺎن ﻣﻲدﻫﺪ:
{ union REGS
;struct WORDREGS x
;struct BYTEREGS h
;}
{ struct WORDREGS
;unsigned int ax, bx, cx, dx, si, di, cflag
;}
{ struct BYTEREGS
;unsigned char al, ah, bl, bh, cl, ch, dl, dh
;}
6-2 ﻓﺼﻞ :2ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ در ﻋﻤﻞ
ﺛﺒﺎﺗﻬﺎي 16ﺑﻴﺘﻲ ﭘﺮدازﻧﺪه) AXﺗﺎ (ESﺑﺎ ﻣﺘﻐﻴﺮﻫﺎي unsigned intﺑﺎ ﻧﺎﻣﻲ ﻣﺸﺎﺑﻪ در ﺳﺎﺧﺘﺎر WORDREGSﻧﺸﺎن داده ﺷﺪهاﻧﺪ .ﺛﺒﺎﺗﻬﺎي 8ﺑﻴﺘﻲ
ﭘﺮدازﻧﺪه ) ALﺗﺎ (DHﺑﺎ ﻣﺘﻐﻴﺮﻫﺎي unsigned charدر ﺳﺎﺧﺘﺎر BYTEREGSاراﺋﻪ ﺷﺪهاﻧﺪ .ﺳﺎﺧﺘﺎر REGSﻳﻚ رﻛﻮرد ﻣﺘﻐﻴﺮ اﺳﺖ ﻛﻪ ﺣﺎﻓﻈﻪﻫﺎي ﺛﺒﺎﺗﻬﺎي
16و 8ﺑﻴﺘﻲ را ﺑﻪﻃﻮر اﺷﺘﺮاﻛﻲ ﻧﺸﺎن ﻣﻲدﻫﺪ.
اﮔﺮ pregsﻣﺘﻐﻴﺮي از ﻧﻮع REGSﺑﺎﺷﺪ ،ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﺛﺒﺎﺗﻬﺎي ﭘﺮدازﻧﺪه ﻣﻲﺗﻮان ﺑﻪ ﺷﻜﻞ زﻳﺮ ﻋﻤﻞ ﻛﺮد:
- pregs.x.ax,
- pregs.x.bx,
- pregs.h.ah,
- pregs.h.dl, etc.
اﮔﺮ ﺑﺨﻮاﻫﻴﺪ ﻣﻘﺪار ) D3H (0xD3را ﻗﺒﻞ از ﻓﺮاﺧﻮاﻧﻲ وﻗﻔﻪ در ﺛﺒﺎت DLﻗﺮار دﻫﻴﺪ ،ﺑﻪﺻﻮرت زﻳﺮ ﻋﻤﻞ ﻛﻨﻴﺪ:
;pregs.h.dl = 0xD3
ﻗﺒﻞ از ﻓﺮاﺧﻮاﻧﻲ ﻳﻚ وﻗﻔﻪ ﺑﺎ ﺗﻮاﺑﻊ ﻓﻮق ،ﻣﻘﺎدﻳﺮ ﻣﻮردﻧﻈﺮ را در ﺛﺒﺎﺗﻬﺎﻳﻲ ﻛﻪ ﺑﻮﺳﻴﻠﻪي ﺗﺎﺑﻊ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﺧﻮاﻫﻨﺪ ﮔﺮﻓﺖ ،ﻗﺮار دﻫﻴﺪ .وﻗﻔﻪ ﻓﻘﻂ از
اﻃﻼﻋﺎت ﻗﺮار داده ﺷﺪه در ﺛﺒﺎﺗﻬﺎي ﻣﻮردﻧﻈﺮش اﺳﺘﻔﺎده ﻣﻲﻛﻨﺪ و از ﻣﺎﺑﻘﻲ ﺻﺮفﻧﻈﺮ ﻣﻲﻛﻨﺪ.
در ﺗﻌﺮﻳﻒ WORDREGSدﻳﺪه ﻣﻲﺷﻮد ﻛﻪ ﺛﺒﺎﺗﻬﺎي ﻗﻄﻌﻪ در اﻋﻼن ﺳﺎﺧﺘﺎر وﺟﻮد ﻧﺪارﻧﺪ .اﻳﻦ اﻣﺮ ﺑﻪ آن دﻟﻴﻞ اﺳﺖ ﻛﻪ اﻏﻠﺐ ﺗﻮاﺑﻊ ﺑﻪ اﻳﻦ ﺛﺒﺎﺗﻬﺎ ﻛﺎري
ﻧﺪارﻧﺪ .اﮔﺮ ﺗﺎﺑﻌﻲ ﺑﻪ اﻳﻦ ﺛﺒﺎﺗﻬﺎ ﻧﻴﺎز داﺷﺘﻪ ﺑﺎﺷﺪ ﺑﺎﻳﺪ از ﺗﻮاﺑﻊ )( intdosxو )( int86xاﺳﺘﻔﺎده ﻛﻨﻴﻢ ﻛﻪ ﻳﻜﻲ از ﭘﺎراﻣﺘﺮﻫﺎي آن از ﻧﻮع SREGSاﺳﺖ و در آن ﻣﻘﺎدﻳﺮ
ﺛﺒﺎﺗﻬﺎي ﻗﻄﻌﻪ ﺑﺎرﮔﺬاري ﻣﻲﺷﻮﻧﺪ .ﺗﻌﺮﻳﻒ SREGSﺑﻪﺷﻜﻞ زﻳﺮ اﺳﺖ:
{ struct SREGS
unsigned int ;es
unsigned int ;cs
unsigned int ;ss
unsigned int ;ds
;}
ﻫﻤﭽﻨﻴﻦ در ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي ﺑﻮرﻟﻨﺪ اﻣﻜﺎن دﺳﺘﺮﺳﻲ ﺑﻪ ﺛﺒﺎﺗﻬﺎ ﺑﺎ اﺳﺘﻔﺎده از ﺷﺒﻪﻣﺘﻐﻴﺮﻫﺎي 1ﺛﺒﺎﺗﻬﺎ وﺟﻮد دارد .ﺷﺒﻪﻣﺘﻐﻴﺮﻫﺎﻳﻲ ﺑﺎ ﻧﺎﻣﻬﺎي _BX ،_AXو ...و
_BH ،_AHو ...و _ESو ...و ﻧﻴﺰ _FLAGSو ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﺛﺒﺎﺗﻬﺎي ﭘﺮدازﻧﺪه وﺟﻮد دارد ﻛﻪ اﻣﻜﺎن دﺳﺘﺮﺳﻲ ﻣﺴﺘﻘﻴﻢ ﺧﻮاﻧﺪﻧﻲ و ﻧﻮﺷﺘﻨﻲ ﺑﻪ ﺛﺒﺎﺗﻬﺎ را ﻣﻲدﻫﻨﺪ.
ﻧﻮﺷﺘﻦ روال ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪي ﺟﺪﻳﺪ :ﺑﺮﻧﺎﻣﻪي زﻳﺮ ،ﻧﻤﻮﻧﻪاي از ﻳﻚ روال ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪ 1CHﺑﻪ زﺑﺎن Cو ﺑﺎ ﻛﺎﻣﭙﺎﻳﻠﺮ ﺑﻮرﻟﻨﺪ اﺳﺖ:
>#include <stdio.h
>#include <dos.h
>#include <conio.h
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
)int main(void
_________________________________________________________________________________
pseudovariables ١
7-2 ﻓﺼﻞ :2ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ در ﻋﻤﻞ
{
/* save the old interrupt vector */
;)oldhandler = getvect(INTR
/* install the new interrupt handler */
;)setvect(INTR, handler
;)”puts(“Press any key to exit
;)(getch
/* reset the old interrupt handler */
;)setvect(INTR, oldhandler
;return 0
}
ﺧﻮاﻧﺪن ﭘﺮﭼﻤﻬﺎ در ﺛﺒﺎت ﭘﺮﭼﻢ :در ﺑﺴﻴﺎري از ﺣﺎﻟﺖﻫﺎ ،ﺛﺒﺎت ﭘﺮﭼﻢ ﻣﻲﺗﻮاﻧﺪ اﻃﻼﻋﺎﺗﻲ را ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺑﺮﮔﺮداﻧﺪ .ﺗﻮاﺑﻊ DOSﺑﻪﻃﻮر ﮔﺴﺘﺮده از Carry
Flagاﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ ،ﻛﻪ ﭘﺲ از ﭘﺎﻳﺎن ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ ﻳﺎ اﺟﺮاي ﻧﺎﻣﻮﻓﻖ آن ،ﻣﻘﺪاردﻫﻲ ﻣﻲﺷﻮد .ﺑﺮاي ﺳﻬﻮﻟﺖ ﺑﺮرﺳﻲ ﭘﺮﭼﻤﻬﺎ ،ﺳﺎﺧﺘﺎر WORDREGSداراي ﻳﻚ
ﻓﻴﻠﺪ ﺑﻪﻧﺎم cflagاﺳﺖ ﻛﻪ ﻣﻘﺪار Carry Flagﭘﺲ از ﻓﺮاﺧﻮاﻧﻲ وﻗﻔﻪ در آن ﺑﺎر ﻣﻲﺷﻮد و ﻳﻜﻲ از ﻣﻘﺎدﻳﺮ 0ﻳﺎ 1را ﺧﻮاﻫﺪ داﺷﺖ .در ﺑﺮﻧﺎﻣﻪي زﻳﺮ اﻳﻦ ﭘﺮﭼﻢ ﭘﺲ از
ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ 13Hوﻗﻔﻪي 21Hﺑﺮرﺳﻲ ﻣﻲﺷﻮد:
>#include <dos.h
) void test ( void
{
;union REGS pregs
;pregs.h.ah = 0x13
;pregs.h.dl = 0
;) intdos( &pregs, &pregs
) if ( &pregs.x.cflag
; /* Carry flag set */
else
; /* Carry flag unset */
}
اﮔﺮ ﻧﻴﺎز ﺑﻪ ﺧﻮاﻧﺪن ﻫﻤﻪي ﭘﺮﭼﻤﻬﺎ ﺑﺎﺷﺪ ،در ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي ﻣﻴﻜﺮوﺳﺎﻓﺖ راهﺣﻠﻲ ﺑﺮاي آن وﺟﻮد ﻧﺪارد .وﻟﻲ در ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي ﺑﻮرﻟﻨﺪ ﻓﻴﻠﺪ دﻳﮕﺮي ﺑﻪﻧﺎم flagsدر
ﺳﺎﺧﺘﺎر WORDREGSوﺟﻮد دارد ﻛﻪ ﻫﻤﻪي ﭘﺮﭼﻤﻬﺎي ﭘﺮدازﻧﺪه را ﺑﺮﻣﻲﮔﺮداﻧﺪ .ﺑﻨﺎﺑﺮ اﻳﻦ در ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي ﺑﻮرﻟﻨﺪ دارﻳﻢ:
ﺑﺎﻓﺮﻫﺎ و زﺑﺎن :Cﺑﺴﻴﺎري از ﺗﻮاﺑﻊ وﻗﻔﻪ ﺑﻪ ﭘﺎراﻣﺘﺮﻫﺎﻳﻲ از ﻧﻮع اﺷﺎرهﮔﺮ ﺑﻪ ﺑﺎﻓﺮ ﺑﺮاي ﻓﺮاﺧﻮاﻧﻲ ﻧﻴﺎز دارﻧﺪ .اﻳﻦ ﺗﻮاﺑﻊ ﻳﺎ اﻃﻼﻋﺎت را از ﺑﺎﻓﺮ ﺑﺮﻣﻲدارﻧﺪ ﻳﺎ در
آن ﻗﺮار ﻣﻲدﻫﻨﺪ .اﻳﻦ اﺷﺎرهﮔﺮﻫﺎ ﻫﻤﻴﺸﻪ FARﺑﻮده و ﺷﺎﻣﻞ ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪ و ﻧﺸﺎﻧﻲ ﻣﺒﺪأ ﻫﺴﺘﻨﺪ .اﺷﺎرهﮔﺮﻫﺎي FARﺑﺮﺧﻼف اﺷﺎرهﮔﺮﻫﺎي ،NEARﺑﻪ دادهﻫﺎي
ﻣﻮﺟﻮد در ﻫﺮ ﺟﺎي ﺣﺎﻓﻈﻪ و ﺧﺎرج از ﻗﻄﻌﻪي ﺟﺎري ﺑﺮﻧﺎﻣﻪ ﻣﻲﺗﻮاﻧﻨﺪ اﺷﺎره ﻛﻨﻨﺪ.
ارﺳﺎل اﺷﺎرهﮔﺮﻫﺎ ﺑﻪ ﺗﻮاﺑﻊ وﻗﻔﻪ :ﺗﺎﺑﻊ ،DOS 09Hﻣﺜﺎﻟﻲ از ﻳﻚ ﺗﺎﺑﻊ اﺳﺖ ﻛﻪ ﭘﺎراﻣﺘﺮي از ﻧﻮع اﺷﺎرهﮔﺮ دارد .اﻳﻦ ﺗﺎﺑﻊ ﻳﻚ رﺷﺘﻪ را ﺑﺮ روي
ﺻﻔﺤﻪي ﻧﻤﺎﻳﺶ و از ﻧﻘﻄﻪي ﺷﺮوع ﻣﺤﻞ ﻓﻌﻠﻲ ﻣﻜﺎنﻧﻤﺎ ،ﻧﺸﺎن ﻣﻲدﻫﺪ .ﻫﻤﺎﻧﻨﺪ ﻫﻤﻪي ﺗﻮاﺑﻊ ،DOSاﻳﻦ ﺗﺎﺑﻊ اﻧﺘﻈﺎر دارد ﻛﻪ ﺷﻤﺎرهي ﺗﺎﺑﻊ در ﺛﺒﺎت AHﺑﺎﺷﺪ و ﻧﺸﺎﻧﻲ
ﺷﺮوع ﺑﺎﻓﺮ ﺣﺎوي رﺷﺘﻪاي ﻛﻪ ﻗﺮار اﺳﺖ ﻧﻤﺎﻳﺶ داده ﺷﻮد در زوج ﺛﺒﺎت DS:DXﻗﺮار داﺷﺘﻪ ﺑﺎﺷﺪ DS .ﻣﻘﺪار ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪ و DXﻧﺸﺎﻧﻲ ﻣﺒﺪأ ﺑﺎﻓﺮ اﺳﺖ.
8-2 ﻓﺼﻞ :2ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ در ﻋﻤﻞ
ﺑﺎ وﺟﻮدﻳﻜﻪ اﻳﺠﺎد رﺷﺘﻪ در زﺑﺎن Cآﺳﺎن اﺳﺖ ،وﻟﻲ ﺑﺎﻳﺪ ﺑﺪاﻧﻴﺪ ﻛﻪ ﭼﮕﻮﻧﻪ ﻧﺸﺎﻧﻲ ﺑﺎﻓﺮ رﺷﺘﻪ را ﺑﺪﺳﺖ آورده و در ﺛﺒﺎﺗﻬﺎي DSو DXﻗﺮار دﻫﻴﺪ .ﺑﺮاي اﻳﻦ
ﻣﻨﻈﻮر در ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي ﺑﻮرﻟﻨﺪ و ﻣﻴﻜﺮوﺳﺎﻓﺖ دو ﻣﺎﻛﺮو ﺑﺎ ﻧﺎﻣﻬﺎي )( FP_SEGو )( FP_OFFوﺟﻮد دارد ،ﻛﻪ ﺑﻪﺗﺮﺗﻴﺐ ﻧﺸﺎﻧﻲﻫﺎي ﻗﻄﻌﻪ و ﻣﺒﺪأ ﻳﻚ ﺷﺊ را در ﺣﺎﻓﻈﻪ
ﺑﺪﺳﺖ ﻣﻲدﻫﻨﺪ .اﻣﺎ روش ﺗﻌﺮﻳﻒ آﻧﻬﺎ در اﻳﻦ دو ﻧﻮع ﻛﺎﻣﭙﺎﻳﻠﺮ ﺑﺎ ﻫﻢ ﻣﺘﻔﺎوت اﺳﺖ:
Borland:
))#define FP_SEG( fp ) ( (unsigned )( void _seg * )( void far * ) ( fp
))#define FP_OFF( fp ) ( (unsigned )( fp
Microsoft:
))#define FP_SEG( fp ) (*((unsigned _far *) & (fp)+1
)))#define FP_OFF( fp ) (*((unsigned _far *) & (fp
درﺣﺎﻟﻴﻜﻪ ﻣﺎﻛﺮوي ﺗﻌﺮﻳﻒ ﺷﺪه ﺑﻮﺳﻴﻠﻪي ﺑﻮرﻟﻨﺪ ﻳﻚ ﻣﺘﻐﻴﺮ را ﻣﻲﭘﺬﻳﺮد ،ﻣﺎﻛﺮوي ﻣﻴﻜﺮوﺳﺎﻓﺖ ،اﺷﺎرهﮔﺮي ﺑﻪ ﻳﻚ ﻣﺘﻐﻴﺮ و از ﻧﻮع FARرا ﻗﺒﻮل ﻣﻲﻛﻨﺪ .در
ﻣﺜﺎل زﻳﺮ ﻣﺸﺎﻫﺪه ﻣﻲﻛﻨﻴﺪ ﻛﻪ ﭼﮕﻮﻧﻪ ﻣﻲﺗﻮاﻧﻴﺪ اﻳﻦ ﻣﺎﻛﺮوﻫﺎ را در دو ﻛﺎﻣﭙﺎﻳﻠﺮ ﺑﺎ ﺗﺎﺑﻊ DOS 09Hﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار دﻫﻴﺪ .اﻳﻦ ﺑﺮﻧﺎﻣﻪ از ﺗﺎﺑﻊ DOS 09Hﺑﺮاي
ﻧﻤﺎﻳﺶ رﺷﺘﻪي ﻣﻮﺟﻮد در ﻣﺘﻐﻴﺮ ﭘﻴﻐﺎم ﺑﺮ روي ﺻﻔﺤﻪي ﻧﻤﺎﻳﺶ اﺳﺘﻔﺎده ﻣﻲﻛﻨﺪ .ﺑﺮﺧﻼف ﺳﺎﻳﺮ ﺗﻮاﺑﻊ ،DOSﺗﺎﺑﻊ 09Hﻧﻴﺎز ﺑﻪ ﻣﺸﺨﺺ ﺷﺪن ﭘﺎﻳﺎن رﺷﺘﻪ ﺑﺎ ﻛﺎراﻛﺘﺮ
’ ‘$دارد ،ﻧﻪ ﺑﺎﻳﺖ . null
درﻳﺎﻓﺖ اﺷﺎرهﮔﺮﻫﺎ از ﺗﻮاﺑﻊ وﻗﻔﻪ :ﺑﺮﻧﺎﻣﻪي زﻳﺮ ﺗﺎﺑﻊ DOS 1BHرا ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﻛﻨﺪ ﻛﻪ ﻳﻚ اﺷﺎرهﮔﺮ را در زوج ﺛﺒﺎت DS:BXﺑﺮﻣﻲﮔﺮداﻧﺪ.
اﻳﻦ اﺷﺎرهﮔﺮ ﺑﻪ ﻳﻚ ﺑﺎﻳﺖ ﻛﻪ ﺷﺎﻣﻞ ﻛﺪ رﺳﺎﻧﻪي ﮔﺮداﻧﻨﺪهي ﺟﺎري اﺳﺖ ،اﺷﺎره ﻣﻲﻛﻨﺪ DOS .از ﻛﺪﻫﺎي رﺳﺎﻧﻪ F0Hﺗﺎ FFHﺑﺮاي ﺗﻮﺻﻴﻒ اﻧﻮاع ﻣﺨﺘﻠﻒ ﮔﺮداﻧﻨﺪهﻫﺎ
اﺳﺘﻔﺎده ﻣﻲﻛﻨﺪ .ﻣﻘﺪار F8Hﻫﻤﻪي اﻧﻮاع دﻳﺴﻚ ﺳﺨﺖ را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ.
ﺑﺮاي ﺗﻌﻴﻴﻦ ﺷﻨﺎﺳﻪي رﺳﺎﻧﻪ از اﺷﺎرهﮔﺮ ﺑﺮﮔﺸﺘﻲ ،ﻧﻴﺎز ﺑﻪ ﻳﻚ اﺷﺎرهﮔﺮ FARاﺳﺖ .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر در DOS.Hﻳﻚ ﻣﺎﻛﺮو ﺑﻪ ﻧﺎم MK_FPﺗﻌﺮﻳﻒ
ﺷﺪه اﺳﺖ و ﺑﺎ اﺳﺘﻔﺎده از ﻧﺸﺎﻧﻲﻫﺎي ﻗﻄﻌﻪ و ﻣﺒﺪأ ،ﻳﻚ اﺷﺎرهﮔﺮ FARاﻳﺠﺎد ﻣﻲﻛﻨﺪ .ﺗﻌﺮﻳﻒ اﻳﻦ ﻣﺎﻛﺮو در ﺑﺮﻧﺎﻣﻪي زﻳﺮ آﻣﺪه اﺳﺖ .در اﻳﻦ ﺑﺮﻧﺎﻣﻪ mpﺑﻪﻋﻨﻮان ﻣﺘﻐﻴﺮي
farو از ﻧﻮع unsigned charﺗﻌﺮﻳﻒ ﺷﺪه اﺳﺖ .ﭘﺲ از ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ ،DOS 1BHﺑﺮﻧﺎﻣﻪ اﺷﺎرهﮔﺮ ﺑﺮﮔﺸﺘﻲ را ﭘﺲ از ﺑﺪﺳﺖآوردن از زوج ﺛﺒﺎت DS:BXدر
mpﻗﺮار ﻣﻲدﻫﺪ .ﺑﺮﻧﺎﻣﻪ ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر از ﻣﺎﻛﺮوي MK_FPاﺳﺘﻔﺎده ﻣﻲﻛﻨﺪ .اﻳﻦ اﺷﺎرهﮔﺮ ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ اﻃﻼﻋﺎت ﻣﻮرد اﺷﺎره ،ﻗﺎﺑﻞ اﺳﺘﻔﺎده اﺳﺖ .دﺳﺘﻮر
printfدر ﭘﺎﻳﺎن ﺑﺮﻧﺎﻣﻪ اﻳﻦ ﻣﺴﺄﻟﻪ را ﻧﺸﺎن ﻣﻲدﻫﺪ.
>#include <dos.h
>#include <stdio.h
#ifndef MK_FP
)))#define MK_FP ( seg, ofs) ( (void far * ) ((unsigned long) (seg) << 16)(ofs
#endif
9-2 ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻴﺴﺘﻢ در ﻋﻤﻞ:2 ﻓﺼﻞ
ﺗﻮاﺑﻊ ﻣﺘﻌﺪدي ﺑﺮاي ﻛﺎر ﺑﺎ درﮔﺎهﻫﺎ ﻣﻌﺮﻓﻲ ﺷﺪهاﻧﺪ ﻛﻪ در ﺑﻮرﻟﻨﺪ در، ﻫﻢ در ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي ﺑﻮرﻟﻨﺪ و ﻫﻢ ﻣﻴﻜﺮوﺳﺎﻓﺖ:C دﺳﺘﺮﺳﻲ ﺑﻪ درﮔﺎهﻫﺎ در
: ﺗﻌﺮﻳﻒ اﻳﻦ ﺗﻮاﺑﻊ در دو ﻧﻮع ﻛﺎﻣﭙﺎﻳﻠﺮ ﺑﺎ ﻫﻢ ﻣﺘﻔﺎوت اﺳﺖ. ﺗﻌﺮﻳﻒ ﺷﺪهاﻧﺪCONIO.H و در ﻣﻴﻜﺮوﺳﺎﻓﺖ درDOS.H
: ﺧﻮاﻧﺪه ﻣﻲﺷﻮد، اﺳﺖEGA/VGA ﻛﻪ ﺑﺨﺸﻲ از ﻛﻨﺘﺮﻟﺮ ﮔﺮاﻓﻴﻜﻲ در ﻳﻚ ﻛﺎرت،3C4H در ﻣﺜﺎل زﻳﺮ ﻣﺤﺘﻮي درﮔﺎه
1-3ﻣﻘﺪﻣﻪ
ﺑﺴﻴﺎري از ﻛﺎرﺑﺮان اﺻﻄﻼح ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ در PCرا ﺑﺎ DOSﺑﺮاﺑﺮ ﻣﻲداﻧﻨﺪ .اﻣﺎ DOS ،ﺗﻨﻬﺎ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ در PCﻧﻴﺴﺖ .ﻗﺒﻞ از آﻧﻜﻪ ﮔﺮداﻧﻨﺪه دﻳﺴﻚ
ﺳﺨﺖ در ﺳﻴﺴﺘﻢ ﺷﻨﺎﺧﺘﻪ ﺷﺪه ﺑﺎﺷﺪ PC ،ﺑﺮاي BIOSﺟﺴﺘﺠﻮ ﻣﻲﻛﻨﺪ ،ﺗﺎ رواﻟﻬﺎي ﻣﺒﻨﺎﻳﻲ ورودي و ﺧﺮوﺟﻲ ﻣﻮرد ﻧﻴﺎز ﺑﺮاي ارﺗﺒﺎط ﺳﺨﺖاﻓﺰار و ﻧﺮماﻓﺰار در اﺧﺘﻴﺎر
ﺑﮕﻴﺮد BIOS .ﺑﺮ روي ﻳﻚ ROMدر ﺣﺎﻓﻈﻪي در ﺑﺮد اﺻﻠﻲ PCوﺟﻮد دارد و ﺑﻼﻓﺎﺻﻠﻪ ﭘﺲ از روﺷﻦ ﺷﺪن ،PCدر دﺳﺘﺮس اﺳﺖ BIOS .ﺷﺎﻣﻞ ﻫﻤﻪي رواﻟﻬﺎي
اﺳﺎﺳﻲ ﻣﻮردﻧﻴﺎز PCﺑﺮاي ارﺗﺒﺎط ﺑﺎ ﺳﺨﺖاﻓﺰار و ﻟﻮازم ﺟﺎﻧﺒﻲ اﺳﺖ .اﻳﻦ رواﻟﻬﺎ ﺷﺎﻣﻞ دﺳﺘﻮرات ﻣﺪﻳﺮﻳﺖ ﺧﺮوﺟﻲ ﺻﻔﺤﻪﻧﻤﺎﻳﺶ ،ﺧﺮوﺟﻲ ﭼﺎﭘﻲ ،ﺗﺎرﻳﺦ ،زﻣﺎن و ﻏﻴﺮه اﺳﺖ.
ﭼﺮا BIOSﻣﻬﻢ اﺳﺖ؟ از آﻧﺠﺎﻳﻲ ﻛﻪ ﺗﻮاﺑﻊ BIOSاﺳﺘﺎﻧﺪارد ﻫﺴﺘﻨﺪ ،ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲ ﻣﺠﺒﻮر ﺑﻪ ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ ﺑﺮاي ﻳﻚ PCﺑﺎ ﭘﻴﻜﺮهﺑﻨﺪي
ﺳﺨﺖاﻓﺰاري ﺧﺎص ﻧﻴﺴﺖ .ﺑﻪ اﻳﻦ ﻣﻌﻨﻲ ﻛﻪ ﺑﺮﻧﺎﻣﻪ را ﻣﻲﺗﻮان ﺑﺮ روي ﻳﻚ PCﻧﻮﺷﺖ و آﻧﺮا ﺑﺮ روي ﻫﻤﻪي PCﻫﺎي ﺳﺎزﮔﺎر 1ﺑﺎ آن ﺑﺪون ﺧﻄﺎ اﺟﺮا ﻧﻤﻮد ،ﺣﺘﻲ اﮔﺮ
ﺳﺨﺖاﻓﺰار ﻳﺎ رواﻟﻬﺎي ﺧﺎﺻﻲ از BIOSآﻧﻬﺎ ﺑﺎ ﻫﻢ ﺑﻪﻃﻮر ﻛﺎﻣﻞ ﺳﺎزﮔﺎر ﻧﺒﺎﺷﺪ.
BIOSﺑﺨﺶ ﻣﻬﻤﻲ از PCاﺳﺖ .ﻣﻬﻢ ﻧﻴﺴﺖ ﻛﻪ PCﺳﺎﺧﺖ ﻛﺪام ﺷﺮﻛﺖ اﺳﺖ ﻳﺎ ﻇﺮﻓﻴﺖ دﻳﺴﻚ ﺳﺨﺖ آن ﭼﻨﺪ ﻣﮕﺎﺑﺎﻳﺖ اﺳﺖ .ﻣﻬﻢ اﻳﻦ اﺳﺖ ﻛﻪ در
ﻫﺮ ﺣﺎل ،ﺗﻮاﺑﻊ ﭘﺸﺘﻴﺒﺎﻧﻲ دﻳﺴﻚ ﺳﺨﺖ در ،BIOSﻳﻜﺴﺎن ﻫﺴﺘﻨﺪ.
،BIOSواﺑﺴﺘﻪ ﺑﻪ ﺳﺨﺖاﻓﺰار اﺳﺖ و ﻋﺎﻣﻞ اﺻﻠﻲ ﻣﺮﺳﻮم ﺷﺪن PCاﺳﺖ ،BIOS .ﺳﺎزﻧﺪﮔﺎن ﻣﺨﺘﻠﻒ PCرا ﻗﺎدر ﻣﻲﺳﺎزد ﻛﻪ ﻳﻚ PCﻣﺘﻔﺎوت ﺑﺎ
IBM PCﺑﺴﺎزﻧﺪ ،اﻣﺎ داراي BIOSﻳﻜﺴﺎﻧﻲ ﺑﺎ آن ﺑﺎﺷﺪ و ﺑﺘﻮاﻧﺪ ﺑﺮﻧﺎﻣﻪﻫﺎﻳﻲ را ﻛﻪ ﺑﺮ روي آن اﺟﺮا ﻣﻲﺷﻮﻧﺪ ،اﺟﺮا ﻛﻨﺪ.
ﭼﻨﺪﻳﻦ ﺷﺮﻛﺖ ﺗﺮاﺷﻪﻫﺎي BIOSرا ﻣﻲﺳﺎزﻧﺪ ﻛﻪ ﻣﻲﺗﻮان از Award ،Phoenix ،AMIو Quadtelﻧﺎم ﺑﺮد .ﮔﺮﭼﻪ اﻳﻦ BIOSﻫﺎ داراي
ﺗﻔﺎوﺗﻬﺎﻳﻲ ﺑﺎ ﻫﻢ ﻫﺴﺘﻨﺪن ،وﻟﻲ وﻇﺎﻳﻒ اﺳﺎﺳﻲ آﻧﻬﺎ ﻳﻜﺴﺎن اﺳﺖ.
2-3اﺳﺘﺎﻧﺪارد BIOS
،IBMاﻧﻮاع ﻣﺨﺘﻠﻒ ﺗﻮاﺑﻊ BIOSو ﭘﺎراﻣﺘﺮﻫﺎي ﻣﻮرد ﻧﻴﺎز در PCرا ﺗﻌﺮﻳﻒ ﻧﻤﻮده اﺳﺖ 256 .وﻗﻔﻪ در BIOSوﺟﻮد دارد ﻛﻪ ﺑﻪ ﺗﻮاﺑﻊ ﺗﻘﺴﻴﻢ ﺷﺪهاﻧﺪ.
اﻳﻦ ﺗﻮاﺑﻊ ارﺗﺒﺎط ﺑﺎ ﺳﺨﺖاﻓﺰار را ﻣﻴﺴﺮ ﻣﻲﺳﺎزﻧﺪ .در ﺟﺪول زﻳﺮ اﻳﻦ ﺗﻮاﺑﻊ ﻧﻤﺎﻳﺶ دادهﺷﺪهاﻧﺪ BIOS .ﺑﻪ ﺑﺮﺧﻲ از وﻗﻔﻪﻫﺎ ﺑﻪﻋﻨﻮان ﻣﺘﻐﻴﺮ ﻧﮕﺎه ﻣﻲﻛﻨﺪ ،ﻧﻈﻴﺮ ﺗﻮاﺑﻊ ﻛﺎرت
وﻳﺪﺋﻮﻳﻲ و ﮔﺮداﻧﻨﺪهي دﻳﺴﻚ ﺳﺨﺖ .در اﻳﻦ ﺑﺎره در اداﻣﻪ ﺑﻴﺸﺘﺮ ﺗﻮﺿﻴﺢ داده ﺧﻮاﻫﺪ ﺷﺪ.
Number Meaning
10H Video card access
11H Configuration test
12H RAM test
13H BIOS disk functions
14H Serial interface functions
15H Cassette and extended AT functioms
16H Keyboard functions
17H Parallel interface functions
1AH Date/tme/realtime clock functions
_________________________________________________________________________________
compatilbe ١
2-3 ﻓﺼﻞ :3ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎﻳﻲ ورودي /ﺧﺮوﺟﻲ
C> debug
ﻓﺮﻣﺎن زﻳﺮ را وارد ﻛﻨﻴﺪ:
-q
>C
ﺗﻌﻴﻴﻦ ﻧﻮع :PCﺗﻮاﺑﻊ ﻣﻌﻴﻨﻲ از BIOSﺑﺮاي ﺷﻨﺎﺳﺎﻳﻲ ﻣﺪل PCﺑﻪﻛﺎر ﻣﻲرود .ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲ ﻣﻲﺗﻮاﻧﺪ ﻣﺪل PCرا از ﺑﺎﻳﺘﻲ ﻛﻪ در آﺧﺮﻳﻦ ﻣﻜﺎن
ROM-BIOSدر ﻧﺸﺎﻧﻲ F000:FFFEﻗﺮار دارد ،ﺷﻨﺎﺳﺎﻳﻲ ﻛﻨﺪ .اﻳﻦ ﺑﺎﻳﺖ ﻣﻤﻜﻦ اﺳﺖ ﺷﺎﻣﻞ ﻳﻜﻲ از ﻛﺪﻫﺎي زﻳﺮ ﺑﺎﺷﺪ:
FCH AT
FEH XT
FBH
FFH PC
اﻳﻦ ﻣﻘﺎدﻳﺮ دﻗﻴﻖ ﻧﻴﺴﺘﻨﺪ و ﺗﻨﻬﺎ در ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎي ﺳﺎﺧﺖ ﺷﺮﻛﺖ IBMﺑﻪﻃﻮر دﻗﻴﻖ ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲﺷﻮﻧﺪ و ﺑﻪ دﻟﻴﻞ ﺗﻔﺎوﺗﻬﺎي ﺟﺰﺋﻲ در BIOSﻫﺎي ﺳﺎﺧﺖ
ﺷﺮﻛﺘﻬﺎي ﻣﺨﺘﻠﻒ اﻳﻦ روش ﺑﺮاي ﺷﻨﺎﺳﺎﻳﻲ ﻣﺪل ،PCروش ﻛﺎﻣﻠﻲ ﻧﻴﺴﺖ.
4-3ﻣﺘﻐﻴﺮﻫﺎي BIOS
BIOSدر 256ﺑﺎﻳﺖ ﺣﺎﻓﻈﻪ ) ،(RAMﻛﻪ ﻣﺤﺪودهي ﻣﺘﻐﻴﺮ 1BIOSﻳﺎ ﻗﻄﻌﻪي ﻣﺘﻐﻴﺮ 2BIOSﻧﺎﻣﻴﺪه ﻣﻲﺷﻮد ،ﻣﺘﻐﻴﺮﻫﺎي داﺧﻠﻲ ﺧﻮد را ذﺧﻴﺮه
ﻣﻲﻛﻨﺪ .اﻳﻦ روش ﺑﻪﺻﻮرت اﺳﺘﺎﻧﺪارد در ﻫﻤﻪي اﻧﻮاع BIOSﻫﺎ وﺟﻮد دارد ،زﻳﺮا ﺑﻮﺳﻴﻠﻪي ﺑﺴﻴﺎري از ﺗﻮاﺑﻊ DOSاﺳﺘﻔﺎده ﻣﻲﺷﻮد .در ﻓﻬﺮﺳﺖ زﻳﺮ ﻣﺘﻐﻴﺮﻫﺎي ﻣﺨﺘﻠﻒ،
اﻫﺪاف و ﻧﺸﺎﻧﻲ ﻣﺒﺪأ آﻧﻬﺎ ﻣﺸﺨﺺ ﺷﺪه اﺳﺖ .ﻧﺸﺎﻧﻲ ﻛﺎﻣﻞ از ﺗﻠﻔﻴﻖ ﻧﺸﺎﻧﻲ ﻣﺒﺪأ ﺑﺎ ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪي 0040Hﺑﺪﺳﺖ ﻣﻲآﻳﺪ .ﺑﺮاي ﻣﺜﺎل ﻧﺸﺎﻧﻲ ﻳﻚ ﻣﺘﻐﻴﺮ ﺑﺎ ﻣﺒﺪأ ،10H
0040H:0010Hاﺳﺖ.
در ﻫﻨﮕﺎم روﺷﻦ ﺷﺪن ،PCﺗﺴﺖ ﺧﻮدﻛﺎر زﻣﺎن روﺷﻦﺷﺪن ﻳﺎ ،3POSTﭘﻴﻜﺮهﺑﻨﺪي ﺳﻴﺴﺘﻢ را ﺗﻌﻴﻴﻦ ﻣﻲﻛﻨﺪ .ﻳﻜﻲ از ﻣﻮاردي ﻛﻪ ﺟﺰو ﭘﻴﻜﺮهﺑﻨﺪي ﺳﻴﺴﺘﻢ
اﺳﺖ ،ﻧﺸﺎﻧﻲ واﺳﻄﻬﺎي ﺳﺮﻳﺎل ﻳﺎ RS-232اﺳﺖ ،ﻛﻪ ﺑﺎ COM1ﺗﺎ COM4ﻣﺸﺨﺺ ﻣﻲﺷﻮﻧﺪ .ﺑﻪ ﺗﻌﺪادي ﻛﻪ واﺳﻂ ﺳﺮﻳﺎل ﻧﺼﺐ ﺷﺪه اﺳﺖ ،ﻧﺸﺎﻧﻲ درﮔﺎه آﻧﻬﺎ
ﺗﻌﻴﻴﻦ ﺷﺪه و در ﭼﻬﺎر ﻛﻠﻤﻪ ﭘﺸﺖﺳﺮ ﻫﻢ ﻛﻪ از ﻧﺸﺎﻧﻲ ﻣﺒﺪأ 00Hﺷﺮوع ﻣﻲﺷﻮﻧﺪ ،ﻗﺮار ﻣﻲدﻫﺪ.
_________________________________________________________________________________
BIOS variable segment ١
BIOS variable range ٢
Power On Self Test ٣
3-3 ﺧﺮوﺟﻲ/ ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎﻳﻲ ورودي:3 ﻓﺼﻞ
ﺗﻌﺪاد واﺳﻄﻬﺎي ﺳﺮﻳﺎل و ﻣﻮازي و ﻏﻴﺮه ﺑﺎ اﻳﻦ ﻳﻚ، ﺣﺎﻟﺖ وﻳﺪﺋﻮﻳﻲ، از ﻗﺒﻴﻞ ﺗﻌﺪاد ﮔﺮداﻧﻨﺪهﻫﺎي دﻳﺴﻚ ﺳﺨﺖ،ﺳﺎﻳﺮ اﻃﻼﻋﺎت ﻣﺮﺑﻮط ﺑﻪ ﭘﻴﻜﺮهﺑﻨﺪي ﺳﻴﺴﺘﻢ
.ﻛﻠﻤﻪ ﺗﻌﻴﻴﻦ ﻣﻲﺷﻮﻧﺪ
1-4ﻣﻘﺪﻣﻪ
ﻛﺎرﺗﻬﺎي وﻳﺪﺋﻮﻳﻲ ﻣﺨﺘﻠﻔﻲ ،از ﻗﺒﻴﻞ ،VGA ،EGA ،CGA ،MDAو Herculesﺗﺎﻛﻨﻮن ﻣﻌﺮﻓﻲ ﺷﺪهاﻧﺪ و اﺳﺘﺎﻧﺪارد واﺣﺪي در اﻳﻦ زﻣﻴﻨﻪ وﺟﻮد
ﻧﺪارد .ﺣﺘﻲ ﺑﺮﺧﻲ از اﻧﻮاع ﻛﺎرﺗﻬﺎي ﺟﺪﻳﺪ ،ﻧﻈﻴﺮ Super VGAو ،TIGAﺧﻮد ﻧﻴﺰ داراي ﮔﻮﻧﻪﻫﺎي ﻣﺘﻔﺎوﺗﻲ ﻫﺴﺘﻨﺪ .ﺗﻔﺎوت ﮔﻮﻧﻪﻫﺎي ﻣﺨﺘﻠﻒ ﻛﺎرﺗﻬﺎي ﮔﺮاﻓﻴﻜﻲ در
وﺿﻮ ِح 1ﺗﺼﻮﻳﺮ ،ﻛﺎرآﻳﻲ ﻳﺎ ﺳﺮﻋﺖ ﻧﻤﺎﻳﺶ اﻃﻼﻋﺎت ،ﻣﻴﺰان ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ 2و روش ﻛﺪﺑﻨﺪي اﻃﻼﻋﺎت ﺟﻬﺖ ﻧﻤﺎﻳﺶ اﺳﺖ.
ﺑﺮﺧﻲ از ﻣﻬﻤﺘﺮﻳﻦ ﮔﻮﻧﻪﻫﺎي ﻛﺎرﺗﻬﺎي ﮔﺮاﻓﻴﻜﻲ ،ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺳﺎﺑﻘﻪي آﻧﻬﺎ ﺑﻪ ﺻﻮرت زﻳﺮ اﺳﺖ:
) :Monochrome Display Adapter (MDAﺑﻪ ﻫﻤﺮاه CGAاز ﻗﺪﻳﻤﻲﺗﺮﻳﻦ اﻧﻮاع ﻛﺎرﺗﻬﺎي ﮔﺮاﻓﻴﻜﻲ اﺳﺖ و ﻫﻤﺮاه ﺑﺎ ﻣﻌﺮﻓﻲ ،IBM PCدر •
ﺳﺎل ،1981ﻋﺮﺿﻪ ﺷﺪ .اﻳﻦ ﻛﺎرت ﻓﻘﻂ ﻳﻚ ﺣﺎﻟﺖ ﻋﻤﻠﻴﺎﺗﻲ 3را ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲﻛﻨﺪ ﻛﻪ ﻧﻤﺎﻳﺶ ﻣﺘﻦ ﺗﻚ رﻧﮓ ،در ﻗﺎﻟﺐ 80ﺳﺘﻮن و 25ردﻳﻒ اﺳﺖ .اﻳﻦ ﻛﺎرت
داراي ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﺑﺴﻴﺎر ﻛﻤﻲ اﺳﺖ و ﺗﻨﻬﺎ ﻳﻚ ﺻﻔﺤﻪ ﻧﻤﺎﻳﺸﻲ را ﻣﻲﺗﻮاﻧﺪ در RAMﻧﮕﻬﺪاري ﻛﻨﺪ .ﻫﻤﭽﻨﻴﻦ اﻳﻦ ﻧﻮع ﻛﺎرت ﻧﻤﻲﺗﻮاﻧﺪ ﮔﺮاﻓﻴﻚ را ﻧﻤﺎﻳﺶ
دﻫﺪ.
) :Color/Graphics Adapter (CGAاﻳﻦ ﻧﻮع ﻛﺎرت ﻧﻴﺰ در ﺳﺎل 1981ﻣﻌﺮﻓﻲ ﺷﺪ و ﺗﻮاﻧﺎﻳﻲ ﻧﻤﺎﻳﺶ ﮔﺮاﻓﻴﻚ و ﻣﺘﻨﻬﺎي رﻧﮕﻲ را داﺷﺖ .ﻛﺴﺎﻧﻲ ﻛﻪ از •
اﻳﻦ ﻧﻮع ﻛﺎرت اﺳﺘﻔﺎده ﻣﻲﻛﺮدﻧﺪ ﻣﻲﺗﻮاﻧﺴﺘﻨﺪ از ﺗﻠﻮﻳﺰﻳﻮن ﺑﻪ ﺟﺎي ﺻﻔﺤﻪﻧﻤﺎﻳﺶ 4اﺳﺘﻔﺎده ﻛﻨﻨﺪ .اﻳﻦ ﻧﻮع ﻛﺎرت ﺗﻮاﻧﺎﻳﻲ ﺗﻮﻟﻴﺪ ﺧﺮوﺟﻲ RGBرا داﺷﺖ ﻛﻪ در اﻳﻦ
روش ،از ﺳﻴﮕﻨﺎﻟﻬﺎي اﻟﻜﺘﺮﻳﻜﻲ ﻣﺘﻔﺎوﺗﻲ ﺑﺮاي رﻧﮕﻬﺎي ﻗﺮﻣﺰ ،ﺳﺒﺰ و آﺑﻲ اﺳﺘﻔﺎده ﻣﻲﺷﻮد .اﻳﻦ ﻧﻮع ﻛﺎرت ﻧﻴﺰ در ﺣﺎﻟﺖ ﻣﺘﻦ 80 ،ﺳﺘﻮن در 25ردﻳﻒ را ﻧﻤﺎﻳﺶ
ﻣﻲدﻫﺪ و در ﺣﺎﻟﺖ ﮔﺮاﻓﻴﻚ داراي وﺿﻮح 320x200ﻧﻘﻄﻪ 5ﺑﺎ ﭼﻬﺎر رﻧﮓ اﺳﺖ.
) :Hercules Graphics Card (HGCدر ﻫﻤﺎن زﻣﺎﻧﻬﺎ ،ﻛﺎرت دﻳﮕﺮي ﻛﻪ از ﻫﺮﺟﻬﺖ ﻣﺸﺎﺑﻪ MDAﺑﻮد وﻟﻲ ﺗﻮاﻧﺎﻳﻲ ﻧﻤﺎﻳﺶ ﮔﺮاﻓﻴﻚ را ﻧﻴﺰ داﺷﺖ، •
ﻣﻌﺮﻓﻲ ﺷﺪ .اﻳﻦ ﻧﻮع ﻛﺎرت ﺗﻮاﻧﺎﻳﻲ ﻧﻤﺎﻳﺶ ﮔﺮاﻓﻴﻚ ﺑﺎ وﺿﻮح 720x348ﻧﻘﻄﻪ را در دو ﺻﻔﺤﻪ دارد.
) :Enhanced Graphics Adapter (EGAاﻳﻦ ﻛﺎرت در ﺳﺎل 1985ﻣﻌﺮﻓﻲ ﺷﺪ و ﺿﻤﻦ ﻓﺮاﻫﻢﺳﺎزي وﺿﻮح ﺑﻬﺘﺮ ،داراي ﻗﻴﻤﺖ ﻛﻤﺘﺮي ﺑﻮد .اﻳﻦ ﻧﻮع •
ﻛﺎرت وﺿﻮح 640x350ﻧﻘﻄﻪ را ﺑﺎ 16رﻧﮓ در ﻳﻚ زﻣﺎن و 64ﺳﺮيرﻧﮓ 6ﻓﺮاﻫﻢ ﻣﻲﻛﻨﺪ .اﻳﻦ ﻧﻮع ﻛﺎرت داراي ﺣﺪاﻛﺜﺮ 256Kﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﺑﻮد.
EGAﺑﻮﺳﻴﻠﻪي ROM-BIOSاﺳﺘﺎﻧﺪار ﭘﺸﺘﻴﺒﺎﻧﻲ ﻧﻤﻲﺷﻮد ،ﺑﻠﻜﻪ ،EGA ROM-BIOSﺑﻪﺟﺎي BIOSاﺳﺘﺎﻧﺪارد ﺳﻴﺴﺘﻢ ﻗﺮار ﮔﺮﻓﺘﻪ و اﻣﻜﺎن دﺳﺘﺮﺳﻲ
ﺑﻪ ﻗﺎﺑﻠﻴﺖﻫﺎي اﻳﻦ ﻧﻮع ﻛﺎرت را ﻓﺮاﻫﻢ ﻣﻲﺳﺎزد .ﻏﻴﺮ از ،IBMﻋﺪهي دﻳﮕﺮي از ﺳﺎزﻧﺪﮔﺎن ،ﺷﺮوع ﺑﻪ ﺗﻮﻟﻴﺪ ﮔﻮﻧﻪﻫﺎي دﻳﮕﺮي از EGAﻧﻤﻮدﻧﺪ ﻛﻪ ﺣﺎﻟﺘﻬﺎي
ﻋﻤﻠﻴﺎﺗﻲ دﻳﮕﺮي را ﻓﺮاﻫﻢ ﻣﻲﻛﺮد ،وﻟﻲ ﺑﺎ EGAﺳﺎﺧﺖ ،IBMﻧﺎﺳﺎزﮔﺎر ﺑﻮدﻧﺪ .اﻳﻦ ﻣﺴﺄﻟﻪ ،ﻛﺎر ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﺎن را دﭼﺎر ﻣﺸﻜﻞ ﻧﻤﻮد.
) :Video Graphics Array (VGAاﻳﻦ ﻧﻮع ﻛﺎرت در ﺳﺎل 1987و ﻫﻤﺰﻣﺎن ﺑﺎ ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎي ،IBM PS/2ﻣﻌﺮﻓﻲ ﺷﺪ و ﭼﻮن از ﻓﻦآورﻳﻬﺎي ﺟﺪﻳﺪﺗﺮ •
اﺳﺘﻔﺎده ﻣﻲﻛﺮد ،رﻧﮕﻬﺎي ﺑﻴﺸﺘﺮ ،وﺿﻮح ﺑﺎﻻﺗﺮ و ﻧﻤﺎﻳﺶ ﺑﻬﺘﺮ ﻣﺘﻦ را ﻓﺮاﻫﻢ ﻧﻤﻮد .ﺑﺮ ﺧﻼف ،EGAﻛﺎرﺗﻬﺎي VGAﺳﻴﮕﻨﺎﻟﻬﺎي رﻧﮓ را ﺑﻪﺻﻮرت آﻧﺎﻟﻮگ ﺑﻪ
ﺻﻔﺤﻪﻧﻤﺎﻳﺶ ارﺳﺎل ﻣﻲﻛﻨﻨﺪ ،ﻧﻪ دﻳﺠﻴﺘﺎل .ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ ،ﻛﺎرﺗﻬﺎي ،VGAﺑﻴﺶ از 260000رﻧﮓ ﻣﺘﻔﺎوت را در ﺣﺎﻟﺘﻬﺎي ﻋﻤﻠﻴﺎﺗﻲ 16 ،4 ،2و 256ﻧﻤﺎﻳﺶ
ﻣﻲدﻫﻨﺪ .اﻳﻦ ﻧﻮع ﻛﺎرت وﺿﻮح 640x480را ﺑﺎ ،4 ،2ﻳﺎ 16رﻧﮓ ،ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺣﺎﻟﺖ ﻋﻤﻠﻴﺎﺗﻲ اﻧﺘﺨﺎبﺷﺪه ،ﻓﺮاﻫﻢ ﻣﻲﻛﻨﺪ .در ﻳﻚ ﺣﺎﻟﺖ ﻋﻤﻠﻴﺎﺗﻲ دﻳﮕﺮ ،ﺑﺎ وﺿﻮح
256 ،320x200رﻧﮓ ﻗﺎﺑﻞ ﻧﻤﺎﻳﺶ اﺳﺖ .اﻳﻦ ﻧﻮع ﻛﺎرت داراي ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ 256Kاﺳﺖ ﻛﻪ ﺗﺎ 512Kﻧﻴﺰ ﻗﺎﺑﻞ اﻓﺰاﻳﺶ اﺳﺖ .اﻳﻦ ﻧﻮع ﻛﺎرت ﻧﻴﺰ
داراي ROM-BIOSﺧﺎص ﺧﻮد اﺳﺖ و ﺗﻮﻟﻴﺪ ﻛﻨﻨﺪﮔﺎن ﻣﺨﺘﻠﻒ ،از اﺳﺘﺎﻧﺪارد ﻳﻜﺴﺎﻧﻲ ﺗﺒﻌﻴﺖ ﻧﻜﺮدهاﻧﺪ.
:Super VGAاﻳﻦ ﻧﻮع ﻛﺎرت داراي ﺳﺨﺖاﻓﺰاري ﻣﺸﺎﺑﻪ ﺑﺎ VGAاﺳﺖ ،اﻣﺎ ﻧﻘﻄﻪﻫﺎ را ﺳﺮﻳﻊﺗﺮ و ﺑﺎ ﺗﻌﺪاد رﻧﮓ ﺑﻴﺸﺘﺮ و وﺿﻮح ﺑﺎﻻﺗﺮ ﻧﻤﺎﻳﺶ ﻣﻲدﻫﺪ. •
ﺿﻤﻦآﻧﻜﻪ ،ﺗﻤﺎﻣﻲ ﺣﺎﻟﺘﻬﺎي ﻋﻤﻠﻴﺎﺗﻲ VGAرا ﻧﻴﺰ ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲﻛﻨﺪ .در ﺣﺎﻟﻴﻜﻪ VGA ،در ﺣﺎﻟﺖ ﭼﻬﺎرم ﺗﻮاﻧﺎﻳﻲ ﻧﻤﺎﻳﺶ 320x200ﻧﻘﻄﻪ را ﺑﺎ 256رﻧﮓ
داﺷﺖ ،ﻛﺎرﺗﻬﺎي ،Super VGAﺳﻪ ﺣﺎﻟﺖ ﻋﻤﻠﻴﺎﺗﻲ دﻳﮕﺮ را ﻧﻴﺰ دارﻧﺪ ﻛﻪ وﺿﻮح ،640x350 ،640x200و 640x480را ﺑﺎ 256رﻧﮓ ﺗﺄﻣﻴﻦ ﻣﻲﻛﻨﻨﺪ.
ﺣﺎﻟﺘﻬﺎي ﻋﻤﻠﻴﺎﺗﻲ دﻳﮕﺮي ﻧﻴﺰ وﺟﻮد دارﻧﺪ ﻛﻪ وﺿﻮح 800x600و 1024x768ﻧﻘﻄﻪ را ﻧﻴﺰ ،در ﺻﻮرﺗﻲ ﻛﻪ از ﻳﻚ ﺻﻔﺤﻪﻧﻤﺎﻳﺶ ﺳﺎزﮔﺎر ﺑﺎ VGAﻳﺎ
Multiscanاﺳﺘﻔﺎده ﺷﻮد ،و ﻧﻴﺰ ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﺑﻪاﻧﺪازهي ﻛﺎﻓﻲ وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪ ،در دﺳﺘﺮس ﻗﺮار ﻣﻲدﻫﻨﺪ .در ﻣﻮرد اﻳﻦ ﻧﻮع ﻛﺎرت ﻧﻴﺰ ﺗﺎ ﺳﺎل ،1990
_________________________________________________________________________________
resolution ١
video RAM ٢
operationg mode ٣
monitor ٤
pixel ٥
color palette ٦
2-4 ﻓﺼﻞ :4ﻛﺎرﺗﻬﺎي وﻳﺪﺋﻮﻳﻲ
اﺳﺘﺎﻧﺪاردي وﺟﻮد ﻧﺪاﺷﺖ و در اﻳﻦ ﺳﺎل ﻳﻚ ﻛﻨﺴﺮﺳﻴﻮم ﺑﺎ ﻧﺎم اﺧﺘﺼﺎري ،1VESAﺳﻌﻲ در ﺗﻌﺮﻳﻒ ﺣﺎﻟﺘﻬﺎي ﻋﻤﻠﻴﺎﺗﻲ و BIOSاﺳﺘﺎﻧﺪارد ﺑﺮاي اﻳﻦ ﻧﻮع ﻛﺎرت
ﻧﻤﻮد.
) :Texas Instrument Graphics Architecture (TIGAﻧﻮﻋﻲ ﻛﺎرت اﺳﺖ ﻛﻪ ﺑﺮﻧﺎﻣﻪﭘﺬﻳﺮ 2اﺳﺖ و داراي ﮔﻮﻧﻪﻫﺎي ﻣﺘﻔﺎوﺗﻲ ،ﻧﻈﻴﺮ TI34010و •
TI 34020اﺳﺖ .اﻳﻦ ﻧﻮع ﻛﺎرﺗﻬﺎ ،ﺗﺎ 5ﺑﺎر ﺳﺮﻳﻊﺗﺮ از ﻛﺎرﺗﻬﺎي VGAﻫﺴﺘﻨﺪ.
BIOS 2-4وﻳﺪﺋﻮﻳﻲ
در ،ROM-BIOSﺗﻮاﺑﻊ ﻣﺨﺘﻠﻔﻲ در ﻗﺎﻟﺐ وﻗﻔﻪي ﺷﻤﺎرهي 10Hﭘﻴﺶﺑﻴﻨﻲ ﺷﺪه اﺳﺖ ﻛﻪ اﺑﺘﺪاً ﻓﻘﻂ ﺑﺎ ﻛﺎرﺗﻬﺎي MDAو CGAﻛﺎر ﻣﻲﻛﺮدﻧﺪ .اﻣﺎ،
ﻛﺎرﺗﻬﺎي EGAو ،VGAداراي BIOSﺧﺎص ﺧﻮد ﻫﺴﺘﻨﺪ ﻛﻪ در ﻳﻚ ﺗﺮاﺷﻪ ﺑﺮ روي اﻳﻦ ﻛﺎرﺗﻬﺎ وﺟﻮد دارﻧﺪ و ﺑﺎ روﺷﻦ ﺷﺪن ﺳﻴﺴﺘﻢ ،ﺗﻮاﺑﻊ ﺑﺴﻂﻳﺎﻓﺘﻪ ﻓﻌﺎل
ﻣﻲﺷﻮﻧﺪ .اﻳﻦ ﻣﺠﻤﻮﻋﻪ از ﺗﻮاﺑﻊ ﺑﺴﻂﻳﺎﻓﺘﻪي BIOSدر ارﺗﺒﺎط ﺑﺎ وﻗﻔﻪي 10Hﻋﻤﻞ ﻧﻤﻮده و ﺗﻮاﺑﻊ EGAو VGAرا ﺑﻪ BIOSﻣﻮﺟﻮد اﺿﺎﻓﻪ ﻣﻲﻛﻨﻨﺪ .ﺗﻮاﺑﻌﻲ ﻛﻪ
ﺑﺮاي EGAﻫﺴﺘﻨﺪ ،از ﺗﻮاﺑﻊ VGAﻛﻤﺘﺮ ﻫﺴﺘﻨﺪ.
ﻋﻼوه ﺑﺮ ﺗﻮاﺑﻊ ،BIOSاز ﺗﻮاﺑﻊ DOSﻧﻴﺰ ﻣﻲﺗﻮان ﺑﺮاي ﻛﺎر ﺑﺎ ﺻﻔﺤﻪي ﻧﻤﺎﻳﺶ اﺳﺘﻔﺎده ﻧﻤﻮد .اﻣﺎ ،اﻳﻦ ﺗﻮاﺑﻊ از ﺗﻮاﺑﻊ ،BIOSﻛﻨﺪﺗﺮ ﻫﺴﺘﻨﺪ .ﺗﻮاﺑﻊ
،DOSداراي درﺟﻪي ﺑﺎﻻﺗﺮي از ﺳﺎزﮔﺎري ﺑﺎ ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎي ﻣﺨﺘﻠﻒ ﻫﺴﺘﻨﺪ .ﻫﻤﭽﻨﻴﻦ روش دﺳﺘﺮﺳﻲ ﻣﺴﺘﻘﻴﻢ ﺑﻪ ﺳﺨﺖاﻓﺰار ﻛﺎرت وﻳﺪﺋﻮﻳﻲ ﻧﻴﺰ ﺑﺮاي ﻛﺎر ﺑﺎ ﺻﻔﺤﻪي
ﻧﻤﺎﻳﺶ ،ﻗﺎﺑﻞ اﺳﺘﻔﺎده اﺳﺖ و از دو روش دﻳﮕﺮ ﺳﺮﻳﻊﺗﺮ اﺳﺖ .دﺳﺘﺮﺳﻲ ﻣﺴﺘﻘﻴﻢ در ﻣﻮرد ﺳﺨﺖاﻓﺰار ﻛﺎرت وﻳﺪﺋﻮﻳﻲ ،ﻧﻮﺷﺘﻦ ﻣﺴﺘﻘﻴﻢ اﻃﻼﻋﺎت در ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ از
ﻧﺸﺎﻧﻲ B800H:0000اﺳﺖ و دﻟﻴﻞ ﺳﺮﻳﻊﺗﺮ ﺑﻮدن اﻳﻦ روش ،ﻋﺪم ﻧﻴﺎز ﺑﻪ اﻧﺠﺎم ﻛﺎرﻫﺎي ﻣﺮﺑﻮط ﺑﻪ ﻓﺮاﺧﻮاﻧﻲ وﻗﻔﻪﻫﺎي BIOSﻳﺎ ،DOSاز ﻗﺒﻴﻞ ذﺧﻴﺮه ﺳﺎزي
ﻧﺸﺎﻧﻲ ﺑﺮﮔﺸﺖ ،ﺛﺒﺎﺗﻬﺎ و ﭘﺎراﻣﺘﺮﻫﺎ ﺑﺮ روي ﭘﺸﺘﻪ و ﻏﻴﺮه اﺳﺖ .ﻋﻴﺐ ﻣﻬﻢ روش دﺳﺘﺮﺳﻲ ﻣﺴﺘﻘﻴﻢ ،واﺑﺴﺘﮕﻲ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﻪ ﺳﺨﺖاﻓﺰار اﺳﺖ .ﺑﺮاي ﻣﺜﺎل ،رواﻟﻲ ﻛﻪ ﻳﻚ
ﻛﺎراﻛﺘﺮ را ﺑﺮ روي ﺻﻔﺤﻪي ﻧﻤﺎﻳﺶ ﻧﺸﺎن ﻣﻲدﻫﺪ ،ﺑﺮاي CGAو MDAﻣﺘﻔﺎوت ﺧﻮاﻫﺪ ﺑﻮد و روال ﻣﺮﺑﻮط ﺑﻪ ﻫﺮ ﻛﺪام در دﻳﮕﺮي ﻋﻤﻞ ﻧﺨﻮاﻫﺪ ﻛﺮد.
در ﻣﻮرد ﺗﻮاﺑﻊ ،ROM BIOSﻳﻚ دﻟﻴﻞ دﻳﮕﺮ ﻛﺎﻫﺶ ﺳﺮﻋﺖ ،دﺳﺘﺮﺳﻲ ﺑﻪ ROM BIOSﺑﺮاي اﺟﺮاي ﻛﺪﻫﺎي ﺗﻮاﺑﻊ اﺳﺖ .زﻳﺮا ROMﺑﻪﺻﻮرت
8ﺑﻴﺘﻲ ﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ اﺳﺖ و اﻳﻦ ﺑﺎﻋﺚ ﻛﻨﺪ ﺷﺪن ﺳﻴﺴﺘﻢ ،ﺑﻪوﻳﮋه در ﭘﺮدازﻧﺪهﻫﺎي 32ﺑﻴﺘﻲ ﺑﻪ ﺑﺎﻻ ﻣﻲﺷﻮد .ﻳﻚ راه رﻓﻊ اﻳﻦ ﻣﺸﻜﻞ ،ﺑﺎرﻛﺮدن ROM BIOSدر
RAMو در ﻣﺤﺪودهي ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ و ﺣﺪ 1ﻣﮕﺎﺑﺎﻳﺖ اﺳﺖ ﻛﻪ ﺑﻪ آن shadow ROM ،ﮔﻔﺘﻪ ﻣﻲﺷﻮد .اﻳﻦ ﻛﺎر ،دﺳﺘﺮﺳﻲ 16ﻳﺎ 32ﺑﻴﺘﻲ ﺑﻪ ﺗﻮاﺑﻊ ROM
BIOSرا ﻓﺮاﻫﻢ ﻣﻲﻛﻨﺪ.
ﺗﻮاﺑﻊ BIOSوﻳﺪﺋﻮﻳﻲ داراي ﺷﻤﺎرهﻫﺎي 00Hﺗﺎ 1CHﻫﺴﺘﻨﺪ ﻛﻪ ﺳﺮوﻳﺴﻬﺎي ﻣﺨﺘﻠﻔﻲ را دراﺧﺘﻴﺎر ﻗﺮار ﻣﻲدﻫﻨﺪ .ﺑﺮاي ﻓﺮاﺧﻮاﻧﻲ ﻫﺮ ﻛﺪام از اﻳﻦ ﺗﻮاﺑﻊ،
ﺑﺎﻳﺪ ﺛﺒﺎت AHﺑﺎ ﺷﻤﺎرهي ﻣﻮردﻧﻈﺮ ﻣﻘﺪاردﻫﻲ ﺷﻮد .اﮔﺮ ﻳﻚ زﻳﺮﺗﺎﺑﻊ ﻣﻮرد ﻧﻈﺮ ﺑﺎﺷﺪ ،ﺷﻤﺎرهي آن در ﺛﺒﺎت ALﻗﺮار ﻣﻲﮔﻴﺮد.
Video BIOS functions and support from EGA, VGA and standard BIOS
No. Meaning
00H Determine video mode
01H Define cursor size
02H Set cursor position
03H Read cursor position
04H Read light pen
05H Define current screen page
06H Scroll screen up
07H Scroll screen down
08H Read character and attribute
09H Write character and attribute
0AH Write character to cursor position
0BH Set color palette for graphics mode
0CH Set screen pixel in graphics mode
0DH Read screen pixel in graphics mod
... ...
_________________________________________________________________________________
Video Electronic Standard Association (VESA) ١
programmable ٢
3-4 ﻓﺼﻞ :4ﻛﺎرﺗﻬﺎي وﻳﺪﺋﻮﻳﻲ
ﺗﻌﻴﻴﻦ ﻧﻮع ﻛﺎرت وﻳﺪﺋﻮﻳﻲ :در VGA BIOSﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ 1AHو زﻳﺮﺗﺎﺑﻊ ،00Hﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻣﻘﺎدﻳﺮ ﺑﺮﮔﺸﺘﻲ زﻳﺮ ﻣﻲﺗﻮان ﻧﻮع ﻛﺎرت را
ﺗﺸﺨﻴﺺ داد:
Code Meaning
00H No video card
01H MDA card / monochrome monitor
02H CGA card / color monitor
03H Reserved
04H EGA card / high resolution monitor
05H EGA card / monochrome monitor
06H Reserved
07H VGA card / analog monochrome monitor
08H VGA card / analog color monitor
در EGA BIOSﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ 12Hو زﻳﺮﺗﺎﺑﻊ ،10Hﻣﻲﺗﻮان ﻧﻮع ﻛﺎرت را ﺗﺸﺨﻴﺺ داد.
وﻳﺪﺋﻮﻳﻲ1 3-4ﺣﺎﻓﻈﻪي
ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﺟﺰو ﻓﻀﺎي ﻧﺸﺎﻧﻲ PC 2اﺳﺖ و ﻣﻲﺗﻮاﻧﺪ ﺑﺮ روي ﻛﺎرت وﻳﺪﺋﻮﻳﻲ ﺑﺎﺷﺪ ﻳﺎ آﻧﻜﻪ از ﻗﺴﻤﺘﻲ از RAMاﺳﺘﻔﺎده ﺷﻮد .ﻣﺤﺘﻮﻳﺎت اﻳﻦ ﺣﺎﻓﻈﻪ
ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﺻﻔﺤﺎت ﻣﺘﻦ و ﮔﺮاﻓﻴﻚ اﺳﺖ ﻛﻪ ﺑﺮ روي ﺻﻔﺤﻪي ﻧﻤﺎﻳﺶ ﻧﺸﺎن داده ﻣﻲﺷﻮﻧﺪ .ﻳﻌﻨﻲ در ﺣﺎﻟﺖ ﻣﺘﻦ ،ﻫﺮ ﻛﺎراﻛﺘﺮ و رﻧﮓ آن ،ﺑﺎ دو ﺑﺎﻳﺖ از اﻳﻦ ﺣﺎﻓﻈﻪ و درﺣﺎﻟﺖ
ﮔﺮاﻓﻴﻚ ،ﻫﺮ ﻧﻘﻄﻪ 3ﺑﺮ روي ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ،ﻳﻚ ﻳﺎ ﺑﻴﺸﺘﺮ ﺑﻴﺖ اﻳﻦ ﺣﺎﻓﻈﻪ ﻣﺘﻨﺎﻇﺮ اﺳﺖ)ﻛﻪ در اداﻣﻪ دﻗﻴﻖﺗﺮ ﺗﻮﺿﻴﺢ داده ﻣﻲﺷﻮد(.
Video
CRT
RAM
در ﻛﺎرﺗﻬﺎي وﻳﺪﺋﻮﻳﻲ ﺗﻚرﻧﮓ ﻣﺜﻞ ،MDAﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ در ﻣﺤﺪودهي ﻧﺸﺎﻧﻲ B000:0000-B000:7FFFﻗﺮار دارد و در ﻛﺎرﺗﻬﺎي وﻳﺪﺋﻮﻳﻲ
رﻧﮕﻲ ،ﻣﺜﻞ ،EGAاز ﻧﺸﺎﻧﻲ B800:0000ﺷﺮوع ﻣﻲﺷﻮد .ﭼﻮن اﻳﻦ ﺣﺎﻓﻈﻪ در ﻓﻀﺎي ﻧﺸﺎﻧﻴﻬﺎي ﺳﻴﺴﺘﻢ ﻗﺮار دارد ،ﺑﺎ روﺷﻬﺎي ﻣﻌﻤﻮﻟﻲ دﺳﺘﺮﺳﻲ ﺑﻪ ﺣﺎﻓﻈﻪ ﻗﺎﺑﻞ
دﺳﺘﻴﺎﺑﻲ اﺳﺖ .ﻳﻌﻨﻲ ﺑﺮاي ﻧﻮﺷﺘﻦ ﻳﻚ ﻛﺎراﻛﺘﺮ ﺑﺮ روي ﺻﻔﺤﻪ ،ﻣﻲﺗﻮان ﻳﻚ ﺑﺎﻳﺖ ﻛﺪ ﻛﺎراﻛﺘﺮ و ﺑﺎﻳﺖ رﻧﮓ )اﺻﻠﻲ 4و زﻣﻴﻨﻪ (5آﻧﺮا در اﻳﻦ ﺣﺎﻓﻈﻪ ﻧﻮﺷﺖ .ﺣﺎﺻﻞ ﻛﺎر،
ﻧﻤﺎﻳﺶ ﻛﺎراﻛﺘﺮ ﺑﺮ روي ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ اﺳﺖ.
ﺳﺎﺧﺘﺎر ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ در ﺣﺎﻟﺖ ﻣﺘﻦ :در ﺣﺎﻟﺖ ﻣﺘﻦ ﺑﺮاي ﻧﻤﺎﻳﺶ ﻫﺮ ﻛﺎراﻛﺘﺮ ﺑﻪ دو ﺑﺎﻳﺖ ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﻧﻴﺎز اﺳﺖ .در ﺑﺎﻳﺖ ﻧﺨﺴﺖ ،ﻛﺪ
اَﺳﻜﻲ6ﻛﺎراﻛﺘﺮ و در ﺑﺎﻳﺖ دوم ﻣﺸﺨﺼﻪي 7آن ﻗﺮار ﻣﻲﮔﻴﺮد .در ﺑﺎﻳﺖ ﻣﺸﺨﺼﻪ ،ﻣﺘﻨﺎﺳﺐ ﺑﺎ ﻧﻮع ﻛﺎرت و ﺑﺮاﺳﺎس ﻛﺪﺑﻨﺪي آن ،رﻧﮓ اﺻﻠﻲ ،رﻧﮓ زﻣﻴﻨﻪ ،ﺷﺪت ﻧﻮر ،و ﻏﻴﺮه
ﻣﺸﺨﺺ ﻣﻲﺷﻮﻧﺪ .ﻣﺜﻼً در 4 ،MDAﺑﻴﺖ ﻧﺨﺴﺖ اﻳﻦ ﺑﺎﻳﺖ رﻧﮓ اﺻﻠﻲ و 4ﺑﻴﺖ دوم رﻧﮓ زﻣﻴﻨﻪ را ﻣﺸﺨﺺ ﻣﻲﻛﻨﻨﺪ.
اوﻟﻴﻦ ﺑﺎﻳﺖ ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﻣﺘﻨﺎﻇﺮ ﺑﺎ اوﻟﻴﻦ ﻛﺎراﻛﺘﺮ ﻧﻤﺎﻳﺶ داده ﺷﺪه ﺑﺮ روي ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ اﺳﺖ و ﺑﺎﻳﺖ دوم ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ،ﻣﺸﺨﺼﻪي آن اﺳﺖ.
ﻧﺸﺎﻧﻲ ﻣﺒﺪأ اوﻟﻴﻦ ﻛﺎراﻛﺘﺮ 0000H ،و ﻧﺸﺎﻧﻲ ﻣﺒﺪأ ﻣﺸﺨﺼﻪي آن 0001H ،اﺳﺖ .ﻛﺎراﻛﺘﺮ دوم و ﻣﺸﺨﺼﻪي آن در ﻧﺸﺎﻧﻴﻬﺎي 0002Hو 0003Hﻗﺮار دارﻧﺪ و اﻟﻲ
آﺧﺮ .ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ ﺑﺮاي ﻧﻤﺎﻳﺶ ﻳﻚ ﺻﻔﺤﻪ اﻃﻼﻋﺎت ﺑﺮ روي ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ،ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﺑﺎﻳﺪ 80x25x2 = 4000 byteﻇﺮﻓﻴﺖ داﺷﺘﻪ ﺑﺎﺷﺪ ،ﻛﻪ ﺑﻪ آن
_________________________________________________________________________________
video RAM ١
address space ٢
pixel ٣
foreground ٤
background ٥
ASCII code ٦
attribute ٧
4-4 ﻓﺼﻞ :4ﻛﺎرﺗﻬﺎي وﻳﺪﺋﻮﻳﻲ
ﻳﻚ ﺻﻔﺤﻪ 1ﮔﻔﺘﻪ ﻣﻲﺷﻮد .اﮔﺮ ﻇﺮﻓﻴﺖ ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﺑﻴﺶ از 4KBﺑﺎﺷﺪ)ﻣﺜﻼً ،( 8KBﻣﻲﺗﻮان ﺑﻴﺶ از ﻳﻚ ﺻﻔﺤﻪ را در ﺣﺎﻓﻈﻪ ﻧﮕﻬﺪاﺷﺖ ،ﻛﻪ در ﻛﺎرﺗﻬﺎي
EGAو VGAاﻳﻦ اﻣﻜﺎن وﺟﻮد دارد ،وﻟﻲ در ﻛﺎرﺗﻬﺎي MDAاﻳﻦﮔﻮﻧﻪ ﻧﻴﺴﺖ .ﺑﺎ اﺳﺘﻔﺎده از ﺗﻮاﺑﻊ وﻗﻔﻪ ،10Hﻣﻲﺗﻮان اﻳﻦ ﺻﻔﺤﻪﻫﺎ را ﺗﻌﻮﻳﺾ ﻧﻤﻮد و روﺷﻲ ﻣﻔﻴﺪ
ﺑﺮاي ﺑﻬﺒﻮد ﻧﻤﺎﻳﺶ اﻃﻼﻋﺎت ﺑﺮ روي ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ اﺳﺖ.
دﺳﺘﺮﺳﻲ ﻣﺴﺘﻘﻴﻢ ﺑﻪ ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ :از ﻓﺮﻣﻮل زﻳﺮ ﻣﻲﺗﻮان ﺑﺮاي ﻧﻮﺷﺘﻦ ﻣﺴﺘﻘﻴﻢ ﻳﻚ ﻛﺎراﻛﺘﺮ در ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﻳﺎ ﺧﻮاﻧﺪن آن ،اﺳﺘﻔﺎده
ﻧﻤﻮد:
)void DirectReadCh (unsigned char row, unsigned char col, unsigned char *ch, unsigned char *att
{
;)*ch = peekb(0xB800, row * 160 + col * 2
;)*att = peekb(0xB800, row * 160 + col * 2+1
}
)void DirectWriteCh (unsigned char row, unsigned char col, unsigned char ch, unsigned char att
{
;VP lptr
_________________________________________________________________________________
page ١
5-4 ﻓﺼﻞ :4ﻛﺎرﺗﻬﺎي وﻳﺪﺋﻮﻳﻲ
)void DirectReadCh (unsigned char row, unsigned char col, unsigned char *ch, unsigned char *att
{
;VP lptr
;lptr = MK_FP (0xB800, 0) + row * 80 + col
;*ch = lptr->ch
;*att = lptr->att
}
ﻣﺪﻳﺮﻳﺖ ﭘﻨﺠﺮهﻫﺎ :1از روﺷﻬﺎي ﻓﻮق ﺑﺮاي دﺳﺘﺮﺳﻲ ﻣﺴﺘﻘﻴﻢ ﺑﻪ ﺣﺎﻓﻈﻪ ﻣﻲﺗﻮان اﺳﺘﻔﺎده ﻧﻤﻮده و ﺑﺮﻧﺎﻣﻪﻫﺎﻳﻲ ﻧﻮﺷﺖ ﻛﻪ در آﻧﻬﺎ از ﭘﻨﺠﺮهﻫﺎ اﺳﺘﻔﺎده
ﻣﻲﺷﻮد .آﺷﻜﺎرﺳﺎزي و ﭘﻨﻬﺎن ﻛﺮدن ﭘﻨﺠﺮهﻫﺎ ،ﻣﺴﺘﻠﺰم ﺧﻮاﻧﺪن و ﻧﻮﺷﺘﻦ ﺳﺮﻳﻊ اﻃﻼﻋﺎت ﺻﻔﺤﻪي ﻧﻤﺎﻳﺶ و ذﺧﻴﺮه و ﺑﺎزﻳﺎﺑﻲ اﻃﻼﻋﺎت ﻧﻮﺷﺘﻪ ﺷﺪه ﺑﺮ روي ﺻﻔﺤﻪ در
ﺑﺎﻓﺮﻫﺎي ﻣﻮﻗﺘﻲ اﺳﺖ .ﺑﺮاي ﻣﺜﺎل اﮔﺮ ﺑﺨﻮاﻫﻴﻢ در ﺷﻜﻞ زﻳﺮ ﭘﻨﺠﺮهي W1را ﺑﺮ روي ﺻﻔﺤﻪ ﻧﺸﺎن دﻫﻴﻢ ،ﻻزم ﺑﻪ ﻧﮕﻬﺪاري اﻃﻼﻋﺎت ﭘﻨﺠﺮهي اﺻﻠﻲ W0ﻫﺴﺘﻴﻢ.
ﺑﻨﺎﺑﺮ اﻳﻦ ،ﺑﺎﻳﺪ ﻳﻚ ﺑﺎﻓﺮ ﺑﺎ اﺑﻌﺎد (60-20+1)*(15-5+1)*2ﺑﺮاي ﻧﮕﻬﺪاري ﻛﺎراﻛﺘﺮﻫﺎ و ﻣﺸﺨﺼﻪﻫﺎي آﻧﻬﺎ ﻛﻪ در اﻳﻦ ﻣﺤﺪوده ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ﻗﺮار دارﻧﺪ ،اﺧﺘﺼﺎص
دﻫﻴﻢ .ﺳﭙﺲ ﺑﺎ روﺷﻬﺎي دﺳﺘﺮﺳﻲ ﻣﺴﺘﻘﻴﻢ ﻓﻮق و ﺑﺎ اﺳﺘﻔﺎده از ﺗﻮاﺑﻊ ،DirectReadChاﻃﻼﻋﺎت ﭘﻨﺠﺮه را در اﻳﻦ ﺑﺎﻓﺮ ذﺧﻴﺮه ﻛﻨﻴﻢ .اﻳﻦ ﻛﺎر ﻗﺒﻞ از رﺳﻢ ﭘﻨﺠﺮه W1
اﻧﺠﺎم ﻣﻲﺷﻮد .ﭘﺲ از ﻧﻤﺎﻳﺶ W1و ﻋﺪم ﻧﻴﺎز ﺑﻪ آن ،ﺑﺮاي ﭘﺎك ﻛﺮدن آن از روي ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ و ﺑﺮﮔﺸﺘﻦ ﺑﻪ ﺻﻔﺤﻪي ﻗﺒﻠﻲ ،ﻛﺎﻓﻴﺴﺖ اﻃﻼﻋﺎت ﻣﻮﺟﻮد در ﺑﺎﻓﺮ ،ﺑﺎ
اﺳﺘﻔﺎده از ﺗﺎﺑﻊ ،DirectPutChدر ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﺑﺎزﻧﻮﻳﺴﻲ ﺷﻮد.
ﭘﻨﺠﺮه اﺻﻠﻲ) (W0ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ )(80x25
)(20, 5 )(60, 5
W1
اﻧﺘﺨﺎب و ﺗﻌﺮﻳﻒ ﻓﻮﻧﺘﻬﺎ :2ﻛﺎرﺗﻬﺎي EGAو VGAاﺟﺎزهي اﻧﺘﺨﺎب و ﺗﻌﺮﻳﻒ ﻓﻮﻧﺘﻬﺎي ﺟﺪﻳﺪ را ﻣﻲدﻫﻨﺪ .اﻳﻦ ﻛﺎرﺗﻬﺎ از ﻣﻮﻟﺪﻫﺎي ﻗﻮي ﻛﺎراﻛﺘﺮ
اﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ ﻛﻪ ﺷﻜﻞ ﻫﺮ ﻛﺎراﻛﺘﺮ را از روي bitmapآن ﻛﻪ در ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﻗﺮار دارد ،ﺑﺮ روي ﺻﻔﺤﻪي ﻧﻤﺎﻳﺶ ﺗﺮﺳﻴﻢ ﻣﻲﻛﻨﻨﺪ .ﻛﺎرﺗﻬﺎي ،EGAﺑﺎ ﺗﻮﺟﻪ
ﺑﻪ ﺣﺎﻟﺖ اﻧﺘﺨﺎبﺷﺪه ،اﺟﺎزهي ﻧﻤﺎﻳﺶ ﻛﺎراﻛﺘﺮﻫﺎي ﺑﺎ اﺑﻌﺎد 8x8و 8x14ﻧﻘﻄﻪ را ﻣﻲدﻫﻨﺪ .ﻫﻤﭽﻨﻴﻦ ،ﻛﺎرﺗﻬﺎي ،VGAاﺟﺎزهي ﻧﻤﺎﻳﺶ ﻛﺎراﻛﺘﺮﻫﺎي ﺑﺎ اﺑﻌﺎد ،8x8
8x14و 8x16ﻧﻘﻄﻪ را ﻣﻲدﻫﻨﺪ.
ﺑﻪ ازاي ﻫﺮ ردﻳﻒ در ﻣﺎﺗﺮﻳﺴﻬﺎي ﻓﻮق ،ﻧﻴﺎز ﺑﻪ ﻳﻚ ﺑﺎﻳﺖ اﺳﺖ .ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ ﺑﺮاي ﻫﺮ ﻛﺎراﻛﺘﺮ ،در ﺳﻪ ﺣﺎﻟﺖ ﻓﻮق ،ﺑﻪﺗﺮﺗﻴﺐ ﺑﻪ 14 ،8و 16ﺑﺎﻳﺖ ﺣﺎﻓﻈﻪ ﻧﻴﺎز
ﺧﻮاﻫﺪ ﺑﻮد و ﺑﺮاي ﺗﻌﺮﻳﻒ ﻓﻮﻧﺖ ﺑﺮاي 256ﻛﺎراﻛﺘﺮ ،ﺑﻪ 256x14 ،256x8و 256x16ﺑﺎﻳﺖ ﺣﺎﻓﻈﻪ ﻧﻴﺎز اﺳﺖ .ﭘﺲ ﺑﺮاي ﻣﻌﺮﻓﻲ ﻓﻮﻧﺘﻬﺎي ﺟﺪﻳﺪ)ﻣﺜﻼً ﻓﻮﻧﺘﻬﺎي
ﻓﺎرﺳﻲ( ﻣﻲﺗﻮان ﻳﻚ ﺑﺎﻓﺮ) (character tableﺑﺎ اﻧﺪازهﻫﺎي ﻓﻮق ﺗﻌﺮﻳﻒ ﻧﻤﻮده و ﻣﺎﺗﺮﻳﺴﻬﺎي ﻓﻮﻧﺘﻬﺎي ﻃﺮاﺣﻲ ﺷﺪه را اﻳﺠﺎد ﻧﻤﻮد .ﺳﭙﺲ ﺑﺮاي ﺗﻌﺮﻳﻒ ﻓﻮﻧﺘﻬﺎ ،از
زﻳﺮﺗﺎﺑﻊ 00Hﺗﺎﺑﻊ 11Hوﻗﻔﻪي EGA/VGA BIOS 10Hاﺳﺘﻔﺎده ﻛﺮد:
AH = 11H
AL = 00H
)BH = Lines per character (also bytes per character
_________________________________________________________________________________
window management ١
fonts ٢
6-4 ﻓﺼﻞ :4ﻛﺎرﺗﻬﺎي وﻳﺪﺋﻮﻳﻲ
ﺣﺎﻓﻈﻪ وﻳﺪﺋﻮﻳﻲ 32Kاﺳﺖ ﻛﻪ ﺑﻪ 4ﺑﻠﻮك 8Kﺗﻘﺴﻴﻢ ﺷﺪه اﺳﺖ .ﺧﻄﻮط ﻣﺨﺘﻠﻒ ﭘﺸﺖ ﺳﺮ ﻫﻢ ﻧﻴﺴﺘﻨﺪ و ﺧﻄﻮط ﺑﺎ ﺷﻤﺎرهﻫﺎي ... ،8 ،4 ،0در ﺑﻠﻮك اول،
ﺧﻄﻮط ﺑﺎ ﺷﻤﺎرهﻫﺎي ... ،9 ،5 ،1در ﺑﻠﻮك دوم و اﻟﻲآﺧﺮ .ﻫﺮ ﺧﻂ ﺷﺎﻣﻞ 90ﺑﺎﻳﺖ اﺳﺖ ﻛﻪ ﺗﻌﺪاد ﻧﻘﺎط ﻫﺮ ﺧﻂ 90x8 = 720 ،اﺳﺖ .در ﻫﺮ ﺑﻠﻮك ﻫﻢ 348ﺧﻂ وﺟﻮد
دارد و ﻣﺎﺑﻘﻲ ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﺑﻼاﺳﺘﻔﺎده اﺳﺖ.
ﺑﺮاي ﻣﺤﺎﺳﺒﻪي ﻧﺸﺎﻧﻲ ﻳﻚ ﻧﻘﻄﻪي ﺻﻔﺤﻪي ﻧﻤﺎﻳﺶ ) (X, Yدر ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﺑﺎﻳﺪ ﻧﺸﺎﻧﻲ ﺑﺎﻳﺖ و ﺷﻤﺎرهي ﺑﻴﺖ آن ﺑﺎﻳﺖ را ﺑﺪﺳﺖ آورﻳﻢ:
)ByteAddress(X, Y) = 2000H * (Y mod 4) + 90 * int(Y/4) + int(X/8
} ﺑﻴﺖ ﻫﺸﺘﻢ ﻧﻘﻄﻪي ﺻﻔﺮم را و ﺑﻴﺖ اول ﻧﻘﻄﻪي ﻫﻔﺘﻢ را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ { BitNumber(X) = 7 - X mod 8
ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ ﺑﺎﻳﺪ ﺑﻴﺖ ﺑﺪﺳﺖ آﻣﺪه در ﺑﺎﻳﺖ ﻣﻮﺟﻮد در ﻧﺸﺎﻧﻲ داده ﺷﺪه ،ﺑﺮاي روﺷﻦ ﺷﺪن ﻧﻘﻄﻪ ،ﺑﻪ 1و ﺑﺮاي ﺧﺎﻣﻮش ﺷﺪن ،ﺑﻪ 0ﻣﻘﺪاردﻫﻲ ﺷﻮد .ﺑﺮاي
ﻣﺜﺎل در زﺑﺎن ﭘﺎﺳﻜﺎل ﺑﺮاي روﺷﻦ ﻛﺮدن ﺑﻴﺖ ): (X, Y
;)procedure PutPixel (X, Y : Integer
;var PixelByte, PixelBit : Byte
begin
;])PixelByte := Mem[$B000:ByteAddress(X, Y
;PixelBit := 1
} PixelBit := PixelBit Shl BitNumber(X); { Shl = Shift Left
;PixelByte := PixelByte Or PixelBit
;Mem[$B000:ByteAddress(X, Y)] := PixelByte
;end
7-4 ﻓﺼﻞ :4ﻛﺎرﺗﻬﺎي وﻳﺪﺋﻮﻳﻲ
:Color-Suppressedوﺿﻮح 160x100ﺑﺎ 16رﻧﮓ ،ﻛﻪ CRT controlerاﻳﻦ ﺣﺎﻟﺖ را ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲﻛﺮد ،اﻣﺎ ﺳﺎﻳﺮ ﺑﺨﺸﻬﺎي ﺳﺨﺖاﻓﺰار ،اﻳﻦ ﺣﺎﻟﺖ را •
ﭘﺸﺘﻴﺒﺎﻧﻲ ﻧﻤﻲﻛﺮدﻧﺪ.
وﺿﻮح 320x200ﺑﺎ 4رﻧﮓ، •
وﺿﻮح 640x200ﺑﺎ 2رﻧﮓ. •
وﺿﻮح :320x200ﻛﺎرت CGAﻣﻲﺗﻮاﻧﺪ از 16Kﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ اﺳﺘﻔﺎده ﻛﻨﺪ و اﻳﻦ وﺿﻮح را ﺑﺎ 4رﻧﮓ ﻓﺮاﻫﻢ ﻧﻤﺎﻳﺪ .رﻧﮕﻬﺎﻳﻲ ﻛﻪ ﺑﺎ ﺑﺮﻧﺎﻣﻪرﻳﺰي
ﺛﺒﺎت اﻧﺘﺨﺎب رﻧﮓ ﻳﺎ ﺗﺎﺑﻊ 0BHوﻗﻔﻪي ،10Hﻗﺎﺑﻞ اﻧﺘﺨﺎب ﻫﺴﺘﻨﺪ ،ﻋﺒﺎرﺗﻨﺪ از:
ﺳﺎﺧﺘﺎر ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ در ﺣﺎﻟﺖ ﮔﺮاﻓﻴﻜﻲ :ﺑﺮاي ﻫﺮ ﻧﻘﻄﻪ ،ﺑﻪ دو ﺑﻴﺖ ﻧﻴﺎز دارﻳﻢ:
80 bytes
ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ 16Kاﺳﺖ ﻛﻪ ﺑﻪ دو ﺑﻠﻮك 8Kﺗﻘﺴﻴﻢ ﺷﺪه اﺳﺖ .ﺧﻄﻮط زوج در ﺑﻠﻮك اول و ﺧﻄﻮط ﻓﺮد در ﺑﻠﻮك دوم ﻗﺮار دارﻧﺪ .ﺑﺮاي ﻣﺤﺎﺳﺒﻪي
ﻧﺸﺎﻧﻲ ﻳﻚ ﻧﻘﻄﻪي ﺻﻔﺤﻪي ﻧﻤﺎﻳﺶ ) (X, Yدر ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﺑﺎﻳﺪ ﻧﺸﺎﻧﻲ ﺑﺎﻳﺖ و ﺷﻤﺎرهي اوﻟﻴﻦ ﺑﻴﺖ آن ﺑﺎﻳﺖ را ﺑﺪﺳﺖ آورﻳﻢ:
وﺿﻮح :640x200در اﻳﻦ ﺣﺎﻟﺖ ،ﻓﻘﻂ ﻳﻚ ﺑﻴﺖ ﺑﺮاي ﻫﺮ ﻧﻘﻄﻪ ﻛﺎﻓﻲ اﺳﺖ و دو رﻧﮓ ﺑﻴﺸﺘﺮ ﻧﺪارﻳﻢ .در ﻧﺘﻴﺠﻪ ،ﻋﺮض ﺻﻔﺤﻪ دو ﺑﺮاﺑﺮ ﻣﻲﺷﻮد:
:Mode Selection Registerﺑﺎ اﻳﻦ ﺛﺒﺎت 8ﺑﻴﺘﻲ ﻣﻲﺗﻮان ﺣﺎﻟﺘﻬﺎي ﺳﻪﮔﺎﻧﻪي ﻓﻮق را اﻧﺘﺨﺎب ﻧﻤﻮد و ﺛﺒﺎﺗﻲ ﻗﺎﺑﻞ ﻧﻮﺷﺘﻦ و ﻏﻴﺮﻗﺎﺑﻞ ﺧﻮاﻧﺪن اﺳﺖ .ﻧﺸﺎﻧﻲ •
درﮔﺎه اﻳﻦ ﺛﺒﺎت 3D8H ،اﺳﺖ .ﺑﻴﺖ 0اﻳﻦ ﺛﺒﺎت ،ﺗﻌﺪاد ﻛﺎراﻛﺘﺮﻫﺎي ﻗﺎﺑﻞ ﻧﻤﺎﻳﺶ را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ ﻛﻪ اﮔﺮ ﻣﺴﺎوي 0ﺑﺎﺷﺪ 40x25 ،و اﮔﺮ ﻣﺴﺎوي 1ﺑﺎﺷﺪ،
80x25ﻛﺎراﻛﺘﺮ در ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ داده ﻣﻲﺷﻮد .ﺑﻴﺖ ،1ﺣﺎﻟﺖ وﻳﺪﺋﻮﻳﻲ را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ ،ﻛﻪ ﻣﻘﺪار 0ﺑﺮاي ﺣﺎﻟﺖ ﻣﺘﻦ و ﻣﻘﺪار 1ﺑﺮاي ﺣﺎﻟﺖ ﮔﺮاﻓﻴﻚ اﺳﺖ.
ﺑﺮاي ﺗﻐﻴﻴﺮ ﺣﺎﻟﺖ از ﻣﺘﻦ ﺑﻪ ﮔﺮاﻓﻴﻚ و ﺑﺮﻋﻜﺲ ﺑﺎﻳﺪ ﻣﻘﺪار اﻳﻦ ﺑﻴﺖ ﺗﻨﻈﻴﻢ ﺷﻮد.
:Status Registerوﺿﻌﻴﺖ ﻣﺎﻧﻴﺘﻮر و اﻃﻼﻋﺎت ﻣﺮﺑﻮط ﺑﻪ ﺳﻴﮕﻨﺎﻟﻴﻨﮓ را ﺑﺮﻣﻲﮔﺮداﻧﺪ و ﻳﻚ ﺛﺒﺎت ﻓﻘﻂ ﺧﻮاﻧﺪﻧﻲ اﺳﺖ ﻛﻪ ﻧﺸﺎﻧﻲ درﮔﺎه آن 3DAH ،اﺳﺖ. •
:Color Selection Registerﺑﺎ اﻳﻦ ﺛﺒﺎت ﻣﻲﺗﻮان ﺳﺮي رﻧﮓ زﻣﻴﻨﻪ و اﺻﻠﻲ را اﻧﺘﺨﺎب ﻧﻤﻮد .اﻳﻦ ﺛﺒﺎت ﻓﻘﻂ ﻧﻮﺷﺘﻨﻲ اﺳﺖ و ﻧﺸﺎﻧﻲ درﮔﺎه آن3D9H ، •
اﺳﺖ.
_________________________________________________________________________________
color palette ١
8-4 ﻓﺼﻞ :4ﻛﺎرﺗﻬﺎي وﻳﺪﺋﻮﻳﻲ
ﻧﻮع ﻣﺎﻧﻴﺘﻮر :ﻛﺎرآﻳﻲ ﻛﺎرﺗﻬﺎي EGAﻳﺎ ،VGAﺑﻪ ﻧﻮع ﻣﺎﻧﻴﺘﻮر واﺑﺴﺘﮕﻲ زﻳﺎدي دارد و درﺻﻮرﺗﻲﻛﻪ ﻣﺎﻧﻴﺘﻮر از ﻧﻮع ﻣﻨﺎﺳﺒﻲ ﻧﺒﺎﺷﺪ ،ﻗﺎﺑﻠﻴﺖﻫﺎي اﻳﻦ ﻧﻮع
ﻛﺎرت در اﺧﺘﻴﺎر ﻗﺮار ﻧﻤﻲﮔﻴﺮد .اﻳﻦ ﻧﻮع ﻛﺎرﺗﻬﺎ ﺑﻪ اﻧﻮاع ﻣﺎﻧﻴﺘﻮرﻫﺎي زﻳﺮ ﻗﺎﺑﻞ اﺗﺼﺎل ﻫﺴﺘﻨﺪ:
:EGAﻳﻚ ﻛﺎرت EGAﻗﺎﺑﻞ اﺗﺼﺎل ﺑﻪ ﻣﺎﻧﻴﺘﻮرﻫﺎي multisync ،EGA ،CGAﻳﺎ Monochromeاﺳﺖ و ﺑﺮاﺳﺎس ﻧﻮع ﻣﺎﻧﻴﺘﻮر ،ﻛﺎرت •
EGAﻣﺸﺎﺑﻪ ﻳﻚ ﻛﺎرت CGAﻳﺎ MDAﻗﻮي ﻋﻤﻞ ﻣﻲﻛﻨﺪ.
:VGAﻛﺎرﺗﻬﺎي VGAﻗﺎﺑﻞ اﺗﺼﺎل ﺑﻪ ﻣﺎﻧﻴﺘﻮرﻫﺎي Analog Monochromeو ﻧﻴﺰ ﻣﺎﻧﻴﺘﻮرﻫﺎي VGAﻫﺴﺘﻨﺪ .در ﺣﺎﻟﺖ ﺗﻚرﻧﮓ ،وﺿﻮح •
ﺑﺎﻻي ﻛﺎرﺗﻬﺎي VGAدر دﺳﺘﺮس ﺧﻮاﻫﺪ ﺑﻮد.
ﺣﺮﻛﺖ آرام ﺗﺼﻮﻳﺮ :1ﻛﺎرﺗﻬﺎي CGAو ،HGCﺗﻮاﻧﺎﻳﻲ ﺣﺮﻛﺖ دادن آرام ﺗﺼﻮﻳﺮ را ﻧﺪاﺷﺘﻨﺪ .اﻣﺎ ،در ﺳﺨﺖاﻓﺰار اﻳﻦ ﻛﺎرﺗﻬﺎي EGAو ،VGA
ﻗﺎﺑﻠﻴﺖﻫﺎﻳﻲ ﺑﺮاي اﻳﺠﺎد ﺗﺼﺎوﻳﺮ ﻣﺘﺤﺮك 2ﭘﻴﺶﺑﻴﻨﻲ ﺷﺪه اﺳﺖ ،ﻛﻪ از آن ﺟﻤﻠﻪ ،ﺣﺮﻛﺖ آرام ﺗﺼﻮﻳﺮ در ﺣﺎﻟﺖ ﮔﺮاﻓﻴﻚ اﺳﺖ .ﺑﺎ اﻳﻦ ﻗﺎﺑﻠﻴﺖ ،ﻣﻲﺗﻮان ﺗﺼﻮﻳﺮ را در ﺟﻬﺘﻬﺎي
اﻓﻘﻲ و ﻋﻤﻮدي ﺣﺮﻛﺖ داد و ﻧﻴﺎزي ﺑﻪ ﺑﺎزﻧﻮﻳﺴﻲ ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﻧﻴﺴﺖ .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر دو ﺛﺒﺎت ﺑﺎ ﻧﺎم pel panning registersدر اﻳﻦ ﻧﻮع ﻛﺎرﺗﻬﺎ وﺟﻮد دارد ،ﻛﻪ
ﻳﻜﻲ ﺑﺮاي ﺣﺮﻛﺖ اﻓﻘﻲ و دﻳﮕﺮي ﺑﺮاي ﺣﺮﻛﺖ ﻋﻤﻮدي ﺗﺼﻮﻳﺮ اﺳﺖ و ﺑﺎ اﻓﺰاﻳﺶ ﻣﻘﺪار اﻳﻦ ﺛﺒﺎﺗﻬﺎ ،ﺗﺼﻮﻳﺮ ﻳﻚ ﺧﻂ ﺑﻪ ﺳﻤﺖ ﭼﭗ ﻳﺎ ﺑﺎﻻ ﺣﺮﻛﺖ ﻣﻲﻛﻨﺪ .ﻧﺸﺎﻧﻲ درﮔﺎه اﻳﻦ
ﺛﺒﺎﺗﻬﺎ اﺳﺘﺎﻧﺪارد ﻧﺒﻮده و ﺑﺮاي ﻧﻤﻮﻧﻪ ﺑﻪ ﺗﺮﺗﻴﺐ 3C0Hو 3D4Hﻣﻲﺗﻮاﻧﺪ ﺑﺎﺷﺪ.
ﺣﺎﻟﺖ 256رﻧﮓ ﻛﺎرت :VGAاﻳﻦ ﺣﺎﻟﺖ ،ﻳﻜﻲ از ﺳﺎدهﺗﺮﻳﻦ ﺣﺎﻟﺘﻬﺎي ﻛﺎرت VGAاﺳﺖ .ﻳﻜﻲ از ﻣﺰاﻳﺎي ﻛﺎرت VGAﻧﺴﺒﺖ ﺑﻪ ،EGAﺗﻮاﻧﺎﻳﻲ
ﻧﻤﺎﻳﺶ 256رﻧﮓ ﻣﺘﻔﺎوت ﺑﻪﺻﻮرت ﻫﻤﺰﻣﺎن ﺑﺮ روي ﺻﻔﺤﻪ اﺳﺖ 256 .رﻧﮓ ﻣﺨﺘﻠﻒ را ﻣﻲﺗﻮان از 262000ﺳﺮيرﻧﮓ ﻣﺘﻔﺎوت اﻧﺘﺨﺎب ﻧﻤﻮد .اﻣﺎ در ﺣﺎﻟﺖ 256رﻧﮓ،
وﺿﻮح 320x200 ،ﻧﻘﻄﻪ ﺧﻮاﻫﺪ ﺑﻮد ﻛﻪ در اﻳﻦ ﺣﺎﻟﺖ وﺿﻮح ﻛﻤﺘﺮي را ﻧﺴﺒﺖ ﺑﻪ ﺣﺎﻟﺖ 16رﻧﮓ ﺧﻮاﻫﻴﻢ داﺷﺖ ،ﻛﻪ 640x480ﻧﻘﻄﻪ اﺳﺖ.
ﺗﻨﻈﻴﻢ ﺣﺎﻟﺖ 256رﻧﮓ :ﻧﺨﺴﺘﻴﻦ ﻛﺎر ﺑﺮاي ﺗﻨﻈﻴﻢ اﻳﻦ ﺣﺎﻟﺖ ،ﻓﻌﺎلﺳﺎزي 3آن اﺳﺖ .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ﺗﺎﺑﻊ 00Hوﻗﻔﻪي 10Hﺑﺎﻳﺪ اﺳﺘﻔﺎده ﺷﻮد.
ﺷﻤﺎرهي اﻳﻦ ﺣﺎﻟﺖ 13H ،اﺳﺖ ﻛﻪ در ﺛﺒﺎت ALﺑﺎﻳﺪ ﻗﺮار ﮔﻴﺮد .در ﻧﺘﻴﺠﻪ ،ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ اﻳﻦ ﺗﺎﺑﻊ ﺣﺎﻟﺖ 256رﻧﮓ ﺑﺎ وﺿﻮح 320x200ﻓﻌﺎل ﺧﻮاﻫﺪ ﺷﺪ:
mov ah, 00h
mov al, 13h
int 10h
ﺳﺎﺧﺘﺎر ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ در اﻳﻦ ﺣﺎﻟﺖ :ﻫﺮ ﻧﻘﻄﻪ ﺑﻪ ﻳﻚ ﺑﺎﻳﺖ ﻧﻴﺎز دارد ﻛﻪ ﻛﺪ ﻧﻘﻄﻪ اﺳﺖ .ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ 64KBاﺳﺖ و ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪي آن
B800Hاﺳﺖ:
VideoSegAddr = B800H
در ﻫﺮ ﺧﻂ 320 ،ﻧﻘﻄﻪ دارﻳﻢ .ﭘﺲ ﺑﺮاي ﺑﺪﺳﺖآوردن ﻧﺸﺎﻧﻲ ﻫﺮ ﻧﻘﻄﻪ ) P(X, Yدر ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ:
PixelOffset (X, Y) = Y * 320 + X
و روال PutPixelﺑﻪ ﺻﻮرت زﻳﺮ ﺧﻮاﻫﺪ ﺑﻮد:
;)procedure PutPixel(X, Y : Integer; Color : Byte
begin
;Mem[VideoSegAddr:PixelOffset(X, Y)] := Color
;end
و ﺗﺎﺑﻊ GetPixelﻫﻢ ﺑﻪ ﺻﻮرت زﻳﺮ ﺧﻮاﻫﺪ ﺑﻮد ،ﻛﻪ رﻧﮓ ﻳﻚ ﻧﻘﻄﻪ را ﺑﺮﻣﻲﮔﺮداﻧﺪ:
;function GetPixel(X, Y : Integer): Byte
begin
;])GetPixel := Mem[VideoSegAddr:PixelOffset(X, Y
;end
_________________________________________________________________________________
smooth scrolling ١
animation ٢
enabling ٣
ﻓﺼﻞ :5ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺻﻔﺤﻪ ﻛﻠﻴﺪ
)(Keyboard Programming
1-5ﻣﻘﺪﻣﻪ
ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﻳﻜﻲ از ﻟﻮازم ورودي PCاﺳﺖ و ﺑﺎﻳﺪ ﺑﺘﻮان آﻧﺮا ﻣﺪﻳﺮﻳﺖ ﻧﻤﻮد .ﺳﺨﺖاﻓﺰار ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﭘﺎﻟﺲﻫﺎي اﻟﻜﺘﺮﻳﻜﻲ ﺣﺎﺻﻞ از ﻓﺸﺎر دادن ﻛﻠﻴﺪ را ﺑﻪ
اﻋﺪادي ﺗﺒﺪﻳﻞ ﻧﻤﻮده و ﺑﻪ PCارﺳﺎل ﻣﻲﻛﻨﺪ .اﻳﻦ اﻋﺪاد ” “Scan codeﻧﺎﻣﻴﺪه ﻣﻲﺷﻮﻧﺪ و ﺗﻠﻔﻴﻖ ﻛﻠﻴﺪﻫﺎي ﻣﻌﻤﻮﻟﻲ ﺑﺎ ﻛﻠﻴﺪﻫﺎي ﻛﻨﺘﺮﻟﻲ scan code ،ﻣﺘﻔﺎوﺗﻲ را
اﻳﺠﺎد ﻣﻲﻛﻨﺪ.
ارﺗﺒﺎط ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﺑﺎ PCاز ﻃﺮﻳﻖ ﻳﻚ ﻛﺎﺑﻞ اﻧﺠﺎم ﻣﻲﺷﻮد ﻛﻪ ﻧﻮع ارﺗﺒﺎط ،ﺳﺮﻳﺎل و ﻫﻤﮕﺎم 1اﺳﺖ و از اﻳﻦ ﻧﻈﺮ ﺑﺎ واﺳﻂ ﺳﺮﻳﺎل ﻛﻪ ﻧﺎﻫﻤﮕﺎم 2اﺳﺖ ،داراي
ﺗﻔﺎوت اﺳﺖ.
:make and break codesﺑﻪ ازاي ﻓﺸﺎردادن و رﻫﺎﻛﺮدن ﻳﻚ ﻛﻠﻴﺪ ،ﻛﺪﻫﺎي ﻣﺘﻔﺎوﺗﻲ ﺗﻮﻟﻴﺪ ﻣﻲﺷﻮد و ﺑﻪ PCارﺳﺎل ﻣﻲﺷﻮد ﺗﺎ ﺗﻌﻴﻦ ﺷﻮد ﻛﻪ ﻳﻚ
ﻛﻠﻴﺪ زده ﺷﺪه ﻳﺎ رﻫﺎ ﺷﺪه اﺳﺖ و از ﻃﺮﻳﻖ ﻓﺸﺎردادن دو ﻛﻠﻴﺪ در ﻳﻚ زﻣﺎن ﻗﺎﺑﻞ ﺗﺸﺨﻴﺺ ﻣﻲﺷﻮد و ﺑﺪون اﻳﻦ روش ﻧﻤﻲﺗﻮان از ﻛﻠﻴﺪﻫﺎي ﺗﺮﻛﻴﺒﻲ ﻣﺜﻞ Shift+Aﻳﺎ
Ctrl+Xاﺳﺘﻔﺎده ﻧﻤﻮد .ﻣﻮﻗﻌﻲ ﻛﻪ ﻳﻚ ﻛﻠﻴﺪ زده ﻣﻲﺷﻮد ،ﺑﻴﺖ ﻫﻔﺘﻢ scan codeﺻﻔﺮ اﺳﺖ و اﻳﻦ ﻳﻚ make codeاﺳﺖ و ﻣﻮﻗﻊ رﻫﺎﻛﺮدن اﻳﻦ ﻛﻠﻴﺪ ،ﺑﻴﺖ ﻫﻔﺘﻢ
ﻳﻚ ﺧﻮاﻫﺪ ﺑﻮد و ﺑﻪ ﻋﻨﻮان ﻳﻚ break codeارﺳﺎل ﻣﻲﺷﻮد.
scan codeﻳﻚ ﺑﺎﻳﺖ اﺳﺖ و ﺑﺎ اﺳﺘﻔﺎده از آن ﻧﻤﻲﺗﻮان ﺗﺮﻛﻴﺐ ﻫﻤﻪي ﻛﻠﻴﺪﻫﺎي ﻛﻨﺘﺮﻟﻲ و ﺣﺮوف ﺑﺰرگ و ﻛﻮﭼﻚ و ﻏﻴﺮه را اﻳﺠﺎد ﻧﻤﻮد .راه ﺣﻞ اﻳﻦ
اﺳﺖ ﻛﻪ ﺑﻪازاي ﻫﺮ ﻛﻠﻴﺪ ﻣﻌﻤﻮﻟﻲ ﻳﺎ ﻛﻨﺘﺮﻟﻲ ﻳﻚ scan codeارﺳﺎل ﺷﻮد .ﻳﻌﻨﻲ ،ﻣﺜﻼً ﺑﺮاي ،Shift+Aاﺑﺘﺪا ﻳﻚ make codeﻛﻠﻴﺪ (36H) Shiftو ﺳﭙﺲ
make codeﻛﻠﻴﺪ (1EH) Aارﺳﺎل ﻣﻲﺷﻮد .ﺳﻴﺴﺘﻢ ﭼﻮن دوﺗﺎ make codeدرﻳﺎﻓﺖ ﺷﺪه و break codeدرﻳﺎﻓﺖ ﻧﺸﺪه ،ﭘﺲ دو ﻛﺪ را در ﻫﻢ ﺗﺮﻛﻴﺐ ﻧﻤﻮده
و ﺣﺮف ﺑﺰرگ A 3را اﻳﺠﺎد ﻣﻲﻛﻨﺪ و ﻛﺪ اَﺳﻜﻲ ﻣﺘﻨﺎﻇﺮ را ﺑﻪ ﺑﺮﻧﺎﻣﻪﻫﺎ ارﺳﺎل ﻣﻲﻛﻨﺪ .اﻳﻦ ﮔﻮﻧﻪ ﺗﻔﺴﻴﺮﻫﺎ ،ﺗﻮﺳﻂ روال ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪي ﺻﻔﺤﻪ ﻛﻠﻴﺪ 4ROM-BIOS
) (INT 09Hاﻧﺠﺎم ﻣﻲﺷﻮد و ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ASCII code ،make & break codesاﻳﺠﺎد ﻣﻲﺷﻮد.
ﺗﺒﺪﻳﻞ scan codeﺑﻪ :ASCII codeﭼﻮن scan codeﺑﻪ ASCII codeﻣﻲﺷﻮد ،ﭘﺲ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻳﻜﺴﺎن و اﺳﺘﺎﻧﺪارد ﺑﻮدن ،ASCIIدر
ﺻﻮرت ﺗﻐﻴﻴﺮ ﺳﺨﺖاﻓﺰار ﺻﻔﺤﻪ ﻛﻠﻴﺪ و ارﺳﺎل scan codeﻫﺎي ﻣﺘﻔﺎوت ،ﺑﺎ ﺗﻐﻴﻴﺮ روال ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪي ﺻﻔﺤﻪﻛﻠﻴﺪ در ،ROM-BIOSﺑﺮﻧﺎﻣﻪﻫﺎ ﻣﺸﻜﻠﻲ ﻧﺨﻮاﻫﻨﺪ
داﺷﺖ .ﺑﺮاي ﻣﺜﺎل در ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎي Laptopﺳﺨﺖاﻓﺰار دﻳﮕﺮي ﺑﺮاي ﺻﻔﺤﻪ ﻛﻠﻴﺪ وﺟﻮد دارد ﻛﻪ ﻣﺘﻔﺎوت ﺑﺎ ﺻﻔﺤﻪ ﻛﻠﻴﺪﻫﺎي ﻣﻌﻤﻮﻟﻲ 101ﻳﺎ 102ﻛﻠﻴﺪي اﺳﺖ.
_________________________________________________________________________________
syncronous ١
asynchronous ٢
upper case ٣
ROM-BIOS keyboard handler ٤
2-5 ﻓﺼﻞ :5ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺻﻔﺤﻪ ﻛﻠﻴﺪ
0040:001C 0040:001A
ﻣﺘﻐﻴﺮﻫﺎي ﻧﺸﺎﻧﻴﻬﺎي 1CH ،1AHو ،1EHﺑﺎﻓﺮ ﭼﺮﺧﻪاي ﺻﻔﺤﻪﻛﻠﻴﺪ را ﺗﻌﻴﻴﻦ ﻣﻲﻛﻨﻨﺪ .اوﻟﻴﻦ ﻣﺘﻐﻴﺮ ،اﺷﺎرهﮔﺮي ﺑﻪ ﻛﺎراﻛﺘﺮ ﺑﻌﺪي در ﺑﺎﻓﺮ ﭼﺮﺧﻪاي،
دوﻣﻴﻦ ﻣﺘﻐﻴﺮ ،اﺷﺎرهﮔﺮ ﺑﻪ آﺧﺮﻳﻦ ﻛﺎراﻛﺘﺮ و ﻣﺘﻐﻴﺮ ﺳﻮم ﻛﻪ از 1EHﺷﺮوع ﺷﺪه و ﺗﺎ 3DHاداﻣﻪ ﻣﻲﻳﺎﺑﺪ و داراي ﻃﻮل 16ﻛﻠﻤﻪ ﻳﺎ 32ﺑﺎﻳﺖ اﺳﺖ ،ﻣﺤﺪودهي ﺑﺎﻓﺮ
ﭼﺮﺧﻪاي اﺳﺖ .دﻟﻴﻞ اﻧﺘﺨﺎب ﺑﺎﻓﺮ ﭼﺮﺧﻪاي ،ﻋﺪم ﻧﻴﺎز ﺑﻪ ﺷﻴﻔﺖدادن ﺑﺎﻓﺮ در ﺻﻮرت ﺑﺮداﺷﺘﻦ ﻳﻚ ﻛﺎراﻛﺘﺮ از اﺑﺘﺪاي ﺑﺎﻓﺮ اﺳﺖ و ﻛﺎﻓﻲ اﺳﺖ ﻛﻪ ﻓﻘﻂ اﺷﺎرهﮔﺮ Nextﻳﻜﻲ
اﺿﺎﻓﻪ ﺷﻮد ،و در ﺻﻮرت رﺳﻴﺪن ﺑﺎ آﺧﺮ ﺑﺎﻓﺮ ،دوﺑﺎره ﺑﻪ اﺑﺘﺪاي ﺑﺎﻓﺮ اﺷﺎره ﻛﻨﺪ .اﻳﻦ روش زﻣﺎن ﭘﺮدازش ﺑﺎﻓﺮ ﺑﻮﺳﻴﻠﻪي INT 09Hرا ﻛﺎﻫﺶ ﻣﻲدﻫﺪ.
4-5ﺳﺎﻳﺮ ﻧﻜﺎت
روال ﺟﺪﻳﺪ ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪي ﺻﻔﺤﻪﻛﻠﻴﺪ :اﮔﺮ ﺑﺨﻮاﻫﻴﻢ ﺗﻔﺴﻴﺮ ﺟﺪﻳﺪي از ﺗﺮﻛﻴﺐ ﻛﻠﻴﺪﻫﺎ داﺷﺘﻪ ﺑﺎﺷﻴﻢ ،و ﺑﺮاي ﻧﻤﻮﻧﻪ ﺗﺮﻛﻴﺐ ﻛﻠﻴﺪﻫﺎي
Alt+Ctrl+Deleteﺑﺎﻋﺚ resetﺷﺪن ﺳﻴﺴﺘﻢ ﻧﺸﻮد ،ﻳﺎ ﺑﺎ زدن ﺗﺮﻛﻴﺐ ﻛﻠﻴﺪﻫﺎي ﻣﺜﻼً Alt+F10ﻳﻚ ﺑﺮﻧﺎﻣﻪي ﻣﻘﻴﻢ در ﺣﺎﻓﻈﻪ ) 1(TSRﻓﻌﺎل ﺷﻮد ،ﺑﺎﻳﺪ روال
ﺟﺪﻳﺪي ﺑﺮاي ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪي ﺻﻔﺤﻪ ﻛﻠﻴﺪ) (INT 09Hﺑﻨﻮﻳﺴﻴﻢ و ﺑﺎ روال ﻣﻮﺟﻮد ﺟﺎﻳﮕﺰﻳﻦ ﻛﻨﻴﻢ.
ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻣﺴﺘﻘﻴﻢ ﺻﻔﺤﻪ ﻛﻠﻴﺪ :ﺑﺎﻳﺪ ﺗﺮاﺷﻪي 8255را ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻛﺮد 8255 .ﻳﻚ ﺗﺮاﺷﻪ ﻫﻤﻪﻣﻨﻈﻮره ﺑﺮاي ارﺗﺒﺎﻃﺎت ورودي-ﺧﺮوﺟﻲ اﺳﺖ،
ﻛﻪ دﺳﺘﮕﺎﻫﻬﺎﻳﻲ ﻣﺜﻞ ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﺑﻪ آن ﻣﺘﺼﻞ ﻣﻲﺷﻮﻧﺪ .اﻳﻦ ﺗﺮاﺷﻪ ﺳﻪ درﮔﺎه ﺑﻪ ﻧﺎﻣﻬﺎي PB ،PAو PCدارد ﻛﻪ ﻧﺸﺎﻧﻴﻬﺎي آﻧﻬﺎ ﺑﻪ ﺗﺮﺗﻴﺐ 61H ،60Hو 62H
ﻫﺴﺘﻨﺪ .ارﺗﺒﺎط ﺑﻴﻦ ﺻﻔﺤﻪ ﻛﻠﻴﺪ و ﭘﺮدازﻧﺪه از ﻃﺮﻳﻖ ﻣﻜﺎﻧﻴﺰم وﻗﻔﻪ و درﮔﺎﻫﻬﺎي PAو PBﺑﺮﻗﺮار ﻣﻲﺷﻮد .در درون ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﻳﻚ ﭘﺮدازﻧﺪه ﻛﻮﭼﻚ وﺟﻮد دارد ﻛﻪ
ﻫﻤﻴﺸﻪ وﺿﻌﻴﺖ ﻛﻠﻴﺪﻫﺎ را ﺑﺮرﺳﻲ ﻣﻲﻛﻨﺪ و ﻣﻨﺘﻈﺮ ﺗﻐﻴﻴﺮات در وﺿﻌﻴﺖ آﻧﻬﺎ اﺳﺖ و ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﻓﺸﺎر دادن ﻳﺎ رﻫﺎﻛﺮدن ﻛﻠﻴﺪﻫﺎ make & break code ،را ﺑﻪ ﺳﻴﺴﺘﻢ
ارﺳﺎل ﻣﻲﻛﻨﺪ .ﺑﺮاي ﺧﻮاﻧﺪن ﻳﻚ ﻛﻠﻴﺪ scan code ،آن از درﮔﺎه PAﺧﻮاﻧﺪه ﻣﻲﺷﻮد و ﺳﭙﺲ ﺑﺎ ﻳﻚ ﻛﺮدن ﺑﻴﺖ Ack ،7از ﻃﺮﻳﻖ PBارﺳﺎل ﻣﻲﺷﻮد.
ﺣﺮﻛﺖ دادن ﻣﻜﺎنﻧﻤﺎ :ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ﺑﺎﻳﺪ ﺗﺮاﺷﻪي 6845ﻛﻪ CRT Controllerاﺳﺖ ،ﺑﺮﻧﺎﻣﻪرﻳﺰي ﺷﻮد ،ﻛﻪ در اﻳﻨﺠﺎ ﺑﻪ آن ﻧﻤﻲﭘﺮدازﻳﻢ .اﻣﺎ
ﻗﻄﻌﻪ ﻛﺪ زﻳﺮ ﺑﻪ زﺑﺎن ،Cﻛﺎر ﺣﺮﻛﺖ دادن ﻣﻜﺎن ﻧﻤﺎ را ﺑﺮ روي ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ اﻧﺠﺎم ﻣﻲدﻫﺪ:
int V = X * 80 + Y;
outportb(0x3D4, 14);
outportb(0x3D5, (V >> 8) & 0xFF);
outportb(0x3D4, 15);
outportb(0x3D5, V & 0xFF);
}
ﻓﺼﻞ :6ﮔﺮداﻧﻨﺪﻫﺎي دﻳﺴﻜﺖ و دﻳﺴﻚ ﺳﺨﺖ
)(Diskette and Hard Disk Drives
1-6ﻣﻘﺪﻣﻪ
BIOSو ،DOSﻫﺮ دو ﺗﻮاﺑﻌﻲ را ﺑﺮاي ﻛﺎرﻛﺮدن ﺑﺎ دﻳﺴﻜﺖ و دﻳﺴﻚ ﺳﺨﺖ در اﺧﺘﻴﺎر ﻗﺮار ﻣﻲدﻫﻨﺪ .ﺗﻮاﺑﻊ BIOSﺳﻄﺢ ﭘﺎﻳﻴﻦ ﻫﺴﺘﻨﺪ و ﺑﻪ دﻳﺴﻚ ﺑﻪ
ﻋﻨﻮان ﻳﻚ وﺳﻴﻠﻪي ﻓﻴﺰﻳﻜﻲ ﻧﮕﺎه ﻣﻲﻛﻨﻨﺪ .اﻣﺎ ﺗﻮاﺑﻊ DOSﺳﻄﺢ ﺑﺎﻻ ﺑﻮده و ﺑﻪ دﻳﺴﻚ ﺑﻪﺻﻮرت ﻣﻨﻄﻘﻲ ﻧﮕﺎه ﻣﻲﻛﻨﻨﺪ .ﺑﺮاي ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪﻫﺎي ﻛﻤﻜﻲ ﻣﺜﻞ Norton
Utilitiesﻳﺎ ،PC Toolsﻧﻴﺎز ﺑﻪ دﺳﺘﺮﺳﻲ ﺑﻪ دﻳﺴﻚ درﺳﻄﺢ BIOSاﺳﺖ .دﺳﺘﺮﺳﻲ ﻣﺴﺘﻘﻴﻢ ﺑﻪ دﻳﺴﻜﺖ و ﺑﻪوﻳﮋه دﻳﺴﻚ ﺳﺨﺖ ﻧﻴﺰ ﻣﻮرد ﻧﻴﺎز اﺳﺖ .ﻣﺜﻼً در
ﺻﻮرﺗﻲ ﻛﻪ ﺑﺨﻮاﻫﻴﻢ از ﻳﻚ ﻛﻨﺘﺮﻟﺮ ﺧﺎص ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ دﻳﺴﻚ اﺳﺘﻔﺎده ﻛﻨﻴﻢ ﻛﻪ ﺑﻮﺳﻴﻠﻪي BIOSﭘﺸﺘﻴﺒﺎﻧﻲ ﻧﻤﻲﺷﻮد ،ﻳﺎ آﻧﻜﻪ ﺑﺨﻮاﻫﻴﻢ ﻳﻚ روش دﺳﺘﺮﺳﻲ وﻳﮋه
ﭘﻴﺎدهﺳﺎزي ﻛﻨﻴﻢ .دﺳﺘﺮﺳﻲ ﻣﺴﺘﻘﻴﻢ ﺑﻪ دﻳﺴﻚ ﺳﺨﺖ ،ﻧﻴﺎزﻣﻨﺪ ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻛﻨﺘﺮﻟﺮﻫﺎﻳﻲ ﻧﻈﻴﺮ IDEﻳﺎ SCSIاﺳﺖ.
ﻣﺤﺎﺳﺒﻪ ﻇﺮﻓﻴﺖ دﻳﺴﻜﺖ :ﺑﺎ ﻓﺮﻣﻮل زﻳﺮ ﻣﻲﺗﻮان ﻇﺮﻓﻴﺖ ﻳﻚ دﻳﺴﻜﺖ را ﻣﺤﺎﺳﺒﻪ ﻧﻤﻮد:
_________________________________________________________________________________
floppy disk ١
track ٢
sector ٣
2-6 ﻓﺼﻞ :6ﮔﺮداﻧﻨﺪهﻫﺎي دﻳﺴﻜﺖ و دﻳﺴﻚ ﺳﺨﺖ
اﻳﻦ ﻓﺮﻣﻮل ﺑﺮاي ﻣﺤﺎﺳﺒﻪي ﻓﺮﻣﻮل ﻳﻚ ﻃﺮف دﻳﺴﻜﺖ اﺳﺖ و اﮔﺮ ﮔﺮداﻧﻨﺪهي دﻳﺴﻜﺖ داراي دو ﻫِﺪ 1ﺑﺎﺷﺪ ،دوﻃﺮف دﻳﺴﻜﺖ ﻗﺎﺑﻞ ﺧﻮاﻧﺪن و ﻧﻮﺷﺘﻦ اﺳﺖ و
در اﻳﻦ ﺻﻮرت دﻳﺴﻜﺖ ﭼﮕﺎﻟﻲ دوﺑﺮاﺑﺮ 2ﺧﻮاﻫﺪ ﺑﻮد و ﻇﺮﻓﻴﺖ دﻳﺴﻜﺖ دو ﺑﺮاﺑﺮ ﻣﻲﺷﻮد .ﭘﺲ ﺳﺎﺧﺘﺎر دﻳﺴﻜﺖ ﺷﺎﻣﻞ ﺗﻌﺪادي ﻃﺮﻓﻬﺎ ،ﺗﻌﺪاد ﺷﻴﺎرﻫﺎ ،ﺗﻌﺪاد ﺑﺨﺸﻬﺎي ﻫﺮ ﺷﻴﺎر
و ﻇﺮﻓﻴﺖ ﻳﻚ ﺑﺨﺶ اﺳﺖ.
دﻳﺴﻜﺖﻫﺎي ” ،3.5ﻳﺎ ﭼﮕﺎﻟﻲ دوﺑﺮاﺑﺮ ﻫﺴﺘﻨﺪ و 720KBﻇﺮﻓﻴﺖ دارﻧﺪ و ﻳﺎ ﭼﮕﺎﻟﻲ ﺑﺎﻻ 3ﺑﻮده و 1.44MBﻇﺮﻓﻴﺖ دارﻧﺪ .در دﻳﺴﻜﺘﻬﺎي ﭼﮕﺎﻟﻲ ﺑﺎﻻ،
ﺗﻌﺪاد ﺑﺨﺸﻬﺎ در ﻫﺮ ﺷﻴﺎر دو ﺑﺮاﺑﺮ ﭼﮕﺎﻟﻲ دوﺑﺮاﺑﺮ ﺑﻮده و ﻣﺴﺎوي 18اﺳﺖ .ﺗﻌﺪاد ﺷﻴﺎرﻫﺎ در ﻫﺮ دو ﻧﻮع 80 ،در ﻫﺮ ﻃﺮف اﺳﺖ .ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ:
ﺳﺎﺧﺘﺎر دﻳﺴﻚ ﺳﺨﺖ :دﻳﺴﻜﺖ ﻓﻘﻂ ﻳﻚ ﺻﻔﺤﻪ ﻳﺎ دوﺻﻔﺤﻪ ﭘﺸﺖ و رو ) (Side 0, Side 1اﺳﺖ .دﻳﺴﻚ ﺳﺨﺖ ﻫﻢ ﺗﻌﺪادي ﺻﻔﺤﻪ اﺳﺖ ﻛﻪ
روي ﻫﻢ ﻗﺮار ﮔﺮﻓﺘﻪاﻧﺪ و ﺑﻪ ﻫﺮ ﻛﺪام ﻳﻚ ﺳﻴﻠﻨﺪر 4ﮔﻔﺘﻪ ﻣﻲﺷﻮد .ﺑﺮاي آﻧﻜﻪ ﺧﻮاﻧﺪن دادهﻫﺎ از ﺻﻔﺤﻪﻫﺎي ﻣﺨﺘﻠﻒ ﺳﺮﻳﻊﺗﺮ ﺑﺎﺷﺪ ،ﺗﻌﺪاد ﻫﺪﻫﺎ زﻳﺎدﺗﺮ اﺳﺖ .ﺣﺮﻛﺖدادن ﻳﻚ
ﻫﺪ روي ﺷﻴﺎرﻫﺎي ﻣﺨﺘﻠﻒ ﻛﻨﺪ اﺳﺖ ،ﭘﺲ اﮔﺮ ﺑﺨﻮاﻫﻴﻢ دادهاي را ﻛﻪ ﺣﺠﻢ زﻳﺎدي دارد در ﭼﻨﺪ ﺷﻴﺎر ﺑﻨﻮﻳﺴﻴﻢ ،ﻳﻚ راه ،ﻧﻮﺷﺘﻦ آن در ﺷﻴﺎرﻫﺎي ﭘﺸﺖ ﺳﺮ ﻫﻢ اﺳﺖ .اﻣﺎ
اﻳﻦ ﻛﺎر ﺑﺎﻋﺚ ﻣﻲﺷﻮد ﻛﻪ ﺑﺎزوﻳﻲ 5ﻛﻪ ﻫﺪﻫﺎ ﺑﻪ آن ﻣﺘﺼﻞ ﻫﺴﺘﻨﺪ ،ﻧﻴﺎز ﺑﻪ ﺣﺮﻛﺖ داﺷﺘﻪ ﺑﺎﺷﺪ .وﻟﻲ ﺑﺮاي آﻧﻜﻪ اﻳﻦ ﻛﺎر ﺳﺮﻳﻊﺗﺮ ﺑﺎﺷﺪ ،دادهﻫﺎﻳﻲ را ﻛﻪ در ﻳﻚ ﺷﻴﺎر ﺟﺎ
ﻧﻤﻲﺷﻮﻧﺪ ،در ﺷﻴﺎرﻫﺎي ﻫﻢﺷﻤﺎره در ﺻﻔﺤﺎت ﻣﺨﺘﻠﻒ ﻣﻲﻧﻮﻳﺴﻨﺪ .اﻳﻦ ﻛﺎر ﻧﻴﺎز ﺑﻪ ﺣﺮﻛﺖ ﺑﺎزو را ﺑﺮﻃﺮف ﻣﻲﻛﻨﺪ و ﺑﺎﻋﺚ ﺗﺴﺮﻳﻊ در ﻧﻮﺷﺘﻦ و ﺧﻮاﻧﺪن دادهﻫﺎ ﻣﻲﺷﻮد.
ﻇﺮﻓﻴﺖ دﻳﺴﻚ ﺳﺨﺖ:
Function Task
00H Reset
01H Read status
02H Read
03H Write
04H Verify
05H Format
08H Request format
09H Define drive type
16H Detect diskette change
17H Determine diskette format
18H Determine diskette format
وﺿﻌﻴﺖ ﮔﺮداﻧﻨﺪه :ﺗﺎﺑﻊ ،01Hﭘﺲ از ﻓﺮاﺧﻮاﻧﻲ ،ﺑﺎﻳﺖ وﺿﻌﻴﺖ ﮔﺮداﻧﻨﺪه را در ﺛﺒﺎت AHﺑﺮﻣﻲﮔﺮداﻧﺪ .ﻫﻤﭽﻨﻴﻦ ﭘﺲ از ﻓﺮاﺧﻮاﻧﻲ ﺳﺎﻳﺮ ﺗﻮاﺑﻊ ،اﮔﺮ
ﻣﻘﺪاري ﻏﻴﺮﺻﻔﺮ در AHﺑﺎﺷﺪ ﻳﺎ ،(Carry Flag) CFﻣﻘﺪار 1داﺷﺘﻪ ﺑﺎﺷﺪ ،ﺧﻄﺎ رخ داده اﺳﺖ .ﻣﻘﺎدﻳﺮ ﻣﺨﺘﻠﻒ ﺑﺎﻳﺖ وﺿﻌﻴﺖ ﮔﺮداﻧﻨﺪه ،ﻧﻤﺎﻳﺶدﻫﻨﺪه اﻧﻮاع ﺧﻄﺎﻫﺎ
اﺳﺖ:
00H: No error
01H: Illegal function number
02H: Address marking not found
03H: Attempt to write to write-prootected diskette
...
ﻧﻮع ﮔﺮداﻧﻨﺪه و ﻓﺮﻣﺖ دﻳﺴﻜﺖ :ﺗﺎﺑﻊ ،08Hاﻃﻼﻋﺎت زﻳﺮ را در ﺛﺒﺎﺗﻬﺎي ﻣﺨﺘﻠﻒ ﺑﺮﻣﻲﮔﺮداﻧﺪ:
_________________________________________________________________________________
head ١
double-density ٢
high-density ٣
cylender ٤
arm ٥
3-6 ﻓﺼﻞ :6ﮔﺮداﻧﻨﺪهﻫﺎي دﻳﺴﻜﺖ و دﻳﺴﻚ ﺳﺨﺖ
Register Information
BL Drive type : 01H = 5.25”, 360KB
02H = 5.25”, 1.2MB
03H = 3.5”, 720KB
04H = 3.5”, 1.44MB
DH )Max. number of sides (always 1 for 2 sides
CH Max. number of tracks
CL Max. number of sectors
ES:DI )Pointer to DDPT (Disk Drive Parameter Table
* ،DDPTﺟﺪوﻟﻲ اﺳﺖ ﻛﻪ ﭘﺎراﻣﺘﺮﻫﺎي ﻣﻮردﻧﻴﺎز BIOSﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﻛﻨﺘﺮﻟﺮ دﻳﺴﻚ در آن ﻗﺮار دارد.
ﺗﺸﺨﻴﺺ ﺗﻌﻮﻳﺾ دﻳﺴﻜﺖ :ﺗﺎﺑﻊ 16Hﺗﻌﻮﻳﺾ دﻳﺴﻜﺖ را ﭘﺲ از دﺳﺘﻴﺎﺑﻲ ﻗﺒﻠﻲ ﻛﻨﺘﺮل ﻣﻲﻛﻨﺪ و ﺗﺸﺨﻴﺺ ﻣﻲدﻫﺪ .ﭘﺲ از ﺧﻮاﻧﺪن اﻃﻼﻋﺎت از
دﻳﺴﻜﺖ و ﻗﺒﻞ از ﻧﻮﺷﺘﻦ ﺑﺮ روي آن ،ﺑﺎﻳﺪ ﻛﻨﺘﺮل ﺷﻮد ﻛﻪ دﻳﺴﻜﺖ ﺗﻌﻮﻳﺾ ﻧﺸﺪه ﺑﺎﺷﺪ .در ﻏﻴﺮ اﻳﻦ ﺻﻮرت ﻣﻤﻜﻦ اﺳﺖ ﺗﻮاﺑﻊ ﺳﻄﺢ ﺑﺎﻻﺗﺮ ،ﻣﺜﻞ ﺗﻮاﺑﻊ ،DOSاﻃﻼﻋﺎت
دﻳﺴﻜﺖ را ﺧﺮاب ﻛﻨﻨﺪ .ﻣﺜﻼً ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ FATدﻳﺴﻜﺖ ﻗﺒﻠﻲ ،اﻃﻼﻋﺎﺗﻲ را ﺑﺮ روي دﻳﺴﻜﺖ ﺗﻌﻮﻳﺾ ﺷﺪه ﺑﻨﻮﻳﺴﻨﺪ .اﻳﻦ ﺗﺎﺑﻊ ﻣﻘﺎدﻳﺮ زﻳﺮ را در ﺛﺒﺎت AHﺑﺮﻣﻲﮔﺮداﻧﺪ:
ﻧﻮﺷﺘﻦ ﺑﺨﺸﻬﺎي دﻳﺴﻜﺖ :ﺗﺎﺑﻊ 03Hﺑﺮاي اﻳﻦ ﻛﺎر ﻗﺎﺑﻞ اﺳﺘﻔﺎده اﺳﺖ و ﺑﺎ ﻳﻚ ﺑﺎر ﻓﺮاﺧﻮاﻧﻲ ،ﻣﻲﺗﻮان ﭼﻨﺪ ﺑﺨﺶ را ﺑﺮ روي دﻳﺴﻜﺖ ﻧﻮﺷﺖ .ﺑﺮاي
اﻳﻦ ﻣﻨﻈﻮر ﺑﺎﻳﺪ ﭘﺎراﻣﺘﺮﻫﺎي زﻳﺮ ﻓﺮاﻫﻢ ﺷﻮد:
AL: No of sectores to be written
)DL: Drive specification value (0: A, 1:B, etc.
)DH: Side (0 or 1
)CL: Sector number (1...N
)CH: Track number (1..N-1
ES:BX: Address of buffer for the data to be written
ﭘﺲ از ﻧﻮﺷﺘﻦ ،وﺿﻌﻴﺖ ﺧﻄﺎ در AHﺑﺮﮔﺮداﻧﺪه ﻣﻲﺷﻮد و ﺗﻌﺪاد ﺑﺨﺸﻬﺎي ﻧﻮﺷﺘﻪ ﺷﺪه در ALﻗﺮار ﻣﻲﮔﻴﺮد .اﮔﺮ CFﻣﻘﺪار 1داﺷﺘﻪ ﺑﺎﺷﺪ ،ﺧﻄﺎ رخ داده
اﺳﺖ.
وارﺳﻲ 1ﺑﺨﺸﻬﺎي دﻳﺴﻜﺖ :ﺗﺎﺑﻊ 04Hاﻧﺘﻘﺎل درﺳﺖ دادهﻫﺎ ﺑﻪ دﻳﺴﻜﺖ را ﭘﺲ از ﻧﻮﺷﺘﻦ ﺑﺮرﺳﻲ ﻣﻲﻛﻨﺪ .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر دادهﻫﺎي ﻣﻮﺟﻮد در ﺑﺎﻓﺮ و
ﻧﻮﺷﺘﻪ ﺷﺪه ﺑﺮ روي دﻳﺴﻜﺖ )ﺑﺎﻳﺖ ﺑﻪ ﺑﺎﻳﺖ( ﺑﺎ ﻫﻢ ﻣﻘﺎﻳﺴﻪ ﻧﻤﻲﺷﻮﻧﺪ ،ﺑﻠﻜﻪ ،ﻛﺪ 2CRCآﻧﻬﺎ ﺑﺎ ﻫﻢ ﻣﻘﺎﻳﺴﻪ ﻣﻲﺷﻮد ،CRC .ﻳﻚ ﺗﺎﺑﻊ ﻣﺤﺎﺳﺒﻪي ﻣﺠﻤﻮع ﻣﻘﺎﺑﻠﻪاي3
اﺳﺖ ﻛﻪ ﭘﺎراﻣﺘﺮ ورودي آن دادهﻫﺎ اﺳﺖ و ﻣﻘﺪار ﺧﺮوﺟﻲ آن ،ﻳﻚ ﻛﺪ اﺳﺖ .ﺑﺮاي ﻣﺜﺎل ﻣﻲﺗﻮان ﻫﻤﻪي دادهﻫﺎي ﻣﻮﺟﻮد در ﺑﺎﻓﺮ را ﺑﺎﻳﺖ ﺑﻪ ﺑﺎﻳﺖ ﺑﺎﻫﻢ XORﻧﻤﻮد ﺗﺎ ﻳﻚ
_________________________________________________________________________________
verifying ١
Cyclic Redundancy Check ٢
checksum ٣
4-6 ﻓﺼﻞ :6ﮔﺮداﻧﻨﺪهﻫﺎي دﻳﺴﻜﺖ و دﻳﺴﻚ ﺳﺨﺖ
ﺑﺎﻳﺖ ﺣﺎﺻﻞ ﺷﻮد و ﻫﻤﻴﻦ ﻛﺎر را ﺑﺮ روي دادهﻫﺎي ﻧﻮﺷﺘﻪ ﺷﺪه ﺑﺮ روي دﻳﺴﻚ اﻧﺠﺎم داد و ﺳﭙﺲ اﻳﻦ دو ﺑﺎﻳﺖ را ﺑﺎ ﻫﻢ ﻣﻘﺎﻳﺴﻪ ﻧﻤﻮد .ﻣﺤﺎﺳﺒﻪي ﻣﺠﻤﻮع ﻣﻘﺎﺑﻠﻪاي و
ﻣﻘﺎﻳﺴﻪي ﺗﻨﻬﺎ دو ﺑﺎﻳﺖ ،از ﻣﻘﺎﻳﺴﻪي ﻫﻤﻪي دادهﻫﺎ ﺑﻪﻣﺮاﺗﺐ ﺳﺮﻳﻊﺗﺮ اﺳﺖ ،CRC .ﻧﻮﻋﻲ ﻣﺠﻤﻮع ﻣﻘﺎﺑﻠﻪاي اﺳﺖ ﻛﻪ ﺣﺎﺻﻞ آن ﺑﺴﻴﺎر ﻣﻄﻤﺌﻦ ﺑﻮده و ﺑﺎ اﺣﺘﻤﺎل ﺑﺴﻴﺎر
ﭘﺎﻳﻴﻦ ﺑﺮاي دادهﻫﺎي ﻣﺘﻔﺎوت ﺣﺎﺻﻞ آن ﻳﻜﺴﺎن اﺳﺖ و ﺑﻪ ﻛﻤﻚ ﺳﺨﺖاﻓﺰار ﻧﻴﺰ ﻗﺎﺑﻞ ﻣﺤﺎﺳﺒﻪ اﺳﺖ.
ﻗﺎﻟﺐﺑﻨﺪي)ﻓﺮﻣﺖﻛﺮدن( ﺷﻴﺎرﻫﺎ :ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ 05Hاﻧﺠﺎم ﻣﻲﺷﻮد و ﭘﺎراﻣﺘﺮﻫﺎي ﻻزم ﺑﻪ ﺷﺮح زﻳﺮ اﺳﺖ:
Function Task
00H Reset
01H Read status
02H Read
03H Write
04H Verify
05H Format
08H Check format
09H )Adapt to foreign drives (not defined in BIOS
0AH Extended Read
0BH: Extended Write
0CH: Move read/write head
0DH: Reset
10H: Drive ready
11H: Recalibrate drive
14H Controller diagnostic
15H Determine drive type
ﻗﺎﻟﺐﺑﻨﺪي ﺳﻄﺢﭘﺎﻳﻴﻦ :2ﺑﻪ ﻣﻨﻄﻮر ﺳﺎزﻣﺎﻧﺪﻫﻲ ﮔﺮداﻧﻨﺪه ﺑﻪ ﺳﻴﻠﻨﺪرﻫﺎ ،ﺷﻴﺎرﻫﺎ و ﺑﺨﺸﻬﺎ ،ﺑﺎ ﻧﻮﺷﺘﻦ ﻋﻼﻣﺘﻬﺎي ﻧﺸﺎﻧﻲ 3ﻣﻨﺎﺳﺐ در ﺳﻄﺢ ﮔﺮداﻧﻨﺪه •
اﻧﺠﺎم ﻣﻲﺷﻮد .اﻳﻦ ﻋﻼﻣﺘﻬﺎي ﻧﺸﺎﻧﻲ ﺑﻌﺪاً ﺑﻮﺳﻴﻠﻪي ﻛﻨﺘﺮﻟﺮ ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ دﻳﺴﻚ ﺳﺨﺖ و ﺗﺸﺨﻴﺺ ﺑﺨﺸﻬﺎ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﻲﮔﻴﺮد .ﻗﺎﻟﺐﺑﻨﺪي
_________________________________________________________________________________
patritions ١
low-level format ٢
address marker ٣
5-6 ﻓﺼﻞ :6ﮔﺮداﻧﻨﺪهﻫﺎي دﻳﺴﻜﺖ و دﻳﺴﻚ ﺳﺨﺖ
ﺳﻄﺢ ﭘﺎﻳﻴﻦ ﻫﻤﭽﻨﻴﻦ ﺑﺮاي ﺧﺎرج ﻛﺮدن ﺑﺨﺸﻬﺎﻳﻲ از دﻳﺴﻚ ﻛﻪ ﺑﻪﻃﻮر ﻓﻴﺰﻳﻜﻲ ﺧﺮاب ﺷﺪهاﻧﺪ از ﻓﻬﺮﺳﺖ ﺑﺨﺸﻬﺎي ﻗﺎﺑﻞ اﺳﺘﻔﺎدهي دﻳﺴﻚ ﻣﻮرد
اﺳﺘﻔﺎده ﻗﺮار ﻣﻲﮔﻴﺮد .اﻳﻦ ﻧﻮع ﻗﺎﻟﺐﺑﻨﺪي ﺑﺮاي ﻛﻨﺘﺮﻟﺮﻫﺎي SCSIﻣﻮرد ﻧﻴﺎز ﻧﺒﻮده و ﻓﻘﻂ ﺑﺮاي ﻛﻨﺘﺮﻟﺮﻫﺎي IDEاﺳﺘﻔﺎده ﻣﻲﺷﻮد .ﺑﺮﻧﺎﻣﻪي
ﻗﺎﻟﺐﺑﻨﺪي ﻋﻤﻮﻣﺎً در ﺑﺮﻧﺎﻣﻪي ﺗﻨﻈﻴﻢ BIOS 1ﻳﺎ در ﺑﺮﺧﻲ از ﺑﺮﻧﺎﻣﻪﻫﺎي ﻛﻤﻜﻲ وﺟﻮد دارد.
ﺗﻘﺴﻴﻢﺑﻨﺪي :ﻳﻚ دﻳﺴﻚ ﺳﺨﺖ ﺑﻪ ﻗﺴﻤﺘﻬﺎﻳﻲ ،ﺗﻘﺴﻴﻢ ﻣﻲﺷﻮد .اﻳﻦ ﻛﺎر ﺑﻪﻛﻤﻚ ﺑﺮﻧﺎﻣﻪي DOS FDISKاﻧﺠﺎم ﻣﻲﺷﻮد و ﺑﻪ دو دﻟﻴﻞ ﻣﻮرد •
ﻧﻴﺎز اﺳﺖ .ﻧﺨﺴﺖ ،ﺑﺮاي ﺗﻘﺴﻴﻢ ﻳﻚ دﻳﺴﻚ ﺑﺰرگ ﺑﻪ ﮔﺮداﻧﻨﺪهﻫﺎي ﻣﻨﻄﻘﻲ ،ﺗﺎ ﺑﺘﻮان از دﻳﺴﻜﻬﺎي ﺑﺰرﮔﺘﺮ از 2Giga Byteﺗﺤﺖ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ
DOSاﺳﺘﻔﺎده ﻧﻤﻮد .زﻳﺮا DOSﻧﻤﻲﺗﻮاﻧﺪ ﺑﻪ ﮔﺮداﻧﻨﺪهﻫﺎي ﺑﻴﺶ از 2GBدﺳﺘﺮﺳﻲ داﺷﺘﻪ ﺑﺎﺷﺪ)ﺑﻪ دﻟﻴﻞ ﻣﺤﺪودﻳﺖ .(FATدوم ،ﻧﮕﻬﺪاري
ﺳﻴﺴﺘﻤﻬﺎي ﻋﺎﻣﻞ ﻣﺨﺘﻠﻒ ﺑﺮ روي ﻳﻚ دﻳﺴﻚ ﺳﺨﺖ .ﻣﺜﻼً ،ﻧﮕﻬﺪاري ﻫﻤﺰﻣﺎن ﺳﻪ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ NT ،DOSو ..Linuxﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ ﻣﻲﺗﻮان
ﻫﺮ ﻛﺪام از ﻗﺴﻤﺖﻫﺎ را ﻓﻌﺎل ﻧﻤﻮد ﺗﺎ آن ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ اﺟﺮا ﺷﻮد.
ﻗﺎﻟﺐﺑﻨﺪي دﻳﺴﻚ :اﻳﻦ ﻛﺎر ﻫﻤﺎن ﻗﺎﻟﺐﺑﻨﺪي ﻣﻌﻤﻮﻟﻲ اﺳﺖ ﻛﻪ ﺑﺎ اﺳﺘﻔﺎده از ﺑﺮﻧﺎﻣﻪ DOSFormatاﻧﺠﺎم ﻣﻲﺷﻮد. •
وﻗﺘﻲ ﺑﺎ ﺑﺮﻧﺎﻣﻪي DOS FDISKﻳﻚ دﻳﺴﻚ را ﺗﻘﺴﻴﻢﺑﻨﺪي ﻣﻲﻛﻨﻴﻢ ،دﻳﺴﻚ ﺑﻪ دو ﺑﺨﺶ ﻓﻴﺰﻳﻜﻲ ﺗﻘﺴﻴﻢ ﻣﻲﺷﻮد:
ﺑﺨﺶ ﻧﺨﺴﺖ ﻫﺮ دﻳﺴﻚ ﺳﺨﺖ ،ﺑﺨﺶ ﺗﻘﺴﻴﻢﺑﻨﺪي 2اﺳﺖ و ﻣﺤﻞ ﻧﮕﻬﺪاري اﻃﻼﻋﺎت ﻧﺸﺎﻧﻲ ﺷﺮوع ،ﺧﺘﻢ ،ﻧﻮع و ﻏﻴﺮه در ﻣﻮرد ﺗﻘﺴﻴﻤﺎت دﻳﺴﻚ اﺳﺖ ،ﻛﻪ ﺑﻪ
آن ﺟﺪول ﺗﻘﺴﻴﻤﺎت 3ﮔﻔﺘﻪ ﻣﻲﺷﻮد .اﻳﻦ ﺑﺨﺶ در ﻫﻨﮕﺎم روﺷﻦ ﺷﺪن ﻛﺎﻣﭙﻴﻮﺗﺮ در ﺣﺎﻓﻈﻪ ﺑﺎرﻣﻲﺷﻮد و در ﻧﺸﺎﻧﻲ 0000:7C00ﻗﺮار ﻣﻲﮔﻴﺮد)در ﺻﻮرﺗﻴﻜﻪ دﻳﺴﻜﺘﻲ در
ﮔﺮداﻧﻨﺪهي A:ﻗﺮار ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ(.
اﮔﺮ BIOSﭘﺲ از ﺑﺎرﻛﺮدن ﺑﺨﺶ ﺗﻘﺴﻴﻢﺑﻨﺪي در دو ﺑﺎﻳﺖ آﺧﺮ آن ﻣﻘﺎدﻳﺮ 55Hو AAHرا ﺑﺒﻴﻨﺪ ،ﺑﻪ اﻳﻦ ﻣﻌﻨﻲ ﺧﻮاﻫﺪ ﺑﻮد ﻛﻪ آن ﺑﺨﺶ ﻗﺎﺑﻞاﺟﺮا ﻳﺎ
ﺑﻮتﻛﻨﻨﺪه اﺳﺖ و از ﺑﺎﻳﺖ اول ،آﻧﺮا اﺟﺮا ﻣﻲﻛﻨﺪ .در ﻏﻴﺮ اﻳﻦﺻﻮرت ﭘﻴﻐﺎم ﻗﺮار دادن دﻳﺴﻜﺖ ﺑﻮتﻛﻨﻨﺪه ﺑﻪ ﻛﺎرﺑﺮ داده ﻣﻲﺷﻮد.
در ﻣﻮرد دﻳﺴﻜﺖﻫﺎ ،ﺑﺨﺶ 0ﺣﺎوي ﺑﺮﻧﺎﻣﻪي ﺑﺎرﻛﻨﻨﺪه ﻳﺎ ﺑﻮتﻛﻨﻨﺪهي 4ﺳﻴﺘﺴﻢ ﻋﺎﻣﻞ اﺳﺖ .درﺻﻮرﺗﻲﻛﻪ ،ﻳﻚ دﻳﺴﻜﺖ در ﮔﺮداﻧﻨﺪهي A:ﻗﺮار داﺷﺘﻪ ﺑﺎﺷﺪ،
ﺑﺨﺶ 0آن ﺧﻮاﻧﺪه ﺷﺪه و در ﻧﺸﺎﻧﻲ ﻓﻮق در ﺣﺎﻓﻈﻪ ﻗﺮار ﻣﻲﮔﻴﺮد و آﻧﮕﺎه در ﺻﻮرﺗﻲﻛﻪ اﺟﺮاﻳﻲ ﺑﺎﺷﺪ ،اﺟﺮا ﺷﺪه و در ﻏﻴﺮ اﻳﻦﺻﻮرت ،ﭘﻴﻐﺎم ﺗﻌﻮﻳﺾ دﻳﺴﻜﺖ داده ﻣﻲﺷﻮد.
ﺑﺮﻧﺎﻣﻪاي ﻛﻪ در ﺑﺎﻳﺖ اول ﺑﺨﺶ ﺗﻘﺴﻴﻢﺑﻨﺪي وﺟﻮد دارد ،ﻗﺴﻤﺖ ﻓﻌﺎل ﻛﻪ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﺑﺎﻳﺪ از آن ﺑﺎرﺷﻮد را ﭘﻴﺪا ﻧﻤﻮده آﻧﺮا اﺟﺮا ﻣﻲﻛﻨﺪ .در ﻫﺮ زﻣﺎن ،ﻳﻜﻲ از
ﻗﺴﻤﺖﻫﺎي ﻣﺨﺘﻠﻒ دﻳﺴﻚﺳﺨﺖ ﻣﻲﺗﻮاﻧﺪ ﻓﻌﺎل ﺑﺎﺷﺪ .ﺑﺮﻧﺎﻣﻪي ﺑﻮتﻛﻨﻨﺪه ،از ﺑﺨﺶ ﺑﻮت )ﻧﺨﺴﺘﻴﻦ ﺑﺨﺶ( آن ﻗﺴﻤﺖ ،اﺟﺮا ﻣﻲﺷﻮد .در ﺻﻮرﺗﻲﻛﻪ ،ﺑﺨﺶ 0ﻗﺴﻤﺖ ﻓﻌﺎل،
اﺟﺮاﻳﻲ ﻳﺎ ﺑﻮتﺷﺪﻧﻲ 5ﻧﺒﺎﺷﺪ ،ﭘﻴﻐﺎم ﻗﺮار دادن دﻳﺴﻜﺖ در ﮔﺮداﻧﻨﺪه داده ﻣﻲﺷﻮد.
Partition
Sector 1BEH .........
Partition Table
Drive C:
.
.
.
.
.
.
_________________________________________________________________________________
setup ١
partition sector ٢
partition table ٣
boot strap ٤
bootable ٥
6-6 ﮔﺮداﻧﻨﺪهﻫﺎي دﻳﺴﻜﺖ و دﻳﺴﻚ ﺳﺨﺖ:6 ﻓﺼﻞ
ﺑﻮﺳﻴﻠﻪي ﺑﺮﻧﺎﻣﻪي، ﺑﺮاي ﻓﻴﻠﺪ ﻧﻮع ﻗﺴﻤﺖ ﻗﺮار دﻫﻨﺪNetWare ﻳﺎLinux ﻧﻈﻴﺮ،** ﻣﻘﺎدﻳﺮ دﻳﮕﺮي ﻛﻪ ﻣﻤﻜﻦ اﺳﺖ ﺑﻮﺳﻴﻠﻪي ﺳﺎﻳﺮ ﺳﻴﺴﺘﻤﻬﺎي ﻋﺎﻣﻞ
. ﻧﻤﺎﻳﺶ داده ﻣﻲﺷﻮدNon-DOS ﺗﺤﺖ ﻋﻨﻮانDOS FDisk
“Current ﺷﻤﺎرهي دﻳﺴﻚ ﺟﺎري ﻳﺎ،FDisk در اﻳﻦ ﺻﻮرت ﺑﺎﻳﺪ در ﺑﺮﻧﺎﻣﻪي. ﻣﻲﺗﻮان ﺑﻴﺶ از ﻳﻚ دﻳﺴﻚ ﺳﺨﺖ ﻧﻴﺰ ﻗﺮار دادPC ﺑﺮ روي ﻳﻚ
اﮔﺮ ﻫﺮﻛﺪام ﻗﺴﻤﺘﻬﺎي. ﻧﺨﺴﺘﻴﻦ ﻗﺴﻤﺖ دﻳﺴﻚ دوم ﺧﻮاﻫﺪ ﺑﻮدD: ﻧﺨﺴﺘﻴﻦ ﻗﺴﻤﺖ اوﻟﻴﻦ دﻳﺴﻚ و،C: ﮔﺮداﻧﻨﺪهي، در اﻳﻦ ﺻﻮرت. را اﻧﺘﺨﺎب ﻛﺮدFixed-Disk”
ﻗﺴﻤﺖﻫﺎي دﻳﮕﺮ ﻳﺎ، آﻧﮕﺎه. اداﻣﻪ ﻣﻲﻳﺎﺑﻨﺪG: ﺷﺮوع ﻣﻲﺷﻮﻧﺪ و ﻣﺜﻼً ﺗﺎE: از، ﺳﺎﻳﺮ ﻗﺴﻤﺘﻬﺎي دﻳﺴﻚ دوم ﻳﺎ ﮔﺮداﻧﻨﺪهﻫﺎي ﻣﻨﻄﻘﻲ آن،دﻳﮕﺮي ﻧﻴﺰ داﺷﺘﻪ ﺑﺎﺷﻨﺪ
. ﺷﺮوع ﺧﻮاﻫﺪ ﺷﺪH: ﮔﺮداﻧﻨﺪهﻫﺎي ﻣﻨﻄﻘﻲ دﻳﺴﻚ دوم از
ﻓﺼﻞ :7درﮔﺎه ﻣﻮازي
)(The Parallel Port
1-7ﻣﻘﺪﻣﻪ
وﺳﺎﻳﻠﻲ ﻧﻈﻴﺮ ﭼﺎﭘﮕﺮ ،از ﻃﺮﻳﻖ درﮔﺎه ﻣﻮازي ﺑﻪ PCوﺻﻞ ﻣﻲﺷﻮﻧﺪ .ﺳﻪ روش ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ درﮔﺎه ﻣﻮازي وﺟﻮد دارد:
(1ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻣﺴﺘﻘﻴﻢ ﺳﺨﺖاﻓﺰار درﮔﺎه ﻣﻮازي،
اﮔﺮ ﺑﺨﻮاﻫﻴﻢ ﭼﺎﭘﮕﺮ را ﺑﻬﺘﺮ ﻣﺪﻳﺮﻳﺖ ﻛﻨﻴﻢ ،ﻧﻤﻲﺗﻮاﻧﻲ ﺑﻪ ﺗﻮاﺑﻊ DOSﺑﺴﻨﺪه ﻛﻨﻴﻢ .ﭼﻮن اﻳﻦ ﺗﻮاﺑﻊ در ﻫﻨﮕﺎه ﭼﺎپ ﺑﺎ ﺑﺮﺧﻮرد ﺑﻪ اوﻟﻴﻦ ﺧﻄﺎ ،ﻣﺜﻼً آﻣﺎده ﻧﺒﻮدن
ﻛﺎﻏﺬ ،ﺧﻄﺎي ﺑﺤﺮاﻧﻲ 1داده و اﻏﻠﺐ اوﻗﺎت ﭼﺎپ ﻗﻄﻊ ﻣﻲﺷﻮد و اﻳﻦ ﻣﺴﺄﻟﻪ ﻣﺸﻜﻼت زﻳﺎدي را ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻫﺎي ﻛﺎرﺑﺮدي اﻳﺠﺎد ﻣﻲﻛﻨﻨﺪ .از اﻳﻨﺮو ،در اﻳﻦ ﻓﺼﻞ ﺑﺎ روﺷﻬﺎي
دﺳﺘﺮﺳﻲ ﺑﻪ درﮔﺎه ﻣﻮازي از ﻃﺮﻳﻖ BIOSو ﺑﺮﻧﺎﻣﻪرﻳﺰي ﻣﺴﺘﻘﻴﻢ ﺳﺨﺖاﻓﺰار درﮔﺎه ﻣﻮازي آﺷﻨﺎ ﻣﻲﺷﻮﻳﺪ.
ﺗﺤﺖ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ،DOSﺑﻪ ﺣﺪاﻛﺜﺮ ﺳﻪ ﺗﺎ از ﭼﻬﺎر درﮔﺎه ﻣﻮازي ﻣﻤﻜﻦ در PCﻣﻲﺗﻮان دﺳﺘﺮﺳﻲ داﺷﺖ ﻛﻪ ﺗﺤﺖ ﻧﺎﻣﻬﺎي ﻣﻨﻄﻘﻲ LPT1:ﻳﺎ ،PRN
LPT2:و LPT3:ﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ ﻫﺴﺘﻨﺪ .ﺗﻮاﺑﻊ .DOSﺑﻪﻃﻮر ﭘﻴﺶﻓﺮض ﺑﺎ LPT1:ﻛﺎر ﻣﻲﻛﻨﻨﺪ .اﻣﺎ در وﻗﻔﻪي ،17Hﺳﻪ ﺗﺎﺑﻊ ﺑﺮاي ﻛﺎر ﺑﺎ درﮔﺎه ﻣﻮازي وﺟﻮد
دارد ﻛﻪ ﺑﺎ ﻫﺮ ﺳﻪ درﮔﺎه ﻛﺎر ﻣﻲﻛﻨﻨﺪ .ﺑﺮاي ﺗﻌﻴﻴﻦ ﺷﻤﺎرهي درﮔﺎه ﺑﺎﻳﺪ ﻣﺘﻨﺎﻃﺮ ﺑﺎ ،LPT1:ﻣﻘﺪار ،0ﻣﺘﻨﺎﻇﺮ ﺑﺎ ،LPT2:ﻣﻘﺪار 1و ﻣﺘﻨﺎﻇﺮ ﺑﺎ ،LPT3ﻣﻘﺪار 2را در
ﺛﺒﺎت DXﻗﺮار داد:
Function Task
00H Display (write or send) character
01H Initialize printer
02H )Request printer status (read or receive character
وﺿﻌﻴﺖ ﭼﺎﭘﮕﺮ :ﻫﺮﻛﺪام از ﺗﻮاﺑﻊ ﻓﻮق ،ﭘﺲ از اﺟﺮا وﺿﻌﻴﺖ ﭼﺎﭘﮕﺮ را در ﺛﺒﺎت AHﺑﺮﻣﻲﮔﺮداﻧﺪ .ﺑﻴﺘﻬﺎي ﻣﺨﺘﻠﻒ ﺑﺎﻳﺖ وﺿﻌﻴﺖ ﭼﺎﭘﮕﺮ ،ﻧﺸﺎﻧﺪﻫﻨﺪهي
وﺿﻌﻴﺖﻫﺎي زﻳﺮ اﺳﺖ:
_________________________________________________________________________________
critical error ١
print interrupt ٢
2-7 ﻓﺼﻞ :7درﮔﺎه ﻣﻮازي
ﺗﺎﺑﻊ ﭼﺎپ ﻳﺎ ارﺳﺎل دادهﻫﺎ :ﺗﺎﺑﻊ 00Hﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﻲﮔﻴﺮد .ﺷﻤﺎرهي ﺗﺎﺑﻊ) (00Hﺑﺎﻳﺪ در ﺛﺒﺎت AHو ﻛﺪ اَﺳﻜﻲ ﻛﺎراﻛﺘﺮ در
ﺛﺒﺎت ALﻗﺮار ﮔﻴﺮد .ﭘﺲ از ﻓﺮاﺧﻮاﻧﻲ ،ﺛﺒﺎت AHﺣﺎوي ﺑﺎﻳﺖ وﺿﻌﻴﺖ ﭼﺎﭘﮕﺮ ﺧﻮاﻫﺪ ﺑﻮد.
ﻣﻘﺪاردﻫﻲ اوﻟﻴﻪي درﮔﺎه :ﺗﺎﺑﻊ 00Hﺑﺎﻳﺪ ﻫﻤﻮاره ﻗﺒﻞ از ﺷﺮوع ارﺳﺎل دادهﻫﺎ ﻓﺮاﺧﻮاﻧﻲ ﺷﻮد و درﮔﺎه ﻳﺎ ﭼﺎﭘﮕﺮ را ﻣﻘﺪاردﻫﻲ اوﻟﻴﻪ ﻧﻤﺎﻳﺪ .ﭘﺲ از
ﻓﺮاﺧﻮاﻧﻲ ،ﺛﺒﺎت AHﺣﺎوي ﺑﺎﻳﺖ وﺿﻌﻴﺖ ﭼﺎﭘﮕﺮ ﺧﻮاﻫﺪ ﺑﻮد.
ﺗﺎﺑﻊ درﺧﻮاﺳﺖ ﺑﺮرﺳﻲ وﺿﻌﻴﺖ ﭼﺎﭘﮕﺮ :ﺗﺎﺑﻊ 03Hﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر اﺳﺘﻔﺎده ﻣﻲﺷﻮد و ﺑﺎﻳﺖ وﺿﻌﻴﺖ را در AHﺑﺮﻣﻲﮔﺮداﻧﺪ .اﻳﻦ ﺑﺎﻳﺖ را در
ﺑﺮﻧﺎﻣﻪﻫﺎي Cﻳﺎ ﭘﺎﺳﻜﺎل ﺑﺮاي ﻳﺎﻓﺘﻦ ﻧﻮع ﺧﻄﺎ ﻗﺎﺑﻞ اﺳﺘﻔﺎده اﺳﺖ.
ﻓﺮاﺧﻮاﻧﻲ ﺗﻮاﺑﻊ BIOSدر زﺑﺎن :Cﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي Borland C++و ،QuickCﺑﻪ ﺗﺮﺗﻴﺐ ﺗﻮاﺑﻊ biosprintو bios_printرا ﺑﺮاي ﭼﺎپ
ﻛﺎراﻛﺘﺮ ﺑﺎ اﺳﺘﻔﺎده از ﺗﻮاﺑﻊ BIOSﻓﺮاﻫﻢ ﻛﺮدهاﻧﺪ.
ﻧﻮﺷﺘﻦ روال ﺟﺪﻳﺪ ﺑﺮاي ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪي ﭼﺎپ :ﺑﺮاي آﻧﻜﻪ ﺧﻄﺎﻫﺎي ﭼﺎپ در ﻫﻤﻪي ﺑﺮﻧﺎﻣﻪﻫﺎﻳﻲ اﺟﺮاﻳﻲ ﺗﺤﺖ DOSﻛﻨﺘﺮل ﺷﻮد ،ﺑﻪ دﻟﻴﻞ آﻧﻜﻪ
ﺗﻮاﺑﻊ DOSاز ﺗﻮاﺑﻊ BIOSاﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ ،ﻣﻲﺗﻮان روال ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪي 17Hرا ﺗﻐﻴﻴﺮ داد و ﻗﺒﻞ از ﭼﺎپ ﻫﺮ ﻛﺎراﻛﺘﺮ ،وﺿﻌﻴﺖ ﭼﺎﭘﮕﺮ را ﻛﻨﺘﺮل ﻧﻤﻮد و در ﺻﻮرت
آﻣﺎده ﻧﺒﻮدن ﭼﺎﭘﮕﺮ ،ﭘﻴﻐﺎم ﻣﻨﺎﺳﺐ ﺑﺮ روي ﺻﻔﺤﻪ ﭼﺎپ ﻛﺮد.
ارﺳﺎل دادﻫﺎ از ﻃﺮﻳﻖ درﮔﺎه ﻣﻮازي :ﮔﺮﭼﻪ اﻳﻦ درﮔﺎه ﺑﺮاي ارﺳﺎل دادهﻫﺎ از PCﺑﻪ ﻟﻮازم ﺧﺮوﺟﻲ ﻃﺮاﺣﻲ ﺷﺪه اﺳﺖ ،وﻟﻲ از ﺗﺎﺑﻊ 02Hﻣﻲﺗﻮان
ﺑﺮاي درﻳﺎﻓﺖ دادﻫﻬﺎﻧﻴﺰ اﺳﺘﻔﺎده ﻧﻤﻮد .وﻟﻲ ﺳﺮﻋﺖ ﺑﺴﻴﺎر ﭘﺎﺋﺌﻦ ﺑﻮده و اﻳﻦ درﮔﺎه درﺣﻘﻴﻘﻴﺖ ﻣﺴﺮ ﻳﻜﻄﺮﻓﻪاي ﺑﺮاي ارﺳﺎل دادهﻫﺎ اﺳﺖ ،ﻧﻪ درﻳﺎﻓﺖ آن.
* ﻧﺸﺎﻧﻴﻬﺎي ﻓﻮق ﺑﻪﺗﺮﺗﻴﺐ ﭼﻚ ﻣﻲﺷﻮﻧﺪ .اﮔﺮ در 3BCH-3BFHﻳﻚ درﮔﺎه ﻳﺎﻓﺘﻪ ﺷﻮد ،ﺑﻪ ﻋﻨﻮان درﮔﺎه ﻧﺨﺴﺖ ﺑﻪ LPT1:ﻣﻨﺴﻮب ﻣﻲﺷﻮد و در
ﻓﻀﺎﻫﺎي ﺑﻌﺪي ﻫﻢ اﮔﺮ ﭘﻴﺪا ﺷﺪه ﺑﻪ LPT2:و . LPT3:
* ﻫﻤﺎﻧﻄﻮري ﻛﻪ ﮔﻔﺘﻪ ﺷﺪ ،ﻧﺸﺎﻧﻴﻬﺎي ﺑﺪﺳﺖ آﻣﺪه در ﻗﻄﻌﻪي ﻣﺘﻐﻴﺮﻫﺎي BIOSذﺧﻴﺮه ﻣﻲﺷﻮﻧﺪ:
Address Contents
0040:0008H Base address of LPT1
0040:000AH Base address of LPT2
0040:000CH Base address of LPT3
0040:000EH Base address of LPT4
ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﻫﺮ درﮔﺎه ﺑﺎﻳﺪ اﺑﺘﺪا ﻧﺸﺎﻧﻲ آن از ﻣﻄﺎﺑﻖ ﺟﺪول ﻓﻮق ﻧﺸﺎﻧﻴﻬﺎي ﻣﺸﺨﺺ ﺷﺪه ﺑﺪﺳﺖ آﻳﺪ .ﻣﺜﻼً ﺑﺮاي ﺑﺪﺳﺖ آوردن ﻧﺸﺎﻧﻲ LPT1:در زﺑﺎن
ﭘﺎﺳﻜﺎل ﺑﻪ ﺻﻮرت زﻳﺮ ﻋﻤﻞ ﻣﻲﺷﻮد:
;]LPT1Addr := Mem[$0040:$0008
;Port[Lpt1Addr] := XByte ارﺳﺎل ﻳﻚ ﺑﺎﻳﺖ //
ﺗﻐﻴﻴﺮ ﻧﺸﺎﻧﻲ درﮔﺎﻫﻬﺎ :ﻣﻲﺗﻮان ﺑﺎ ﺗﻌﻮﻳﺾ ﻣﻘﺎدﻳﺮ ردﻳﻘﻬﺎي ﺟﺪول ﻓﻮق ،ﻧﺸﺎﻧﻲ درﮔﺎﻫﻬﺎ را ﻋﻮض ﻛﺮد .ﺑﺮاي ﻣﺜﺎل ﻗﻄﻌﻪ ﻛﺪ زﻳﺮ در ﭘﺎﺳﻜﺎل ،ﻧﺸﺎﻧﻲ
LPT1:و LPT2:را ﺗﻌﻮﻳﺾ ﻣﻲﻛﻨﺪ:
;]DummyWord := Mem[$0040:$0008
;]Mem[$0040:$0008] := Mem[$0040:$000A
;Mem[$0040:$000A] := DummyWord
ﺛﺒﺎﺗﻬﺎي درﮔﺎه ﻣﻮازي :ﻫﺮ درﮔﺎه ﺳﻪ ﺛﺒﺎت دارد:
ﺛﺒﺎت :(Data Lines) 1ﺣﺎوي ﺑﻴﺘﻬﺎي 0ﺗﺎ 7دادهي ارﺳﺎﻟﻲ اﺳﺖ و داده ﺑﺮاي ارﺳﺎل در آن ﻗﺮار ﻣﻲﮔﻴﺮد و در ﻧﺸﺎﻧﻲ 378Hﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ •
اﺳﺖ.
3-7 ﻓﺼﻞ :7درﮔﺎه ﻣﻮازي
ﺛﺒﺎت :(Printer Status) 2ﺣﺎوي ﺑﺎﻳﺖ وﺿﻌﻴﺖ ﭼﺎﭘﮕﺮ اﺳﺖ و ﻧﺸﺎﻧﻲ آن 379H ،اﺳﺖ. •
ﺛﺒﺎت :(Printer Control) 3ﺳﻴﮕﻨﺎﻟﻬﺎي ﻛﻨﺘﺮﻟﻲ ﭼﺎﭘﮕﺮ )ﻧﻈﻴﺮ INT ،ACKو (...را ﻧﺸﺎن ﻣﻲدﻫﺪ و ﻧﺸﺎﻧﻲ آن 37AHاﺳﺖ. •
5-8دﺳﺘﺮﺳﻲ ﺑﻪ درﮔﺎه ﺳﺮﻳﺎل از ﻃﺮﻳﻖ BIOS
ﻋﻼوه ﺑﺮ روش ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﻣﺴﺘﻘﻴﻢ ،ﺗﻮاﺑﻊ وﻗﻔﻪي BIOS 14Hﺑﺮاي ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ درﮔﺎه ﺳﺮﻳﺎل ﻗﺎﺑﻞ اﺳﺘﻔﺎده اﺳﺖ .ﺗﻮاﺑﻊ اﻳﻦ وﻗﻔﻪﻋﺒﺎرﺗﻨﺪ از:
1-9ﻣﻘﺪﻣﻪ
ﺗﻮاﺑﻊ ﻣﻌﺮﻓﻲ ﺷﺪه ﺑﻮﺳﻴﻠﻪي ﻣﻴﻜﺮوﺳﺎﻓﺖ ﺑﺮاي ﻣﺎوس ،ﺑﻪ ﻋﻨﻮان اﺳﺘﺎﻧﺪاردي ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﻣﺎوس ﭘﺬﻳﺮﻓﺘﻪ ﺷﺪه اﺳﺖ .اﻳﻦ ﺗﻮاﺑﻊ ﻛﻪ ﺗﺸﻜﻴﻞ دﻫﻨﺪهي
واﺳﻂ ﻧﺮماﻓﺰاري ﻣﺎوس ﻳﺎ دراﻳﻮر ﻣﺎوس 1ﻫﺴﺘﻨﺪ ،در ﻗﺎﻟﺐ وﻗﻔﻪي 33Hدر اﺧﺘﻴﺎر ﻗﺮار ﻣﻲﮔﻴﺮﻧﺪ ﻛﻪ ﺑﻮﺳﻴﻠﻪي ﻧﺼﺐ ﺑﺮﻧﺎﻣﻪي MOUSE.DRVدر ﻓﺎﻳﻞ
CONFIG.SYSﻳﺎ اﺟﺮاي ﺑﺮﻧﺎﻣﻪي ﻣﻘﻴﻢ در ﺣﺎﻓﻈﻪي MOUSE.COM 2ﺗﺤﺖ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ،DOSﻓﺮاﻫﻢ ﻣﻲﺷﻮﻧﺪ.
ﻳﻚ ﻛﺎراﻛﺘﺮ ﺧﺎص ﺑﺎ رﻧﮓ ﺧﺎص ،ﻣﺜﻼً ﻫﻤﻴﺸﻪ ﺑﺎ ﻛﺎراﻛﺘﺮ ↑ ،رﻧﮓ ﺳﻔﻴﺪ در زﻣﻴﻨﻪي آﺑﻲ، •
ﺗﻐﻴﻴﺮ رﻧﮓ ﻛﺎراﻛﺘﺮ ﻣﻮﺟﻮد در ﻧﻘﻄﻪي ﺟﺎري ﺑﻪ ﺻﻮرت ﺳﺨﺖاﻓﺰاري و ﺑﺎ اﺳﺘﻔﺎده از ﺣﺎﻟﺖ ﻣﻌﻜﻮس 4ﻛﺎرت وﻳﺪﺋﻮﻳﻲ ،ﺑﻪ اﻳﻦ ﺻﻮرت ﻛﻪ ﺑﻪ ﻛﺎرت •
وﻳﺪﺋﻮﻳﻲ ﻓﺮﻣﺎن داد ﺗﺎ رﻧﮓ ﺑﻴﺘﻬﺎي ﺻﻔﺮ رﻧﮓ را 1و ﺑﻴﺘﻬﺎي 1را ﺻﻔﺮ ﻛﻨﺪ .ﻳﻌﻨﻲ ،ﺑﺎﻳﺖ رﻧﮓ را ﺑﺎ XOR ،FFHﻛﻨﺪ.
ﺗﻐﻴﻴﺮ رﻧﮓ ﻛﺎراﻛﺘﺮ ﻣﻮﺟﻮد در ﻧﻘﻄﻪي ﺟﺎري ﺑﻪ ﺻﻮرت ﻧﺮماﻓﺰاري .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ﺑﺎﻳﺪ ﻣﻘﺪار ﺑﺎﻳﺖ رﻧﮓ در ﻧﻘﻄﻪ ي ﺟﺎري ﺧﻮاﻧﺪه ﺷﺪه و ﭘﺲ از •
XORﻛﺮدن در ﻫﻤﺎن ﻧﻘﻄﻪ ﻧﻮﺷﺘﻪ ﺷﻮد .اﻳﻦ ﻛﺎر ﺑﻮﺳﻴﻠﻪي دراﻳﻮر ﻣﺎوس اﻧﺠﺎم ﻣﻲﺷﻮد.
ﻗﻄﻌﻪ ﻛﺪﻫﺎي زﻳﺮ ﺑﺮاي ﻣﻮارد 2و 4ﻗﺎﺑﻞ اﺳﺘﻔﺎده ﻫﺴﺘﻨﺪ:
Function Task
00H: Reset mouse drivers
01H: Display mouse cursor
02H: Remove(hide) mouse cursor
03H: Move mouse cursor
07H & 08H: )ﻣﺤﺪودهي ﺣﺮﻛﺖ ﻣﺎوس در ﺻﻔﺤﻪ( Set range of movement
اﻳﻨﻜﻪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺣﺮﻛﺖ دادن ﻣﺎوس و زدن دﻛﻤﻪﻫﺎ ،ﭼﻪ ﻛﺎري اﻧﺠﺎم ﺷﻮد را ﻣﻲﺗﻮان در ﻳﻚ 2ISRﻗﺮار داد و ﺑﻪ دراﻳﻮر ارﺳﺎل ﻧﻤﻮد.
ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﻣﺴﺘﻘﻴﻢ ﻣﺎوس :ﺑﺎﻳﺪ از ﻃﺮﻳﻖ درﮔﺎه ﺳﺮﻳﺎل اﻳﻦ ﻛﺎر را ﻛﺮد .ﭼﻮن ﻣﺎوس ﺑﻪ ﻳﻜﻲ از درﮔﺎﻫﻬﺎي ﺳﺮﻳﺎل ،ﻧﻈﻴﺮ COM1ﻳﺎ COM2
ﻣﺘﺼﻞ ﻣﻲﺷﻮد .ﻛﺴﺎﻧﻲ ﻛﻪ دراﻳﻮر ﻣﺎوس را ﻣﻲﻧﻮﻳﺴﻨﺪ ،ﻧﻴﺎزﻣﻨﺪ اﻳﻦ ﻛﺎر ﻫﺴﺘﻨﺪ.
_________________________________________________________________________________
،Mickey ١ﭘﺲ از آﺎرﺗﻮن Mickey Mouseواﻟﺖ دیﺴﻨﻲ!
Interrupt Service Routine ٢
ﻓﺼﻞ :11دﺳﺘﺮﺳﻲ و ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﺳﺎﻋﺖ
)(Accessing and Programming the Real-time Clock
Function Task
00H )Get clock (32-bit time_counter
01H Set clock
02H )Get current time (HH:MM:SS.PP
03H )Set current time (HH:MM:SS.PP
04H )Get current date (CCYY/MM/DD
05H )Set current date (CCYY/MM/DD
06H *Set alarm time
07H Reset alarm time
* ،alarm timeزﻣﺎﻧﻲ اﺳﺖ در روز ﺟﺎري ﻛﻪ در آن زﻣﺎن وﻗﻔﻪي 4AHﻓﻌﺎل ﻣﻲﺷﻮد و ﻣﻲﺗﻮان ﺑﺎ ﺗﻌﻮﻳﺾ روال ﺳﺮوﻳﺲ اﻳﻦ وﻗﻔﻪ ،ﭘﻴﻐﺎم ﺧﺎﺻﻲ را
ﺑﺮ روي ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ داد ،و ﻳﺎ ﺑﺎ زدن زﻧﮓ ،ﻣﻄﻠﺒﻲ را ﺑﻪ ﻛﺎرﺑﺮ ﻳﺎدآوري ﻧﻤﻮد.
3-11ﺳﺎﻋﺖ ﺑﻲدرﻧﮓ
ﺳﺎﻋﺖ ﺑﻲدرﻧﮓ) (RTCدر ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎي ATﺑﻪ ﺑﻌﺪ وﺟﻮد دارد و ﺑﺎ ﺑﺎﺗﺮي ﻛﺎر ﻣﻲﻛﻨﺪ و ﺑﺎ ﺧﺎﻣﻮش ﺷﺪن ﻛﺎﻣﭙﻴﻮﺗﺮ reset ،ﻧﻤﻲﺷﻮد .اﻳﻦ ﺳﺎﻋﺖ ﻳﻚ
ﺣﺎﻓﻈﻪ از ﻧﻮع RAMدارد ﻛﻪ 64ﺑﺎﻳﺖ ﻇﺮﻓﻴﺖ دارد و از ﻃﺮﻳﻖ درﮔﺎه 70Hﺗﺎ 7FHﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ اﺳﺖ .اﻳﻦ ﺣﺎﻓﻈﻪ ،در ﺣﻘﻴﻘﺖ ﺛﺒﺎﺗﻬﺎي RTCاﺳﺖ ،ﻛﻪ ﻋﺒﺎرﺗﻨﺪ
از:
Register Meaning
00H Current second
01H Alarm second
02H Current minute
_________________________________________________________________________________
quartz crystal ١
interrupt controller ٢
2-11 دﺳﺘﺮﺳﻲ و ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﺳﺎﻋﺖ:11 ﻓﺼﻞ
. ﻣﻘﺪار دﻫﻲ اوﻟﻴﻪ ﻣﻲﺷﻮد،RTC ﺑﺎ اﺳﺘﻔﺎده از ﻣﻘﺎدﻳﺮ زﻣﺎن، ﻣﻘﺪار ﺷﻤﺎرﺷﮕﺮ زﻣﺎن،در اﺑﺘﺪاي روﺷﻦ ﺷﺪن ﺳﻴﺴﺘﻢ
: ﻫﻤﺎﻧﻨﺪ دﺳﺘﺮﺳﻲ ﺑﻪ ﺣﺎﻓﻈﻪ اﺳﺖ،روش دﺳﺘﺮﺳﻲ ﺑﻪ اﻳﻦ ﺛﺒﺎﺗﻬﺎ
1-12ﻣﻘﺪﻣﻪ
در ﺳﺎل 1980ﻛﻪ ﻧﺨﺴﺘﻴﻦ PCﻋﺮﺿﻪ ﺷﺪ 640KB ،ﺣﺎﻓﻈﻪ ،ﺧﻴﻠﻲ زﻳﺎد ﺑﻮد و PCﻫﺎي اوﻟﻴﻪ 64KBﻳﺎ 128KBﻳﺎ ﺣﺪاﻛﺜﺮ 256KBﺣﺎﻓﻈﻪ
داﺷﺘﻨﺪ DOS .ﻫﻢ ﺑﺮاي ﭼﻨﻴﻦ ﻧﻴﺎزﻫﺎﻳﻲ ﻃﺮاﺣﻲ ﺷﺪه ﺑﻮد و ﺣﺪاﻛﺜﺮ 640KBﺣﺎﻓﻈﻪ را ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲﻛﻨﺪ ﻛﻪ در ﺣﺎل ﺣﺎﺿﺮ ﺣﺪاﻗﻞ ﺣﺎﻓﻈﻪي ﻣﻮردﻧﻴﺎز ﺑﻮﺳﻴﻠﻪي اﻛﺜﺮ
ﻛﺎرﺑﺮان اﺳﺖ .در ﺷﻜﻞ ) (1-12ﭘﻴﻜﺮهﺑﻨﺪي ﺣﺎﻓﻈﻪي PCﻧﺸﺎن داده ﺷﺪه اﺳﺖ.
Segment
Address
Main Memory EMS Memory
FFFF
BIOS
E000
DC00
D800 EMS Window
D400 D000
ROM Extentions
C000
Video RAM
B000
EGA/VGA Video RAM
16K Pages
A000 .
.
Working
.
RAM
or
Conventional
Memory
0000
ﻣﻄﺎﺑﻖ اﻳﻦ ﺷﻜﻞ ﻓﻘﻂ 640KBاز ﺣﺎﻓﻈﻪ ﺑﻪﻋﻨﻮان ﺣﺎﻓﻄﻪي اﺻﻠﻲ ﻣﻲﺗﻮاﻧﺪ ﻣﻮرد اﺳﺘﻔﺎدهي ﺑﺮﻧﺎﻣﻪﻫﺎ ﻗﺮار ﮔﻴﺮد .اﻣﺎ ﺑﺮﺧﻼف PCﻛﻪ داراي ﭘﺮدازﻧﺪهي
8086ﺑﻮد ،ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎي ﺷﺨﺼﻲ ﺑﻌﺪي ،داراي ﭘﺮدازﻧﺪهﻫﺎي 80286ﻳﺎ ﺑﺎﻻﺗﺮ ،اﻣﻜﺎن دﺳﺘﺮﺳﻲ ﺑﻪ ﺑﻴﺶ از 1MBﺣﺎﻓﻈﻪ را ﻓﺮاﻫﻢ ﻣﻲﻛﺮدﻧﺪ .اﻣﺎ ﺗﺤﺖ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ
،DOSﻣﺎﺑﻘﻲ ﺣﺎﻓﻈﻪ ﻗﺎﺑﻞ ﻧﺸﺎﻧﻲدﻫﻲ ﻧﻴﺴﺖ .دﻟﻴﻞ اﻳﻦ اﻣﺮ اﻳﻦ اﺳﺖ ﻛﻪ DOSدر ﺣﺎﻟﺖ واﻗﻌﻲ 1اﻳﻦ ﭘﺮدازﻧﺪهﻫﺎ ﻛﺎر ﻣﻲﻛﻨﺪ و ﭘﺮدازﻧﺪه در اﻳﻦ ﺣﺎﻟﺖ ،ﻛﻪ ﺳﺎزﮔﺎر ﺑﺎ
_________________________________________________________________________________
real mode ١
2-12 ﻓﺼﻞ :12ﮔﺴﺘﺮش ﺣﺎﻓﻈﻪ
روش ﻧﺸﺎﻧﻲدﻫﻲ 8086اﺳﺖ ﻧﻤﻲﺗﻮاﻧﺪ ﺑﻴﺶ از 1MBﻧﺸﺎﻧﻲدﻫﻲ ﻛﻨﺪ .ﻗﺎﺑﻠﻴﺖ ﻧﺸﺎﻧﻲدﻫﻲ ﺑﻴﺶ از 1MBدر ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه 1ﻓﺮاﻫﻢ ﻣﻲﺷﻮد و ﺳﻴﺴﺘﻤﻬﺎي
ﻋﺎﻣﻠﻲ ﻧﻈﻴﺮ Windowsﻳﺎ Unixﻛﻪ ﺗﻮاﻧﺎﻳﻲ دﺳﺘﺮﺳﻲ ﺑﻪ ﺑﻴﺶ از 1MBﺣﺎﻓﻈﻪ را دارﻧﺪ در اﻳﻦ ﺣﺎﻟﺖ ﭘﺮدازﻧﺪه ﻋﻤﻞ ﻣﻲﻛﻨﻨﺪ.
ﺗﺤﺖ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ،DOSراه ﺣﻠﻬﺎي ﻣﺨﺘﻠﻔﻲ ﺑﺮاي ﺣﻞ ﻣﺸﻜﻞ ﻛﻤﺒﻮد ﺣﺎﻓﻈﻪ اراﺋﻪ ﮔﺮدﻳﺪ ﻛﻪ دو راه ﺣﻞ ﻣﻬﻢ ﻋﺒﺎرﺗﻨﺪ از:
(1ﺣﺎﻓﻈﻪي ﮔﺴﺘﺮش ﻳﺎﻓﺘﻪ2
(2ﺣﺎﻓﻈﻪي ﺑﺴﻂﻳﺎﻓﺘﻪ3
اﻳﻦ روﺷﻬﺎ ﻣﻴﺰان ﺣﺎﻓﻈﻪي ﻗﺎﺑﻞ اﺳﺘﻔﺎده ﺑﻮﺳﻴﻠﻪي ﺑﺮﻧﺎﻣﻪﻫﺎ را ﺗﺎ ﭼﻨﺪ ﻣﮕﺎﺑﺎﻳﺖ اﻓﺰاﻳﺶ ﻣﻲدﻫﻨﺪ و دﺳﺘﺮﺳﻲ ﺑﻪاﻳﻦ ﻧﻮع ﺣﺎﻓﻈﻪﻫﺎ ،ﻣﺴﺘﻠﺰم ﭘﻴﺶﺑﻴﻨﻲ ﺗﺮﺗﻴﺒﺎت
ﻻزم در ﺑﺮﻧﺎﻣﻪﻫﺎ اﺳﺖ .ﺗﻔﺎوت اﻳﻦ دو روش ﺑﻪﻃﻮر ﺧﻼﺻﻪ ﻋﺒﺎرت اﺳﺖ از:
ﺣﺎﻓﻈﻪي ﮔﺴﺘﺮش ﻳﺎﻓﺘﻪ :ﺣﺎﻓﻈﻪي اﺿﺎﻓﻲ در ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎي PCو XTاﺳﺖ و ﺑﻪ دﻟﻴﻞ ﻣﺤﺪودﻳﺖ 8086و 8088ﺑﺮاي ﻛﺎرﻛﺮدن ﺑﺎ ﺑﻴﺶ از •
640KBﺣﺎﻓﻈﻪ ،ﺑﺎ اﻳﻦ روش ﻣﻴﺰان ﺣﺎﻓﻈﻪ ﺑﺎ ﺗﻜﻨﻴﻜﻲ ﻛﻪ ﻣﻔﺼﻼً ﻣﻮرد ﺑﺤﺚ واﻗﻊ ﻣﻲﺷﻮد ،ﺑﻪ ﺑﻴﺶ از 1MBﮔﺴﺘﺮش داده ﻣﻲﺷﻮد.
ﺣﺎﻓﻈﻪي ﺑﺴﻂﻳﺎﻓﺘﻪ :ﺣﺎﻓﻈﻪي اﺿﺎﻓﻲ در ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎي داراي ﭘﺮدازﻧﺪهﻫﺎي 80286ﺑﻪ ﺑﺎﻻ اﺳﺖ و ﻣﻴﺰان ﺣﺎﻓﻈﻪ ﺑﺎ ﺗﻜﻨﻴﻜﻲ ﻛﻪ ﻣﺴﺘﻠﺰم ﻋﻤﻞ •
ﻧﻤﻮدن در ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪهي ﭘﺮدازﻧﺪه اﺳﺖ ،ﺑﻪ ﺑﻴﺶ از 1MBﺑﺴﻂ ﻣﻲﻳﺎﺑﺪ.
اﺳﺘﺎﻧﺪارد LIMاز ﻳﻚ ﺗﻜﻨﻴﻚ ﻣﻄﻤﺌﻦ ﺑﻪ ﻧﺎم ﺗﻌﻮﻳﺾ ﺑﺎﻧﻚ 8ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﺣﺎﻓﻈﻪي اﺿﺎﻓﻲ اﺳﺘﻔﺎده ﻣﻲﻛﻨﺪ .در اﻳﻦ روش از ﻳﻚ ﭘﻨﺠﺮهي ﺣﺎﻓﻈﻪ
در ﻣﺤﺪودهي D00Hﺗﺎ ،E000Hﺑﻪﻧﺎم EMS Windowﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﺑﺎﻧﻜﻬﺎي 16MBﺣﺎﻓﻈﻪي ﮔﺴﺘﺮشﻳﺎﻓﺘﻪ اﺳﺘﻔﺎده ﻣﻲﺷﻮد .ﻧﺮماﻓﺰار ﺑﻪﻃﻮر
ﺗﻨﮕﺎﺗﻨﮓ ﺑﺎ ﺳﺨﺖاﻓﺰار ﻛﺎر ﻣﻲﻛﻨﺪ و ﭘﻨﺠﺮه را در ﻛﻞ ﻣﺤﺪودهي ﺣﺎﻓﻈﻪ ﺣﺮﻛﺖ ﻣﻲدﻫﺪ ﺗﺎ در ﻫﺮ زﻣﺎن ﺑﻪ 4ﺻﻔﺤﻪ ﻳﺎ ﺑﺎﻧﻚ آن دﺳﺘﺮﺳﻲ داﺷﺘﻪ ﺑﺎﺷﺪ ،ﻛﻪ ﻇﺮﻓﻴﺖ ﻫﺮ ﻛﺪام
16MBاﺳﺖ و در ﻣﺠﻤﻮع 4ﺻﻔﺤﻪ در ﻧﺸﺎﻧﻴﻬﺎي D800H ،D400H ،D000Hو DC00Hﻛﻪ در ﺷﻜﻞ ) (1-12ﻣﺸﺨﺺ ﺷﺪهاﻧﺪ ،ﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ در
ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﻮده و ﻣﺎﺑﻘﻲ ﺣﺎﻓﻈﻪي ﮔﺴﺘﺮش ﻳﺎﻓﺘﻪ ﻏﻴﺮﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ در آن زﻣﺎن اﺳﺖ.
ﺑﺎز ﻛﺮدن ﻳﻚ ﭘﻨﺠﺮه ﺣﺎﻓﻈﻪ :ﺗﺤﺖ DOSﺣﺪاﻗﻞ 64KBدر ﻓﻀﺎي ﻧﺸﺎﻧﻲدﻫﻲ ،1MBﻋﻠﻲرﻏﻢ وﺟﻮد ﺣﺎﻓﻈﻪي ﻣﺘﻌﺎرفVideo ،BIOS ،
،RAMﻳﺎ ﺳﺎﻳﺮ ﻣﻮارد ،ﺑﺪون اﺳﺘﻔﺎده ﻣﻲﻣﺎﻧﺪ .ﻃﺮاﺣﺎن EMSاز اﻳﻦ ﻣﺤﺪوده ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﺣﺎﻓﻈﻪي ﮔﺴﺘﺮشﻳﺎﻓﺘﻪ اﺳﺘﻔﺎده ﻛﺮدهاﻧﺪ .ﻋﻤﻮﻣﺎً اﻳﻦ ﭘﻨﺠﺮه در ﻧﺸﺎﻧﻲ
ﻗﻄﻌﻪي D000Hﻗﺮار ﻣﻲﮔﻴﺮد ،اﻣﺎ ﺳﺨﺖاﻓﺰار EMSاﺟﺎزه ﻣﻲدﻫﺪ ﻛﻪ در ﺟﺎي دﻳﮕﺮي ﻫﻢ ﺑﺎﺷﺪ .ﭼﻮن اﻳﻦ ﭘﻨﺠﺮه در ﻓﻀﺎي ﻧﺸﺎﻧﻲدﻫﻲ 1MBﻗﺮار دارد ﭘﺲ
ﺑﻮﺳﻴﻠﻪي دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﻋﺎدي زﺑﺎن اﺳﻤﺒﻠﻲ ،ﻫﻤﺎﻧﻨﺪ ﺣﺎﻓﻈﻪي وﻳﺪﺋﻮﻳﻲ ﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ)ﺧﻮاﻧﺪﻧﻲ /ﻧﻮﺷﺘﻨﻲ( اﺳﺖ.
ﺗﻘﺴﻴﻢﺑﻨﺪي ﻗﺎب ﺻﻔﺤﻪ :ﻗﺎب ﺻﻔﺤﻪ ﺑﻪ 4ﺻﻔﺤﻪي 16KBﺗﻘﺴﻴﻢ ﺷﺪه اﺳﺖ و ﺑﻪ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲ اﺟﺎزه ﻣﻲدﻫﺪ ﻛﻪ در ﻫﺮ زﻣﺎن ﺑﻪ ﭼﻬﺎر ﺻﻔﺤﻪي
ﻣﺘﻔﺎوت در ﺣﺎﻓﻈﻪي ﮔﺴﺘﺮشﻳﺎﻓﺘﻪ دﺳﺘﺮﺳﻲ داﺷﺘﻪ ﺑﺎﺷﺪ .ﺛﺒﺎﺗﻬﺎي EMSﺑﻪ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲ اﺟﺎزه ﻣﻲدﻫﻨﺪ ﻛﻪ ﺻﻔﺤﺎت ﻣﻮرد ﻧﻈﺮش را اﻧﺘﺨﺎب ﻧﻤﺎﻳﺪ ﻛﻪ ﺑﺮاﺳﺎس آن
ﺧﻄﻮط ﻧﺸﺎﻧﻲ EMSﺗﻨﻈﻴﻢ ﻣﻲﺷﻮﻧﺪ ﺗﺎ ﺻﻔﺤﺎت ﻣﻮردﻧﻈﺮ ﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ ﺑﺎﺷﻨﺪ و ﺑﺮ اﻳﻦ اﺳﺎس آن ﺻﻔﺤﺎت در ﻓﻀﺎي ﻧﺸﺎﻧﻲدﻫﻲ 8088ﻧﮕﺎﺷﺖ 9ﻣﻲﺷﻮﻧﺪ ،و اﻳﻦ
ﻫﻤﺎن ﺗﻜﻨﻴﻨﻚ ﺗﻌﻮﻳﺾ ﺑﺎﻧﻚ اﺳﺖ.
_________________________________________________________________________________
protected mode ١
expanded memory ٢
extended memory ٣
conventional memory ٤
expansion card ٥
page frame ٦
Expanded Memory System ٧
bank switching ٨
map ٩
3-12 ﻓﺼﻞ :12ﮔﺴﺘﺮش ﺣﺎﻓﻈﻪ
،EMSﻋﻼوه ﺑﺮ ﺳﺨﺖاﻓﺰار داراي ﻳﻚ واﺳﻂ ﻧﺮماﻓﺰاري ﻧﻴﺰ ﻫﺴﺖ ،ﻛﻪ وﻇﺎﻳﻒ ﺑﺮﻧﺎﻣﻪرﻳﺰي ﺛﺒﺎﺗﻬﺎي EMSو ﺳﺎﻳﺮ وﻇﺎﻳﻒ ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪ را اﻧﺠﺎم
ﻣﻲدﻫﺪ ،ﻛﻪ ﺑﻪ آن واﺳﻂ ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪي ﮔﺴﺘﺮشﻳﺎﻓﺘﻪ (EMM)1ﮔﻮﻳﻨﺪ و واﺳﻂ اﺳﺘﺎﻧﺪاردي ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﻛﺎرﺗﻬﺎي EMSﺳﺎﺧﺖ ﺷﺮﻛﺘﻬﺎي ﻣﺨﺘﻠﻒ ﻓﺮاﻫﻢ
ﻣﻲﻛﻨﺪ.
ﺑﺮﺧﻲ از ﻧﺮماﻓﺰارﻫﺎي ،EMMﻧﻈﻴﺮ QEMM386ﺑﺮ روي ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎي 386ﺑﻪ ﺑﻌﺪ ،دﺳﺘﺮﺳﻲ ﺑﻪ ﺣﺎﻓﻈﻪي ﺑﺴﻂﻳﺎﻓﺘﻪ را ﺑﺎ ﻫﻤﻴﻦ روش و ﻫﻤﺎﻧﻨﺪ
ﺣﺎﻓﻈﻪي ﮔﺴﺘﺮشﻳﺎﻓﺘﻪ و ﺑﺎ ﻣﻜﺎﻧﻴﺴﻢ EMSﻓﺮاﻫﻢ ﻧﻤﻮدهاﻧﺪ.
ﺑﺮﻧﺎﻣﻪﻫﺎي ﮔﺮداﻧﻨﺪهي :2EMMاﻳﻦ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﻪﺻﻮرت ﻣﻘﻴﻢ درﺣﺎﻓﻈﻪ (TSR) 3ﻫﺴﺘﻨﺪ و ﻳﻜﻲ از وﻗﻔﻪﻫﺎ ،ﻣﺜﻞ 67Hرا ﺗﻌﻮﻳﺾ ﻧﻤﻮده و از اﻳﻦ
ﻃﺮﻳﻖ اﻣﻜﺎن دﺳﺘﺮﺳﻲ ﺑﻪ ﺣﺎﻓﻈﻪي ﮔﺴﺘﺮشﻳﺎﻓﺘﻪ را ﻓﺮاﻫﻢ ﻣﻲﻛﻨﻨﺪ .ﺗﻮاﺑﻊ ﻣﺨﺘﻠﻔﻲ ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ﭘﻴﺶﺑﻴﻨﻲ ﺷﺪه اﺳﺖ ،ﻛﻪ ﺷﻤﺎرهي ﺗﺎﺑﻊ ﻣﺜﻞ ﺗﻮاﺑﻊ DOSدر ﺛﺒﺎت
AHﻗﺮار داده ﻣﻲﺷﻮد .ﭘﺲ از ﻓﺮاﺧﻮاﻧﻲ AH ،ﺣﺎوي وﺿﻌﻴﺖ ﺧﻄﺎ ﺧﻮاﻫﺪ ﺑﻮد و اﮔﺮ ﻣﻘﺪار آن ﻣﺴﺎوي 00Hﺑﺎﺷﺪ ،ﺑﻪ ﻣﻌﻨﻲ ﻋﺪم وﻗﻮع ﺧﻄﺎ اﺳﺖ و ﻣﻘﺎدﻳﺮ ﻣﺴﺎوي ﻳﺎ
ﺑﺰرﮔﺘﺮ 80Hﻧﺸﺎﻧﺪﻫﻨﺪهي ﺧﻄﺎ ﺧﻮاﻫﻨﺪ ﺑﻮد .ﺑﺮﺧﻲ از ﺗﻮاﺑﻊ ﮔﺮداﻧﻨﺪهي EMSدر اﻳﻨﺠﺎ ﺗﺸﺮﻳﺢ ﻣﻲﺷﻮﻧﺪ:
اﻳﻦ ﺗﺎﺑﻊ ﻳﻚ ﺻﻔﺤﻪي EMSرا ﺑﻪﺻﻮرت ﻣﻨﻄﻘﻲ ﺗﺨﺼﻴﺺ داده و ﻳﻚ ﺷﻤﺎره ﺑﻪ ﻋﻨﻮان دﺳﺘﻪ 4ﺑﺮاي ارﺟﺎﻋﺎت ﺑﻌﺪي ﺑﻪ آن ﺑﺮﻣﻲﮔﺮداﻧﺪ.
3-12ﺣﺎﻓﻈﻪي ﺑﺴﻂﻳﺎﻓﺘﻪ
ﻗﺒﻼً اﺷﺎره ﺷﺪ ﻛﻪ ﭘﺮدازﻧﺪهﻫﺎي ﺑﻌﺪ از ،8088ﻧﻈﻴﺮ ،386 ،286و ﻏﻴﺮه ،ﺗﻮاﻧﺎﻳﻲ ﻛﺎر در دو ﺣﺎﻟﺖ واﻗﻌﻲ و ﻣﺤﺎﻓﻈﺖﺷﺪه را دارﻧﺪ .در ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖ ﺷﺪه ،اﻳﻦ
ﭘﺮدازﻧﺪهﻫﺎ ﺗﻮاﻧﺎﻳﻲ دﺳﺘﺮﺳﻲ ﺑﻪ ﺑﻴﺶ از 1MBﺣﺎﻓﻈﻪ را دارﻧﺪ .در ﺣﺎﻟﺖ واﻗﻌﻲ ،ﭘﺮدازﻧﺪه ﺗﻮاﻧﺎﻳﻲ دﺳﺘﺮﺳﻲ ﺑﻪ ﺑﻴﺶ از 1MBﺣﺎﻓﻈﻪ را ﻧﺪارد و ﺑﺎ ،EMSﺣﺎﻓﻈﻪي
اﺿﺎﻓﻲ در ﻫﻤﺎن ﻓﻀﺎي ﻧﺸﺎﻧﻲ 1MBاﺳﺘﻔﺎده ﻣﻲﺷﻮد DOS .ﭼﻮن در ﺣﺎﻟﺖ واﻗﻌﻲ ﻛﺎر ﻣﻲﻛﻨﺪ ،ﺗﻨﻬﺎ ﻣﻲﺗﻮاﻧﺪ ﺑﻪ 1MBﺣﺎﻓﻈﻪ دﺳﺘﺮﺳﻲ داﺷﺘﻪ ﺑﺎﺷﺪ .اﻣﺎ اﮔﺮ ﺑﺨﻮاﻫﻴﻢ
از ﻛﻞ ﺣﺎﻓﻈﻪي ﻣﻮﺟﻮد ﺑﺮ روي ﺳﻴﺴﺘﻢ اﺳﺘﻔﺎده ﻛﻨﻴﻢ ،ﺑﺎﻳﺪ ﭘﺮدازﻧﺪه را ﺑﻪ ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه ﺑﺒﺮﻳﻢ .اﻳﻦ ﻛﺎر ﺑﺎ 1ﻛﺮدن ﻳﻚ ﺑﻴﺖ در ﺛﺒﺎت ﭘﺮﭼﻢ اﻳﻦ ﭘﺮدازﻧﺪهﻫﺎ اﻣﻜﺎﻧﭙﺬﻳﺮ
اﺳﺖ.
اﮔﺮ در ﻳﻚ ﺑﺮﻧﺎﻣﻪي اﺳﻤﺒﻠﻲ ﺗﺤﺖ DOSاﻳﻦ ﻛﺎر را ﺑﻜﻨﺒﻢ ،ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه ﻣﻲرود ،اﻣﺎ ﺑﺮﻧﺎﻣﻪ ﺑﻼﻓﺎﺻﻠﻪ ﻗﻔﻞ ﻣﻲﻛﻨﺪ .زﻳﺮا ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪ در
ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه ﺑﺎ ﺣﺎﻟﺖ واﻗﻌﻲ ﻛﺎﻣﻼً ﻣﺘﻔﺎوت اﺳﺖ .در ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه ﭘﺮدازﻧﺪه از ﻃﺮﻳﻖ ﻣﻔﻬﻮم ﺗﻮﺻﻴﻒﮔﺮﻫﺎي ﻗﻄﻌﻪ 5ﻋﻤﻞ ﻣﻲﻛﻨﺪ ،ﻧﻪ ﻣﻔﻬﻮم ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪ،6
ﻛﻪ در آن ﻫﺮ ﻧﺸﺎﻧﻲ از دو ﺑﺨﺶ ﻣﺒﺪاً و ﻗﻄﻌﻪ ﺗﺸﻜﻴﻞ ﻳﺎﻓﺘﻪ اﺳﺖ .در ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه،ﺗﻮﺻﻴﻒﮔﺮ ﻗﻄﻌﻪ ﻳﻚ ﺟﺪول اﺳﺖ ﻛﻪ ﻟﻴﺴﺖ ﺗﻮﺻﻴﻒﮔﺮﻫﺎي ﻣﺤﻠﻲ و ﺳﺮاﺳﺮي
در آن ﻗﺮار دارﻧﺪ DOS .ﺑﻪ اﻳﻦ ﺟﺪول دﺳﺘﺮﺳﻲ ﻧﺪارد ،ﭼﻮن در ﺣﺎﻟﺖ واﻗﻌﻲ ﻛﺎر ﻣﻲﻛﻨﺪ.
_________________________________________________________________________________
Extended Memory Management ١
EMM drivers ٢
Terminate Stay Resident ٣
handle ٤
segment descriptor ٥
segment address ٦
4-12 ﻓﺼﻞ :12ﮔﺴﺘﺮش ﺣﺎﻓﻈﻪ
ﻗﺒﻞ از اﻧﺘﻘﺎل ﺑﻪ ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه ،ﺑﺎﻳﺪ ﺟﺪول ﺗﻮﺻﻴﻒﮔﺮ ﻗﻄﻌﻪ اﻳﺠﺎد و ﻣﻘﺪار دﻫﻲ ﺷﻮد .اﻳﻦ ﻛﺎر ﻧﻴﺎزﻣﻨﺪ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ اﺳﻤﺒﻠﻲ و آﺷﻨﺎﻳﻲ ﺑﺎ ﻋﻤﻠﻜﺮد
ﭘﺮدازﻧﺪه در ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه اﺳﺖ .واﺳﻄﻬﺎي ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﻣﺘﻌﺪدي ﻧﻴﺰ وﺟﻮد دارﻧﺪ ﻛﻪ اﻧﺠﺎم اﻳﻦ ﻛﺎر را ﺗﺴﻬﻴﻞ ﻣﻲﻛﻨﻨﺪ .ﻧﻈﻴﺮ واﺳﻂ ،DPMIﻛﻪ در ﻓﺼﻞ آﺧﺮ
درس ﺑﻪ آن ﻣﻲﭘﺮدازﻳﻢ.
ﺑﺮﺧﻲ ﺗﻮاﺑﻊ BIOSو ﮔﺮداﻧﻨﺪهﻫﺎي ،XMSدﺳﺘﺮﺳﻲ ﺑﻪ ﺣﺎﻓﻈﻪي ﺑﺴﻂﻳﺎﻓﺘﻪ را ﻓﺮاﻫﻢ ﻣﻲﻛﻨﻨﺪ ،و ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ﭘﺮدازﻧﺪه را ﺑﻪﺻﻮرت ﻣﻮﻗﺘﻲ ﺑﻪ ﺣﺎﻟﺖ
ﻣﺤﺎﻓﻈﺖﺷﺪه ﺑﺮده و ﺳﭙﺲ ﺑﻪ ﺣﺎﻟﺖ واﻗﻌﻲ ﺑﺮ ﻣﻲﮔﺮداﻧﻨﺪ .ﺗﻮاﺑﻊ ،XMSﺑﻬﺘﺮ از ﺗﻮاﺑﻊ BIOSﺣﺎﻓﻈﻪي ﺑﺴﻂﻳﺎﻓﺘﻪ را ﻣﺪﻳﺮﻳﺖ ﻣﻲﻛﻨﻨﺪ و ﺗﻮاﻧﺎﻳﻲ اﺳﺘﻔﺎده اﺷﺘﺮاﻛﻲ از
ﺣﺎﻓﻈﻪي ﺑﺴﻂﻳﺎﻓﺘﻪ را ﻓﺮاﻫﻢ ﻣﻲﻛﻨﻨﺪ ،در ﺣﺎﻟﻴﻜﻪ ﺗﻮاﺑﻊ BIOSاﺳﺘﻔﺎده ﻣﺠﺰا را ﻓﺮاﻫﻢ ﻣﻲﻛﻨﻨﺪ.
در اداﻣﻪ در ﻣﻮرد ﺳﻪ ﻣﻮﺿﻮع ﺻﺤﺒﺖ ﻣﻲﻛﻨﻴﻢ:
ROM-BIOS
...
1MB Address Space
640KB
C.M.
ﺑﺮﺧﻲ از ﺗﻮاﺑﻊ وﻗﻔﻪي ،15Hﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ XMﻗﺎﺑﻞ اﺳﺘﻔﺎده ﻫﺴﺘﻨﺪ .وﻗﻔﻪي ،15Hدر اﺻﻞ ﺑﺮاي واﺳﻂ ﻧﻮار ﻛﺎﺳﺖ ﻃﺮاﺣﻲ ﺷﺪه ﺑﻮد ،اﻣﺎ ﺑﻪ دﻟﻴﻞ
ﻣﺮﺳﻮم ﺷﺪن دﻳﺴﻜﻬﺎ ،اﻳﻦ ﺗﻮاﺑﻊ اﺳﺘﻔﺎده ﻧﺸﺪﻧﺪ .از اﻳﻨﺮو ،ﺑﺮﺧﻲ از ﺗﻮاﺑﻊ اﻳﻦ وﻗﻔﻪ ﺑﺮاي ﭘﺸﺘﻴﺒﺎﻧﻲ XMو Joystickدر ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪﻧﺪ.
ﺗﺎﺑﻊ 88Hوﻗﻔﻪ ،15Hﻣﻘﺪار XMرا در AXﺑﺮﻣﻲﮔﺮداﻧﺪ .ﺣﺎل ﻣﻲداﻧﻴﻢ ﭼﻘﺪر XMدارﻳﻢ .ﭼﮕﻮﻧﻪ ﻣﻲﺗﻮاﻧﻴﻢ از آن اﺳﺘﻔﺎده ﻛﻨﻴﻢ؟ ﺗﺎﺑﻊ ،87Hﺑﻠﻮﻛﻬﺎي
ﺣﺎﻓﻈﻪ را در ﻛﻞ ﺣﺎﻓﻈﻪ ،ﻳﻌﻨﻲ ﺑﻴﻦ 640KBو ﺑﺎﻻﺗﺮ از 1MBﻣﺒﺎدﻟﻪ ﻣﻲﻛﻨﺪ .ﻳﻌﻨﻲ ﻣﻲﺗﻮان ﺑﺎ اﺳﺘﻔﺎده از آن ،ﻳﻚ ﺑﻠﻮك ﺣﺎﻓﻈﻪ را از زﻳﺮ ﻓﻀﺎي 1MBﺑﻪ ﺑﺎﻻي
ﻓﻀﺎي 1MBو ﺑﺮﻋﻜﺲ ﻣﻨﺘﻘﻞ ﻧﻤﻮد .ﺗﺎﺑﻊ ،87Hﺗﺎﺑﻌﻲ ﭘﻴﭽﻴﺪه اﺳﺖ و ﺑﻪ اﻳﻦ دﻟﻴﻞ زﻳﺎد اﺳﺘﻔﺎده ﻧﺸﺪه اﺳﺖ.
AH = 87H
ﺗﻌﺪاد ﻛﻠﻤﺎت اﻧﺘﻘﺎﻟﻲ = CX
ES:SI = Address of GDT
در CXﺑﺎﻳﺪ ﺗﻌﺪاد ﻛﻠﻤﺎت )دو ﺑﺎﻳﺘﻲ( ﻗﺮار داده ﺷﻮد و ﺣﺪاﻛﺜﺮ ﻣﻘﺪار 8000Hاﺳﺖ و ﻟﺬا ﻣﻲﺗﻮان 64Kرا ﻫﺮ ﺑﺎر ﻣﻨﺘﻘﻞ ﻧﻤﻮد.
ﺟﺪول ﺗﻮﺻﻴﻒﮔﺮ ﺳﺮاﺳﺮي:(GDT)2در زوج ﺛﺒﺎت ،ES:SIﺑﺎﻳﺪ ﻧﺸﺎﻧﻲ GDTﻗﺮار داده ﺷﻮد ،ﻛﻪ ﺑﺎﻳﺪ در ﺑﺮﻧﺎﻣﻪي ﻛﺎرﺑﺮ ﻗﺮار داﺷﺘﻪ ﺑﺎﺷﺪGDT .
ﻗﻄﻌﺎت ﻣﺠﺰاي ﺣﺎﻓﻈﻪ را ﺗﻮﺻﻴﻒ ﻣﻲﻛﻨﺪ .ﻗﻄﻌﺎت در ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖ ﺷﺪه ﻣﻲﺗﻮاﻧﻨﺪ از ﻫﺮ ﻧﺸﺎﻧﻲ ﺷﺮوع ﺷﻮﻧﺪ و ﻧﻴﺎزي ﺑﻪ ﻣﻀﺮﺑﻲ از 16ﺑﻮدن ﻧﺪارﻧﺪ و ﻣﻲﺗﻮاﻧﻨﺪ از ﻳﻚ
ﺑﺎﻳﺖ ﺗﺎ 64KBﺑﺎﺷﻨﺪ .ﻳﻚ ﻧﻜﺘﻪي دﻳﮕﺮ اﻳﻦ اﺳﺖ ﻛﻪ ﺑﺮاي ﻫﺮ ﻗﻄﻌﻪ ﺑﺎﻳﺪ ﻣﺸﺨﺺ ﻧﻤﻮد ﻛﻪ ﻛﺪ) (CSاﺳﺖ ﻳﺎ داده ) .(DSﻓﻘﻂ CSﻫﺎ ﻗﺎﺑﻞ اﺟﺮا ﻫﺴﺘﻨﺪ و ﺧﻮد
ﭘﺮدازﻧﺪه DSﻫﺎ را اﺟﺮا ﻧﻤﻲﻛﻨﺪ .ﺑﺮاي CSﻣﻲﺗﻮان اﻟﻮﻳﺖ ﺗﻌﻴﻴﻦ ﻧﻤﻮد ،و اﻳﻨﻜﻪ اﺻﻼً اﺟﺎزهي دﺳﺘﺮﺳﻲ داده ﺷﺪه اﺳﺖ ﻳﺎ ﻧﻪ؟
ﻫﺮ ﺗﻮﺻﻴﻒﮔﺮ ﻗﻄﻌﻪ ﺷﺎﻣﻞ 8ﺑﺎﻳﺖ اﺳﺖ .در ﻃﻲ ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ ،87Hﻓﺮض ﻣﻲﺷﻮد ﻛﻪ ﺷﺶ ﺗﻮﺻﻴﻒﮔﺮ ﻗﻄﻌﻪ در GDTآﻣﺎده ﺷﺪهاﻧﺪ .در ﺷﻜﻞ )(2-12
اﻳﻦ ﻣﺴﺄﻟﻪ ﺗﻮﺿﻴﺢ داده ﺷﺪه اﺳﺖ.
_________________________________________________________________________________
High Memory Area ١
Global Descriptor Table ٢
5-12 ﻓﺼﻞ :12ﮔﺴﺘﺮش ﺣﺎﻓﻈﻪ
STACK +28H
ﺗﺎﺑﻊ 87Hﻧﻴﺎز دارد ﻛﻪ ﻓﻘﻂ ﻓﻴﻠﺪﻫﺎي Startو Destinationرا ﻣﻘﺪاردﻫﻲ ﻛﻨﻴﻢ و ﺳﺎﻳﺮ ﻓﻴﻠﺪﻫﺎ را ﺧﻮد ﺗﺎﺑﻊ ﻣﻘﺪاردﻫﻲ ﻣﻲﻛﻨﺪ و اﻃﻼﻋﺎﺗﻲ را در آن ﻗﺮار
ﻣﻲدﻫﺪ ﻛﻪ ﺑﺮاي ﺑﺮﮔﺸﺖ ﺑﻪ ﺣﺎﻟﺖ واﻗﻌﻲ و ﺑﺮﻧﺎﻣﻪي ﻓﺮاﺧﻮاﻧﻨﺪه ﻣﻮرد ﻧﻴﺎز ﻫﺴﺘﻨﺪ ،Start .ﻗﻄﻌﻪاي را ﺗﻮﺻﻴﻒ ﻣﻲﻛﻨﺪ ﻛﻪ دادهﻫﺎ در آن ﻗﺮار دارﻧﺪ و ﺑﺎﻳﺪ ﻣﻨﺘﻘﻞ ﺷﻮﻧﺪ و
Destinationﻗﻄﻌﻪاي را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ ﻛﻪ دادهﻫﺎ ﺑﺎﻳﺪ در آن ﻛﭙﻲ ﺷﻮﻧﺪ .ﻃﻮل ﻫﺮ دو ﻗﻄﻌﻪ ﻣﻲﺗﻮاﻧﺪ 0FFFFHﻳﺎ 64KBﺑﺎﺷﺪ و ﺣﺘﻲ ﻣﻲﺗﻮاﻧﺪ ﺗﻌﺪادي ﻛﻠﻤﻪ
)دوﺑﺎﻳﺘﻲ( ﻧﻴﺰ ﺑﺎﺷﺪ .اﮔﺮ ﺗﻨﻬﺎ ﻳﻚ ﺑﺎﻳﺖ ﺑﺎﻳﺪ ﻛﭙﻲ ﺷﻮد ،ﻻزم اﺳﺖ ﻛﻪ در دو ﺿﺮب ﺷﻮد و اﮔﺮ ﺗﻌﺪاد ﻛﻠﻤﺎت ﻛﻤﺘﺮ از دو ﻳﺎ ﺑﻴﺸﺘﺮ از 0FFFFHﺑﺎﺷﺪ ،ﺧﻄﺎ ﻣﻲﮔﻴﺮد.
ﻧﺸﺎﻧﻲﻫﺎي ﻓﻴﺰﻳﻜﻲ ﺣﺎﻓﻈﻪ در 20 ،8088ﺑﻴﺘﻲ ﻫﺴﺘﻨﺪ ،اﻣﺎ در 24 ،80286ﺑﻴﺘﻲ ﻫﺴﺘﻨﺪ و ﺑﻪ اﻳﻦ دﻟﻴﻞ اﺳﺖ ﻛﻪ اوﻟﻲ ﺗﻨﻬﺎ 220 = 1MBو دوﻣﻲ 224
= 16MBرا ﻧﺸﺎﻧﻲدﻫﻲ ﻛﻨﺪ .در ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه ،ﻧﺸﺎﻧﻲﻫﺎي ﺣﺎﻟﺖ واﻗﻌﻲ )ﻣﺒﺪأ ،ﻗﻄﻌﻪ( ﺑﺎﻳﺪ ﺑﻪ ﻧﺸﺎﻧﻴﻬﺎي ﻓﻴﺰﻳﻜﻲ 24ﺑﻴﺘﻲ ﺗﺒﺪﻳﻞ ﺷﻮﻧﺪ 16 .ﺑﻴﺖ ﻣﺒﺪأ وارد ﻓﻴﻠﺪ دوم
) (+2Hﺷﺪه و 4ﺑﻴﺖ ﻗﻄﻌﻪ وارد ﻓﻴﻠﺪ ﺳﻮم ) (+4Hﻣﻲﺷﻮﻧﺪ و ﻧﺸﺎﻧﻲ 24ﺑﻴﺘﻲ ﺑﺪﺳﺖ ﻣﻲآﻳﺪ.
ﻓﻴﻠﺪ ﭼﻬﺎرم ﻛﺪ دﺳﺘﺮﺳﻲ ﻗﻄﻌﻪ اﺳﺖ و ﻫﻤﻴﺸﻪ ﻣﻘﺪار 92Hدر آن ﻗﺮار داده ﻣﻲﺷﻮد ﻛﻪ ﺑﻴﺎﻧﮕﺮ ) (1دادهاي ﺑﻮدن ﻗﻄﻌﻪ (2) ،اﻟﻮﻳﺖ ﺑﺎﻻ (3) ،1در ﺣﺎﻓﻈﻪ ﻗﺮار
داﺷﺘﻦ و ) (4ﻗﺎﺑﻞ ﻧﻮﺷﺘﻦ ﺑﻮدن آن اﺳﺖ.
ﻓﻴﻠﺪ ﭘﻨﺠﻢ ﺑﺮاي ﺳﺎزﮔﺎري ﺑﺎ 80386اﺳﺖ و ﻣﻘﺪار 0در آن ﻗﺮار داده ﻣﻲﺷﻮد.
ﻣﻌﺎﻳﺐ دﺳﺘﺮﺳﻲ ﺑﻪ XMاز ﻃﺮﻳﻖ :BIOSدر ﺣﺎﻟﺘﻲ ﻛﻪ ﭘﺮدازﻧﺪه در ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه اﺳﺖ ،ﻫﻤﻪي وﻗﻔﻪﻫﺎ ﺑﺎﻳﺪ ﻧﺎﺗﻮان 2ﻳﺎ ﻣﻨﻊ ﺷﻮﻧﺪ .اﻣﺎ،
ﻣﻤﻜﻦ اﺳﺖ در ﺷﺮاﻳﻄﻲ ﻛﻪ در ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه ﻫﺴﺘﻴﻢ ،ﺗﺎﻳﻤﺮ ﻳﺎ ﺻﻔﺤﻪ ﻛﻠﻴﺪ وﻗﻔﻪ ﺑﺪﻫﻨﺪ ،و از اﻳﻨﺮو درﺳﺖ ﻣﺪﻳﺮﻳﺖ ﻧﺨﻮاﻫﻨﺪ ﺷﺪ ،زﻳﺮا رواﻟﻬﺎي ﻣﺪﻳﺮﻳﺖ وﻗﻔﻪﻫﺎ ﺑﺮاي
ﺣﺎﻟﺖ واﻗﻌﻲ ﻫﺴﺘﻨﺪ .ﺑﻪ ﺧﺼﻮص در ﻣﻮرد ﺗﺎﻳﻤﺮ ،اﻳﻦ ﻣﺸﻜﻞ آﺷﻜﺎرا ﻣﻼﺣﻈﻪ ﻣﻲﺷﻮد و اﮔﺮ ﺑﺮﻧﺎﻣﻪاي ﻣﺮﺗﺒﺎً از ﻃﺮﻳﻖ ﺗﺎﺑﻊ 87Hﺑﻪ XMدﺳﺘﻴﺎﺑﻲ داﺷﺘﻪ ﺑﺎﺷﺪ ،ﺳﺮﻋﺖ
ﺳﺎﻋﺖ ﺳﻴﺴﺘﻢ ﻛﻢ ﻣﻲﺷﻮد .ﭼﻮن ،ﺷﻤﺎرﺷﮕﺮ ﺳﺎﻋﺖ ﺑﻮﺳﻴﻠﻪي روال ﺳﺮوﻳﺲ وﻗﻔﻪي ،08Hﺑﻬﻨﮕﺎم ﻧﻤﻲﺷﻮد.
ﻣﺸﻜﻞ دﻳﮕﺮ ،ﺗﺪاﺧﻞ 3در XMاﺳﺖ .زﻳﺮا در ﺗﺌﻮري XMﻣﻲﺗﻮاﻧﺪ ﺑﻴﻦ ﺗﻤﺎﻣﻲ ﺑﺮﻧﺎﻣﻪﻫﺎ ﻣﺸﺘﺮك ﺑﺎﺷﺪ .اﻣﺎ ﺑﺮﺧﻲ ﺑﺮﻧﺎﻣﻪﻫﺎي ،cacheﻧﻈﻴﺮ
،SmartDrvﻳﺎ ﺑﺮﻧﺎﻣﻪﻫﺎي ﻛﻤﻜﻲ ﻣﻤﻜﻦ اﺳﺖ ﺑﺨﻮاﻫﻨﺪ از XMاﺳﺘﻔﺎده ﻛﻨﻨﺪ .اﻳﻦ ﻣﺴﺄﻟﻪ ﺑﺎﻋﺚ ﻣﻲﺷﻮد ﻛﻪ ﺑﺮﻧﺎﻣﻪاي اﺻﻠﻲ و ﺑﺮﻧﺎﻣﻪﻫﺎﻳﻲ ﻛﻪ ﺑﻪﺻﻮرت ﻣﻘﻴﻢ در
ﺣﺎﻓﻈﻪ ﻋﻤﻞ ﻣﻲﻛﻨﻨﺪ ،ﺣﺎﻓﻈﻪي ﻫﻤﺪﻳﮕﺮ را ﺑﺎزﻧﻮﻳﺴﻲ ﻧﻤﻮده و در ﻛﺎر ﻳﻜﺪﻳﮕﺮ ﺗﺪاﺧﻞ ﻧﻤﺎﻳﻨﺪ .اﻳﻦ ﻣﺸﻜﻞ ﻧﺘﻴﺠﻪي ﻧﺒﻮد ﻛﻨﺘﺮل ﻳﺎ ﻣﺪﻳﺮﻳﺖ اﺳﺖ ،و از اﻳﻨﺮو ﻧﻴﺎزﻣﻨﺪ ﻳﻚ
ﺑﺮﻧﺎﻣﻪي ﻣﺪﻳﺮﻳﺖ XMدر ﺳﻴﺴﺘﻢ ﻫﺴﺘﻴﻢ .اﻳﻦ در ﺣﺎﻟﻲ اﺳﺖ ﻛﻪ 88Hﺑﻪ ﻫﻤﻪي ﺑﺮﻧﺎﻣﻪﻫﺎ ،ﻛﻞ XMرا ﺑﻪﻋﻨﻮان ﺣﺎﻓﻈﻪي آزاد ﺑﺮﻣﻲﮔﺮداﻧﺪ و ﻣﻴﺰان اﺷﻐﺎل ﺷﺪه ﺗﻮﺳﻂ
ﺳﺎﻳﺮ ﺑﺮﻧﺎﻣﻪﻫﺎ را در ﻧﻈﺮ ﻧﻤﻲﮔﻴﺮد .راهﺣﻞ اﻳﻦ ﻣﺸﻜﻞ ،اﺳﺘﻔﺎده از ﮔﺮداﻧﻨﺪهﻫﺎي ،XMﻧﻈﻴﺮ XMSاﺳﺖ ،ﻛﻪ ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪي ﺑﺴﻂﻳﺎﻓﺘﻪ را ﻓﺮاﻫﻢ ﻣﻲﻛﻨﺪ.
_________________________________________________________________________________
high priority ١
disable ٢
conflict ٣
6-12 ﻓﺼﻞ :12ﮔﺴﺘﺮش ﺣﺎﻓﻈﻪ
ﭘﺲ روش ﺗﺒﺪﻳﻞ ﻧﺸﺎﻧﻲﻫﺎ ﺑﺎﻋﺚ ﻣﻲﺷﻮد ﻛﻪ ﻧﺸﺎﻧﻲﻫﺎي ﻣﺘﻔﺎوت ﺑﺎ ﻫﻢ ﻫﻤﭙﻮﺷﺎﻧﻲ 1داﺷﺘﻪ ﺑﺎﺷﻨﺪ .ﻳﻌﻨﻲ ﺑﻴﺶ از ﻳﻚ ﻧﺸﺎﻧﻲ ﺑﺎ روش Seg:Ofsﺑﻪ ﻳﻚ
ﻧﺸﺎﻧﻲ ﻓﻴﺰﻳﻜﻲ اﺷﺎره ﻣﻲﻛﻨﺪ.
ﻧﺸﺎﻧﻲ ﺷﺮوع آﺧﺮﻳﻦ ﻗﻄﻌﻪ در ﻓﻀﺎي ﻧﺸﺎﻧﻲﻫﺎي ،1MBﻛﻪ ﻣﺮﺑﻮط ﺑﻪ ROM-BIOSاﺳﺖ ،ﻋﺒﺎرت اﺳﺖ:
Extended
FFFF:FFFF Memory
HMA FFFF:0010
FFFF:000F
or ROM-BIOS
F000:FFFF
Addressable
in real-mode
Conventional and under
Memory DOS
ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ اﮔﺮ ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪ FFFFHو ﻧﺸﺎﻧﻲ ﻣﺒﺪأ 0010Hﻳﺎ ﺑﻴﺸﺘﺮ ﺑﺎﺷﺪ ،ﻳﻚ ﻧﺸﺎﻧﻲ ﻓﻴﺰﻳﻜﻲ 21ﺑﻴﺘﻲ ﺑﺪﺳﺖ ﻣﻲآﻳﺪ و دﺳﺘﺮﺳﻲ ﺑﻪ XMﻣﻤﻜﻦ
ﻣﻲﺷﻮد .ﻣﺸﺮوط ﺑﻪ اﻳﻨﻜﻪ ﻧﺸﺎﻧﻲ 21ﺑﻴﺘﻲ ﻗﺎﺑﻞ ﺗﻮﻟﻴﺪ ﺑﺎﺷﺪ .در PC/XTو داراي ﭘﺮدازﻧﺪهﻫﺎي 8086ﻳﺎ 8088اﻳﻦ اﻣﺮ ﻣﻴﺴﺮ ﻧﻴﺴﺖ ،ﭼﻮن ﻧﺸﺎﻧﻴﻬﺎي ﻓﻴﺰﻳﻜﻲ 20ﺑﻴﺘﻲ
ﻫﺴﺘﻨﺪ .اﻣﺎ ،در ATﺑﺎ ﭘﺮدازﻧﺪهي ،80286ﻧﺸﺎﻧﻴﻬﺎي ﻓﻴﺰﻳﻜﻲ 24ﺑﻴﺘﻲ ﻫﺴﺘﻨﺪ .در 8086ﻳﺎ 8088و ﻧﻴﺰ در ﺣﺎﻟﺖ واﻗﻌﻲ ،80286اﮔﺮ ﻣﻘﺎدﻳﺮ ﻣﺒﺪأ و ﻗﻄﻌﻪ ﺑﻪﮔﻮﻧﻪاي ﺑﺎﺷﺪ
ﻛﻪ ﻧﺸﺎﻧﻲ ﻓﻴﺰﻳﻜﻲ ﺣﺎﺻﻠﻪ ﺑﻴﺶ از 20ﺑﻴﺖ ﺑﺎﺷﺪ ،اﺻﻄﻼﺣﺎً ﻳﻚ ﺳﺮرﻳﺰي ﻧﺸﺎﻧﻲ اﺗﻔﺎق ﻣﻲاﻓﺘﺪ و ﺑﻴﺖ 21ام درﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻧﺸﺪه و ﻣﺜﻼً ،FFFFH:0010Hﻣﻌﺎدل
0000H:0000Hدرﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪه و ﺑﻪ اﺑﺘﺪاي RAMاﺷﺎره ﺧﻮاﻫﺪ ﻧﻤﻮد.
_________________________________________________________________________________
overlap ١
address overflow ٢
7-12 ﻓﺼﻞ :12ﮔﺴﺘﺮش ﺣﺎﻓﻈﻪ
در 8088/8086ﺧﻄﻮط ﻧﺸﺎﻧﻲ داراي اﺳﺎﻣﻲ A0-A19و در ،80286داراي اﺳﺎﻣﻲ A0-A23ﻫﺴﺘﻨﺪ .ﺑﺮاي ﺟﻠﻮﮔﻴﺮي از ﺳﺮرﻳﺰي ﻧﺸﺎﻧﻲ ،ﺑﺎﻳﺪ ﺧﻂ
21ام ﻧﺸﺎﻧﻲ ﻳﺎ A20ﻓﻌﺎل ﺷﻮد .اﻳﻦ ﺧﻂ در اﺑﺘﺪاي روﺷﻦ ﺷﺪن ﺳﻴﺴﺘﻢ ،ﻏﻴﺮﻓﻌﺎل اﺳﺖ ،و ﺑﺎ ﻓﻌﺎل ﺷﺪن آن ،ﻣﺸﻜﻞ ﻓﻮق ﭘﻴﺶ ﻧﻤﻲآﻳﺪ .ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ
،HMAﻣﺮاﺣﻞ زﻳﺮ ﺑﺎﻳﺪ ﻃﻲ ﺷﻮد:
ﺑﺮرﺳﻲ ﺷﻮد ﻛﻪ اﻣﻜﺎن دﺳﺘﺮﺳﻲ ﺑﻪ HMAوﺟﻮد دارد ﻳﺎ ﻧﻪ؟ اﮔﺮ ﭘﺮدازﻧﺪه 80286 ،ﺑﻪ ﺑﺎﻻ ﺑﺎﺷﺪ ،اﻣﻜﺎنﭘﺬﻳﺮ اﺳﺖ .ﭼﻮن ﺧﻂ ﻧﺸﺎﻧﻲ A20وﺟﻮد •
دارد.
ﺗﺎﺑﻊ 88Hوﻗﻔﻪي 15Hﻓﺮاﺧﻮاﻧﻲ ﺷﻮد ﺗﺎ ﻣﻘﺪار XMﻣﺸﺨﺺ ﺷﻮد .اﮔﺮ ﺑﻴﺶ از 64Kﺑﺎﺷﺪ ،آﻧﮕﺎه اﻣﻜﺎن دﺳﺘﺮﺳﻲ ﺑﻪ HMAوﺟﻮد دارد. •
ﺑﻴﺖ 1درﮔﺎه ﺧﺮوﺟﻲ ﻛﻨﺘﺮﻟﺮ ﺻﻔﺤﻪﻛﻠﻴﺪ ﺑﺎﻳﺪ 1ﺷﻮد ،ﺗﺎ ﺧﻂ A20ﻧﺸﺎﻧﻲ ﻓﻌﺎل ﺷﻮد)!( .در DOS 5.0ﺑﻪ ﺑﺎﻻ ،دﺳﺘﻮر DOS=HIGH, •
UMBدر CONFIG.SYSﻫﻤﻴﻦ ﻛﺎر را ﻣﻲﻛﻨﺪ.
ﺑﺎﻳﺪ در ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﺮرﺳﻲ ﺷﻮد ﻛﻪ A20ﻓﻌﺎل اﺳﺖ ﻳﺎ ﻧﻪ؟ اﮔﺮ ﻓﻌﺎل اﺳﺖ ،ﻳﻌﻨﻲ HMAوﺟﻮد دارد و از آن اﺳﺘﻔﺎده ﺷﻮد .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ﻣﻲﺗﻮان •
ﻣﻘﺪار ﺧﺎﻧﻪﻫﺎي ﺣﺎﻓﻈﻪ از FFFF:0000Hرا ﺑﺎ 0000:0000Hﻣﻘﺎﻳﺴﻪ ﻛﺮد .ﻣﺜﻼً 256ﺑﺎﻳﺖ را ﻣﻘﺎﻳﺴﻪ ﻣﻲﻛﻨﻴﻢ .اﮔﺮ ﻳﻜﺴﺎن ﺑﻮدﻧﺪ ،ﺑﻪ ﻣﻌﻨﻲ
ﻋﺪم دﺳﺘﺮﺳﻲ ﺑﻪ HMAاﺳﺖ .اﻟﺒﺘﻪ اﻳﻦ ﻳﻚ ﺣﻘﻪ 1اﺳﺖ و ﺑﺎ اﺣﺘﻤﺎل ﺧﻴﻠﻲ ﻛﻤﻲ ﻣﻤﻜﻦ اﺳﺖ درﺳﺖ ﻛﺎر ﻧﻜﻨﺪ.
اﻧﺪازهي ،HMAاﻧﺪﻛﻲ ﻛﻤﺘﺮ از 64Kاﺳﺖ) (65520 bytesاﺳﺖ ،وﻟﻲ اﻳﻦ ﻣﻴﺰان ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻫﺎي ﻛﻮﭼﻚ TSRﻛﺎﻓﻲ اﺳﺖ.
،HIMEM.SYSﻛﻪ ﺟﺰو ﮔﺮداﻧﻨﺪهﻫﺎي DOSاﺳﺖ ،ﻣﻌﺮوﻓﺘﺮﻳﻦ ﮔﺮداﻧﻨﺪهي XMSاﺳﺖ و در CONFIG.SYSﻧﺼﺐ ﻣﻲﺷﻮد .ﺑﻪ ﻫﻤﺮاه
ﮔﺮداﻧﻨﺪه ،XMSﺑﺮﻧﺎﻣﻪي EMM386.EXEﻧﻴﺰ ﻧﺼﺐ ﻣﻲﺷﻮد ﻛﻪ اﺳﺘﺎﻧﺪارد LIMرا ﭘﺸﺘﻴﺒﺎﻧﻲ ﻧﻤﻮده و XMرا در ﻗﺎﻟﺐ UMBﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ ﻣﻲﻛﻨﺪ.
ﻗﺒﻞ از دﺳﺘﺮﺳﻲ ﺑﻪ XMاز ﻃﺮﻳﻖ XMSﺑﺎﻳﺪ ﺑﺮرﺳﻲ ﺷﻮد ﻛﻪ ﮔﺮداﻧﻨﺪهي XMSﻧﺼﺐ اﺳﺖ ﻳﺎ ﻧﻪ؟ ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر وﻗﻔﻪي 2FHﺑﺎﻳﺪ ﻓﺮاﺧﻮاﻧﻲ ﺷﻮد:
AX = 4300H
INT 2FH
آﻧﮕﺎه اﮔﺮ AL = 80Hﺑﺎﺷﺪ ،ﮔﺮداﻧﻨﺪه ﻧﺼﺐ ﺷﺪه اﺳﺖ و ﮔﺮﻧﻪ ،ﻧﺼﺐ ﻧﺸﺪه اﺳﺖ.
ﺗﻮاﺑﻊ :XMS
Function Task
00H Determine XMS driver version
01H )Allocate High Memory Area (HMA
02H )Free High Memory Area (HMA
03H Globally enable address line A20
04H Globally disable address line A20
05H Locally enable address line A20
06H Locally disable address line A20
07H Query status of address line A20
08H Query free extended memory
09H )Allocate Extended Memory Block (EMB
0AH )Free allocated Extended Memory Block (EMB
0BH )Move Extended Memory Block (EMB
0CH )Lock Extended Memory Block (EMB
0DH )Unlock Extended Memory Block (EMB
0EH Get EMB handle information
0FH )Resize Extended Memory Block (EMB
10H )Allocate Upper Memory Block (UMB
11H )Free allocated Upper Memory Block (UMB
_________________________________________________________________________________
trick ١
8-12 ﻓﺼﻞ :12ﮔﺴﺘﺮش ﺣﺎﻓﻈﻪ
(1ﺗﻮاﺑﻊ اوﻟﻴﻪ :ﺑﺮاي ﺑﺮرﺳﻲ وﺿﻌﻴﺖ ﮔﺮداﻧﻨﺪه ،ﺧﻂ A20و ﻣﻴﺰان ﺣﺎﻓﻈﻪي آزاد)ﺷﺎﻣﻞ ﺗﻮاﺑﻊ 00Hو (03H-08H
(2ﺗﻮاﺑﻊ :HMAﺷﺎﻣﻞ ﺗﻮاﺑﻊ 01Hﺑﺮاي ﺗﺨﺼﻴﺺ HMAو 02Hﺑﺮاي آزادﺳﺎزي آن اﺳﺖ.
(3ﺗﻮاﺑﻊ :EMBﺷﺎﻣﻞ ﺗﻮاﺑﻊ 09H-0FHاﺳﺖ و ﺑﺮاي ﺗﺨﺼﻴﺺ و آزادﺳﺎزي و ﻣﺪﻳﺮﻳﺖ EMBﻫﺴﺘﻨﺪ.
(4ﺗﻮاﺑﻊ :UMBﺷﺎﻣﻞ ﺗﺎﺑﻊ 10Hﺑﺮاي ﺗﺨﺼﻴﺺ UMBو 11Hﺑﺮاي آزادﺳﺎزي آن اﺳﺖ.
اﻳﻦ ﺗﻮاﺑﻊ ﺑﺎ Far Callو ﻧﻪ ﻓﺮاﺧﻮاﻧﻲ وﻗﻔﻪ ،ﻗﺎﺑﻞ ﻓﺮاﺧﻮاﻧﻲ ﻫﺴﺘﻨﺪ .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ﺑﺎﻳﺪ ﻧﺸﺎﻧﻲ XMS Driverدر دﺳﺖ ﺑﺎﺷﺪ .ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ AX
= 4310Hوﻗﻔﻪي ،2FHﻧﺸﺎﻧﻲ ﻗﻄﻌﻪ در ﺛﺒﺎﺗﻬﺎي ES:BXﺑﺮﮔﺮداﻧﺪه ﻣﻲﺷﻮد .ﺗﻮاﺑﻊ 18ﮔﺎﻧﻪي ﻓﻮق آﻧﮕﺎه ﺑﺎ ﻗﺮار دادن ﺷﻤﺎرهي آﻧﻬﺎ ﻛﻪ در ﺟﺪول ﻓﻮق ذﻛﺮ ﺷﺪه،
در ﺛﺒﺎت AHﻗﺎﺑﻞ ﻓﺮاﺧﻮاﻧﻲ ﻫﺴﺘﻨﺪ.
ﻓﺼﻞ :16ﺳﺎﺧﺘﺎر داﺧﻠﻲ داس
)(Internal Structure of DOS
1-16اﺟﺰاء داس
داس داراي ﺳﻪ ﻣﺆﻟﻔﻪي اﺻﻠﻲ اﺳﺖ:
• :DOS-BIOSدر ﻳﻚ ﻓﺎﻳﻞ ﺳﻴﺴﺘﻢ ذﺧﻴﺮه ﺷﺪه و داراي ﻳﻜﻲ از اﺳﺎﻣﻲ ) IBMBIO.COMدر (PC-DOSﻳﺎ ) IO.SYSدر MS-
(DOSاﺳﺖ .ﻣﺸﺨﺼﻪي 1اﻳﻦ ﻓﺎﻳﻞ Hiddenو Sysاﺳﺖ و ﺑﺎ ﻓﺮﻣﺎن Dirدر ﻓﻬﺮﺳﺖ ﻓﺎﻳﻠﻬﺎ ﻇﺎﻫﺮ ﻧﻤﻲﺷﻮد .اﻳﻦ ﻓﺎﻳﻞ ﺷﺎﻣﻞ ﮔﺮداﻧﻨﺪهﻫﺎي
وﺳﻴﻠﻪ 2زﻳﺮ اﺳﺖ:
CON: Keyboard and display
PRN: Printer
AUX: Serial interface
CLOCK: Clock
Disk drives and/or hard disks which have the drive specifiers A:, B:, and C:
اﮔﺮ داس ﺑﺨﻮاﻫﺪ ﺑﺎ ﻳﻜﻲ از ﻣﻮارد ﻓﻮق ارﺗﺒﺎط ﺑﺮﻗﺮار ﻛﻨﺪ ،ﺑﻪ ﻳﻚ ﮔﺮداﻧﻨﺪهي وﺳﻴﻠﻪ دﺳﺘﺮﺳﻲ ﻣﻲﻳﺎﺑﺪ ،ﻛﻪ در اﻳﻦ ﻣﺎﺟﻮل از داس ﻗﺮار دارد .ﺧﻮد اﻳﻦ
ﻣﺎﺟﻮل ﻫﻢ از رواﻟﻬﺎي ROM-BIOSاﺳﺘﻔﺎده ﻣﻲﻛﻨﺪ و ﺑﺨﺸﻲ از ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ اﺳﺖ ﻛﻪ ﺑﻴﺶ از ﻫﻤﻪ واﺑﺴﺘﻪ ﺑﻪ ﺳﺨﺖاﻓﺰار PCاﺳﺖ.
• ﻫﺴﺘﻪي داس:3ﻫﺴﺘﻪي داس در ﻓﺎﻳﻞ IBMDOS.COMﻳﺎ MSDOS.SYSﻗﺮار دارد و ﻋﻤﻮﻣﺎً داراي ﻣﺸﺨﺼﻪي Hiddenو Sys
اﺳﺖ .اﻳﻦ ﻣﺎﺟﻮل ،ﺷﺎﻣﻞ رواﻟﻬﺎي دﺳﺘﺮﺳﻲ ﺑﻪ ﻓﺎﻳﻞ )ﻣﺪﻳﺮﻳﺖ ﻓﺎﻳﻞ( ،ورودي-ﺧﺮوﺟﻲ ﻛﺎراﻛﺘﺮ ،و ﻣﻮارد دﻳﮕﺮ ﻣﻲﺷﻮد .اﻳﻦ ﻣﺎﺟﻮل ﺷﺎﻣﻞ ﺗﻮاﺑﻊ API
داس اﺳﺖ ﻛﻪ ﺑﺎ وﻗﻔﻪي 21Hﻓﺮاﺧﻮاﻧﻲ ﻣﻲﺷﻮﻧﺪ .اﻳﻦ ﺗﻮاﺑﻊ ﻣﺴﺘﻘﻞ از ﺳﺨﺖاﻓﺰار ﺑﻮده و از ﮔﺮداﻧﻨﺪهﻫﺎي وﺳﻴﻠﻪي ﻣﻮﺟﻮد در DOS-BIOSﺑﺮاي
دﺳﺘﺮﺳﻲ ﺑﻪ ﺻﻔﺤﻪﻛﻠﻴﺪ ،ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ،و دﻳﺴﻚ اﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ .وﻗﻔﻪي 21Hدر ﻫﻨﮕﺎم ﺑﻮت ﺷﺪن داس ،ﺗﻌﻮﻳﺾ ﺷﺪه و ﺗﻮاﺑﻊ آن ﻗﺎﺑﻞ
ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﺷﻮﻧﺪ .روش ﻓﺮاﺧﻮاﻧﻲ اﻳﻦ ﺗﻮاﺑﻊ ﻣﺸﺎﺑﻪ ﺗﻮاﺑﻊ BIOSﺑﻮده و ﺑﺎ وﻗﻔﻪي ﻧﺮماﻓﺰاري ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﺷﻮﻧﺪ و اﻧﺘﻘﺎل ﭘﺎراﻣﺘﺮﻫﺎ ﺑﺎ اﺳﺘﻔﺎده از
ﺛﺒﺎﺗﻬﺎ ﺻﻮرت ﻣﻲﮔﻴﺮد.
• ﭘﺮدازﺷﮕﺮ ﻓﺮﻣﺎن :4ﺑﺮﺧﻼف دو ﻣﺎﺟﻮل ﻗﺒﻠﻲ ،اﻳﻦ ﺑﺨﺶ در ﻓﺎﻳﻞ COMMAND.COMوﺟﻮد دارد ﻛﻪ Hiddenو Sysﻧﺒﻮده و ﻋﻼﻣﺖ
داس ،5ﻳﻌﻨﻲ > Aﻳﺎ > Cرا ﺑﺮ روي ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ﻧﺸﺎن داده و ﻓﺮاﻣﻴﻦ ﻛﺎرﺑﺮ را درﻳﺎﻓﺖ ﻧﻤﻮده و اﺟﺮا ﻣﻲﻛﻨﺪ .ﺑﺮﺧﻲ ﮔﻤﺎن ﻣﻲﻛﻨﻨﺪ ﻛﻪ
،COMMAND.COMﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ اﺳﺖ ،در ﺣﺎﻟﻴﻜﻪ اﻳﻨﮕﻮﻧﻪ ﻧﻴﺴﺖ و اﻳﻦ ﻓﺎﻳﻞ ﻓﻘﻂ ﻳﻚ ﺑﺮﻧﺎﻣﻪي اﺟﺮاﻳﻲ ﺑﻮده و ﺗﺤﺖ ﻛﻨﺘﺮل داس اﺟﺮا
ﻣﻲﺷﻮد .اﻳﻦ ﺑﺮﻧﺎﻣﻪ ﺷﺎﻣﻞ ﺳﻪ ﻗﺴﻤﺖ زﻳﺮ اﺳﺖ:
اﻟﻒ( ﺑﺨﺶ ﻣﻘﺪاردﻫﻲ اوﻟﻴﻪ :6ﻫﻨﮕﺎم ﺑﻮت ﺷﺪن داس ﺑﻪ ﻣﺘﻐﻴﺮﻫﺎي داس ،ﻣﻘﺪار اوﻟﻴﻪ ﻣﻲدﻫﺪ.
ب( ﺑﺨﺶ ﻣﻘﻴﻢ در ﺣﺎﻓﻈﻪ :7ﺷﺎﻣﻞ رواﻟﻬﺎي ﻣﺪﻳﺮﻳﺖ ﺧﻄﺎﻫﺎي ﺑﺤﺮاﻧﻲ)8زدن ﻛﻠﻴﺪﻫﺎي Ctrl+Cﻳﺎ ،(Ctrl+Breakﻧﻤﺎﻳﺶ ﻋﻼﻣﺖ داس و درﻳﺎﻓﺖ
ﻓﺮاﻣﻴﻦ و ﭘﺮدازش آﻧﻬﺎ ،ﻓﺮاﺧﻮاﻧﻲ ﺑﺮﻧﺎﻣﻪﻫﺎﻳﻲ ﻛﻪ اﺳﺎﻣﻲ آﻧﻬﺎ ﺗﻮﺳﻂ ﻛﺎرﺑﺮ وارد ﺷﺪه و ﺑﺎرﻛﺮدن آﻧﻬﺎ در ﺣﺎﻓﻈﻪ و اﺟﺮاي آﻧﻬﺎ ،و ﺑﺎرﻛﺮدن ﻣﺠﺪد ﺑﺨﺶ
ﮔﺬرا ،در ﺻﻮرﺗﻲ ﻛﻪ ﺣﺎﻓﻈﻪي ﻣﻮرد اﺳﺘﻔﺎدهي ﺑﺨﺶ ﮔﺬرا ﺗﻮﺳﻂ ﺳﺎﻳﺮ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﺎزﻧﻮﻳﺴﻲ ﺷﺪه ﺑﺎﺷﺪ .ﺑﺮاي ﺗﺸﺨﻴﺺ اﻳﻦ اﻣﺮ ،از ﻣﺠﻤﻮع ﻣﻘﺎﺑﻠﻪاي9
اﺳﺘﻔﺎده ﻣﻲﺷﻮد.
12 11
ج( ﺑﺨﺶ ﮔﺬرا :وﻇﻴﻔﻪي اﺟﺮاي ﻓﺮﻣﺎﻧﻬﺎي داﺧﻠﻲ داس )ﻧﻈﻴﺮ DIR ،COPY ،RENAMEو ،(...ﻓﺮﻣﺎﻧﻬﺎي ﺧﺎرﺟﻲ )ﻧﻈﻴﺮ 10
XCOPY ،FORMATو ...و ﺑﻪﻃﻮر ﻛﻠﻲ ﻫﺮ ﺑﺮﻧﺎﻣﻪي .COMﻳﺎ ،(.EXEو ﻓﺎﻳﻠﻬﺎي دﺳﺘﻪاي) 13ﻳﻚ ﻓﺎﻳﻞ ﻣﺘﻨﻲ ﺑﺎ ﭘﺴﻮﻧﺪ .BATﻛﻪ
ﺷﺎﻣﻞ ﻳﻚ ﺳﺮي از ﻓﺮﻣﺎﻧﻬﺎي داس اﺳﺖ ،ﻛﻪ ﻳﻚ ﻧﻤﻮﻧﻪ آن AUTOEXEC.BAT ،اﺳﺖ( .دﻟﻴﻞ اﻳﻨﻜﻪ ﺑﻪ اﻳﻦ ﺑﺨﺶ ﮔﺬرا ﮔﻔﺘﻪ ﻣﻲﺷﻮد اﻳﻦ
_________________________________________________________________________________
attribute ١
device drivers ٢
DOS kernel ٣
command processor ٤
DOS prompt ٥
initialization part ٦
resident part ٧
critical error handler ٨
checksum ٩
transient part ١٠
internal commands ١١
external commands ١٢
Batch files ١٣
2-16 ﻓﺼﻞ :16ﺳﺎﺧﺘﺎر داﺧﻠﻲ داس
اﺳﺖ ﻛﻪ ﺣﺎﻓﻈﻪاي ﻛﻪ ﺑﺮﻧﺎﻣﻪي اﻳﻦ ﺑﺨﺶ در آن ﻗﺮار دارد ،در ﺻﻮرت ﻧﻴﺎز ﺳﺎﻳﺮ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺗﻮﺳﻂ داس ﺑﻪ آﻧﻬﺎ ﺗﺨﺼﻴﺺ داده ﺷﺪه و ﺑﺎ اﺻﻄﻼح رزرو
ﻧﻤﻲﺷﻮد .از اﻳﻨﺮو ﭘﺲ از ﺧﺎﺗﻤﻪي اﺟﺮاي ﺑﺮﻧﺎﻣﻪﻫﺎ و در زﻣﺎن ﺑﺮﮔﺸﺖ ﺑﻪ ﭘﺮدازﺷﮕﺮ ﻓﺮﻣﺎن ،ﺑﺎ ﻣﺠﻤﻮع ﻣﻘﺎﺑﻠﻪاي ﺑﺮرﺳﻲ ﻣﻲﺷﻮد ﻛﻪ ﺣﺎﻓﻈﻪي اﻳﻦ ﺑﺨﺶ
ﺑﺎزﻧﻮﻳﺴﻲ ﺷﺪه اﺳﺖ ﻳﺎ ﻧﻪ و در ﺻﻮرت ﻧﻴﺎز دوﺑﺎره از دﻳﺴﻚ ﺑﺎر ﻣﻲﺷﻮد .ﻫﻤﺎﻧﻈﻮري ﻛﻪ ﮔﻔﺘﻪ ﺷﺪ ،اﻳﻦ ﺑﺮرﺳﻲ و ﺑﺎرﻛﺮدن ﻣﺠﺪد ،ﺗﻮﺳﻂ ﺑﺨﺶ ﻣﻘﻴﻢ
درﺣﺎﻓﻈﻪ ،اﻧﺠﺎم ﻣﻲﺷﻮد.
2-16راهاﻧﺪازي 1داس
ﻓﺮآﻳﻨﺪ راهاﻧﺪازي ﺷﺎﻣﻞ ﻓﺮاﺧﻮاﻧﻲ ﺳﻪ ﻣﺎﺟﻮل DOS kernel ،DOS-BIOSو Command Processorاﺳﺖ .وﻗﺘﻲ PCروﺷﻦ ﻣﻲﺷﻮد،
ﺑﺮﻧﺎﻣﻪي راهاﻧﺪازي ﻛﻪ در ROM-BIOSوﺟﻮد دارد ،اﺟﺮا ﻣﻲﺷﻮد .اﻳﻦ ﺑﺮﻧﺎﻣﻪ ﻛﺎرﻫﺎي 2POSTرا اﻧﺠﺎم ﻣﻲدﻫﺪ و ﺳﭙﺲ ﺷﺮوع ﺑﻪ ﺑﺎرﻛﺮدن ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﻣﻲﻛﻨﺪ.
اﺑﺘﺪا ﺑﺮرﺳﻲ ﻣﻲﺷﻮد ﻛﻪ ﮔﺮداﻧﻨﺪهي دﻳﺴﻜﺖ وﺟﻮد دارد ﻳﺎ ﻧﻪ و آﻳﺎ در آن دﻳﺴﻜﺘﻲ ﻫﺴﺖ ﻳﺎ ﻧﻪ؟ اﮔﺮ ﺑﺎﺷﺪ ،در Boot Sectorآن ﺑﻪ دﻧﺒﺎل ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﻣﻲﮔﺮدد .اﮔﺮ
دﻳﺴﻜﺖ در ﮔﺮداﻧﻨﺪه ﻧﺒﺎﺷﺪ ،ﺑﻪ دﻧﺒﺎل دﻳﺴﻚ ﺳﺨﺖ ﻣﻲﮔﺮدد و ﻗﺴﻤﺖ ﻓﻌﺎل 3را ﻳﺎﻓﺘﻪ و Boot Sectorآﻧﺮا ﺑﺎر ﻧﻤﻮده و اﺟﺮا ﻣﻲﻛﻨﺪ .اﮔﺮ Boot Sectorدﻳﺴﻜﺖ ﻳﺎ
ﻗﺴﻤﺖ ﻓﻌﺎل دﻳﺴﻚ ﺳﺨﺖ ،اﺟﺮاﻳﻲ ﻧﺒﺎﺷﺪ ،ﭘﻴﻐﺎم ﺗﻌﻮﻳﺾ دﻳﺴﻜﺖ ﻳﺎ ﻗﺮار دادن دﻳﺴﻜﺖ داده ﻣﻲﺷﻮد.
ﺑﺮﻧﺎﻣﻪي ﻣﻮﺟﻮد در Boot Sectorﭼﻚ ﻣﻲﻛﻨﺪ ﻛﻪ ﻓﺎﻳﻠﻬﺎي IO.SYSو MSDOS.SYSوﺟﻮد دارﻧﺪ ﻳﺎ ﻧﻪ ،اﮔﺮ ﺑﺎﺷﻨﺪ در آﺧﺮﻳﻦ ﻣﻜﺎن ﺣﺎﻓﻈﻪ
ﺑﺎرﮔﺬاري ﺷﺪه و اﺟﺮا ﻣﻲﺷﻮﻧﺪ ،MSDOS.SYS .وﻗﻔﻪي 21Hرا ﺗﻌﻮﻳﺾ ﻧﻤﻮده و ﮔﺮداﻧﻨﺪهﻫﺎي وﺳﻴﻠﻪي ﻣﻮﺟﻮد در DOS-BIOSرا ﻛﻪ ﺑﺎ IO.SYSﺑﺎر
ﺷﺪهاﻧﺪ را ﻣﻘﺪار دﻫﻲ اوﻟﻴﻪ ﻣﻲﻛﻨﺪ .ﺳﭙﺲ در ،Boot Diskﺑﻪ دﻧﺒﺎل ﻓﺎﻳﻞ CONFIG.SYSﻣﻲﮔﺮدد و در ﺻﻮرت وﺟﻮد ،ﻓﺮﻣﺎﻧﻬﺎي ﻣﻮﺟﻮد در آن را اﺟﺮا ﻣﻲﻛﻨﺪ ،ﺗﺎ
ﮔﺮداﻧﻨﺪهﻫﺎي ﻣﻌﺮﻓﻲ ﺷﺪه در آن را ﺑﻪ داس اﺿﺎﻓﻪ ﻧﻤﺎﻳﺪ و ﻧﻴﺰ ﺑﺎﻓﺮﻫﺎ و ﻟﻮازم ورودي-ﺧﺮوﺟﻲ را ﻣﻘﺪار دﻫﻲ اوﻟﻴﻪ ﻣﻲﻛﻨﺪ .در ﺧﺎﺗﻤﻪ COMMAND.COMرا ﺑﺎر
ﻧﻤﻮده و ﻛﻨﺘﺮل را ﺑﻪ آن ﻣﻨﺘﻘﻞ ﻣﻲﻛﻨﺪ.
_________________________________________________________________________________
booting ١
Power On Self Test ٢
active partition ٣
ﻓﺼﻞ :17ﺑﺮﻧﺎﻣﻪﻫﺎي COMو EXE
)(COM and EXE Programs
1-17ﻣﻘﺪﻣﻪ
دو ﻧﻮع ﻓﺎﻳﻞ اﺟﺮاﻳﻲ در داس وﺟﻮد دارد COM :و .EXEﺑﺮﻧﺎﻣﻪﻫﺎي COMداراي اﻧﺪازهاي ﻛﻮﭼﻚ ﺑﻮده و DS ،CSو SSآﻧﻬﺎ در ﻣﺠﻤﻮع ﺣﺪاﻛﺜﺮ
64Kاﺳﺖ .اﻏﻠﺐ ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي ﭘﺎﺳﻜﺎل و ،Cﻓﻘﻂ ﻓﺎﻳﻞ EXEﺗﻮﻟﻴﺪ ﻣﻲﻛﻨﻨﺪ ،وﻟﻲ ﺑﺮﺧﻲ ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي Cﺑﺮاي ﺑﺮﻧﺎﻣﻪﻫﺎي داراي ﻣﺪل TINYﻣﻲﺗﻮاﻧﻨﺪ COMﻫﻢ
ﺗﻮﻟﻴﺪ ﻛﻨﻨﺪ .ﺑﺮﻧﺎﻣﻪي EXE2BINداس و TLINKﺑﻮرﻟﻨﺪ ﻧﻴﺰ ﺗﻮاﻧﺎﻳﻲ ﺗﺒﺪﻳﻞ ﺑﺮﻧﺎﻣﻪي EXEﺑﻪ COMﻳﺎ ﺗﻮﻟﻴﺪ ﺑﺮﻧﺎﻣﻪي COMرا دارﻧﺪ.
: (Program Segment Prefix) PSPداس ﺑﺮاي اﺟﺮاي ﺑﺮﻧﺎﻣﻪ ،ﺑﺪون درﻧﻈﺮ ﮔﺮﻓﺘﻦ ﻧﻮع آن ،ﻳﻚ ﺳﺎﺧﺘﺎر در ﺣﺎﻓﻈﻪ اﻳﺠﺎد ﻣﻲﻛﻨﺪ ﻛﻪ PSP
ﻧﺎﻣﻴﺪه ﻣﻲﺷﻮد و آﻧﺮا ﻗﺒﻞ از ﺷﺮوع ﺑﺮﻧﺎﻣﻪ اﻳﺠﺎد ﻣﻲﻛﻨﺪ و ﻛﺪ ﺑﺮﻧﺎﻣﻪ ﺑﻼﻓﺎﺻﻠﻪ ﭘﺲ از آن در ﺣﺎﻓﻈﻪ ﺑﺎر ﻣﻲﺷﻮد .اﻳﻦ ﺳﺎﺧﺘﺎر ﻛﻪ PSPﻧﺎﻣﻴﺪه ﻣﻲﺷﻮد 256 ،ﺑﺎﻳﺖ اﺳﺖ و
ﻣﻄﺎﺑﻖ ﺷﻜﻞ زﻳﺮ ،ﻗﺒﻞ از ﺑﺮﻧﺎﻣﻪ در ﺣﺎﻓﻈﻪ ﻗﺮار ﻣﻲﮔﻴﺮد .در اداﻣﻪي اﻳﻦ ﻓﺼﻞ در ﻣﻮرد PSPﺑﻴﺸﺘﺮ ﺻﺤﺒﺖ ﻣﻲﺷﻮد.
CS:IP
Code
Code, DS:0000
Data, and
Stack ≤ 64K
SS:SP Data
SS:0000
SS:FFFF
DS:FFFF SS:SP
ES:FFFF
CS:FFFF Stack
2-17 ﻓﺼﻞ :17ﺑﺮﻧﺎﻣﻪﻫﺎي COMو EXE
3-17ﺑﺮﻧﺎﻣﻪﻫﺎي COM
اﻳﻦ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﻪﻋﻨﻮان ﻳﻚ ﺗﺼﻮﻳﺮ ﺣﺎﻓﻈﻪ 1در دﻳﺴﻚ ذﺧﻴﺮه ﻣﻲﺷﻮﻧﺪ .از اﻳﻨﺮو ،ﻧﻴﺎز ﺑﻪ ﭘﻴﺶﭘﺮدازش ﻧﺪارﻧﺪ ،ﺗﺎ ﻧﺸﺎﻧﻲﻫﺎي ﻧﺴﺒﻲ 2ﺗﻮﻟﻴﺪ ﺷﺪه ﺑﻮﺳﻴﻠﻪي
ﻛﺎﻣﭙﺎﻳﻠﺮ ﻳﺎ اﺳﻤﺒﻠﺮ ﺑﺮاﺳﺎس ﻣﻜﺎن ﺑﺎرﺷﺪه در ﺣﺎﻓﻈﻪ ،ﺑﻪ ﻧﺸﺎﻧﻲﻫﺎي واﻗﻌﻲ اﺻﻼح ﺷﻮﻧﺪ .از اﻳﻨﺮو ،ﺳﺮﻳﻊﺗﺮ در ﺣﺎﻓﻈﻪ ﺑﺎرﻣﻲﺷﻮﻧﺪ .اﻣﺎ اﻣﺮوزه ﺑﻪدﻟﻴﻞ اﻓﺰاﻳﺶ ﺣﺎﻓﻈﻪ و ﺳﺮﻋﺖ
ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎ ،اﻳﻦ ﻣﺰاﻳﺎي ﺑﺮﻧﺎﻣﻪﻫﺎي COMﭼﻨﺪان اﻫﻤﻴﺖ ﻧﺪارد و ﻓﻘﻂ ﺑﺮاي ﻛﺎرﺑﺮدﻫﺎي ﺧﺎص ،ﻣﺜﻼً ﻧﻮﺷﺘﻦ ﮔﺮداﻧﻨﺪهﻫﺎي وﺳﻴﻠﻪ ،از اﻳﻦ ﻧﻮع ﺑﺮﻧﺎﻣﻪﻫﺎ اﺳﺘﻔﺎده ﻣﻲﺷﻮد ﺗﺎ
ﺣﺠﻢ ﻛﻤﻲ از ﺣﺎﻓﻈﻪ را اﺷﻐﺎل ﻧﻤﻮده و ﺳﺮﻳﻊ ﺑﺎﺷﻨﺪ.
ﺑﺮﻧﺎﻣﻪاي ﺑﻪﻧﺎم EXE2BINﺟﺰو ﻓﺮاﻣﻴﻦ ﺧﺎرﺟﻲ داس اﺳﺖ ﻛﻪ از آن ﻣﻲﺗﻮان ﺑﺮاي ﺗﺒﺪﻳﻞ ﺑﺮﻧﺎﻣﻪﻫﺎي EXEﺑﻪ ﺑﺮﻧﺎﻣﻪي COMاﺳﺘﻔﺎده ﻧﻤﻮد .اﻳﻦ
ﺑﺮﻧﺎﻣﻪ ﭼﻚ ﻣﻲﻛﻨﺪ ﻛﻪ اﻳﻦ اﻣﺮ اﻣﻜﺎنﭘﺬﻳﺮ اﺳﺖ ﻳﺎ ﻧﻪ؟ ﻳﻌﻨﻲ ﻛﺪ ﺑﺮﻧﺎﻣﻪي EXEآﻧﻘﺪر ﻛﻮﭼﻚ ﺑﺎﺷﺪ ﻛﻪ در 64Kﻗﺮار ﮔﻴﺮد .ﺑﺮﻧﺎﻣﻪﻫﺎي اﺳﻤﺒﻞ ﺷﺪه ﺑﺎ MASMو
ﻣﺘﺼﻞ ﺷﺪه ﺑﺎ EXE ،LINKﺧﻮاﻫﻨﺪ ﺑﻮد ،ﻛﻪ ﺑﺮاي ﺗﺒﺪﻳﻞ آﻧﻬﺎ ﺑﻪ COMﻣﻲﺗﻮان از EXE2BINاﺳﺘﻔﺎده ﻧﻤﻮد .اﻣﺎ اﮔﺮ از اﺳﻤﺒﻠﺮ TASMاﺳﺘﻔﺎده ﺷﻮد ،ﺑﺎ
TLINKﻣﻲﺗﻮان ﻣﺴﺘﻘﻴﻤﺎً ﺑﺮﻧﺎﻣﻪي COMﺗﻮﻟﻴﺪ ﻛﺮد.
ﺑﺮاي اﺟﺮاي ﺑﺮﻧﺎﻣﻪي ،COMﻣﺤﺘﻮاي ﻓﺎﻳﻞ COMﺑﻼﻓﺎﺻﻠﻪ ﭘﺲ از PSPو ﻧﺸﺎﻧﻲ ﻣﺒﺪأ ،100Hدر ﺣﺎﻓﻈﻪ ﺑﺎر ﻣﻲﺷﻮد .ﭘﺲ اوﻟﻴﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﭘﺲ
از 100Hاﺟﺮا ﻣﻲﺷﻮد .از اﻳﻨﺮو ،ﺑﺮﻧﺎﻣﻪي COMﺣﺘﻤﺎًﺑﺎﻳﺪ ﺑﺎ ﻳﻚ دﺳﺘﻮراﻟﻌﻤﻞ اﺟﺮاﻳﻲ ﺷﺮوع ﺷﻮﻧﺪ ،ﺣﺘﻲ اﮔﺮ اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ،ﻳﻚ jmpﺑﺎﺷﺪ.
4-17ﺑﺮﻧﺎﻣﻪﻫﺎي EXE
ﻳﻚ ﻣﺰﻳﺖ ﻋﻤﺪه ﺑﺮﻧﺎﻣﻪﻫﺎي EXEﻧﺴﺒﺖ ﺑﻪ ،COMﻣﺤﺪود ﻧﺒﻮدن اﻧﺪازهي اﻳﻦ ﺑﺮﻧﺎﻣﻪﻫﺎ اﺳﺖ .اﻣﺎ ،ﻓﺎﻳﻠﻬﺎي EXEﭘﻴﭽﻴﺪه ﻫﺴﺘﻨﺪ ،زﻳﺮا ﻋﻼوه ﺑﺮ
ﻛﺪﻫﺎي اﺟﺮاﻳﻲ ﺑﺮﻧﺎﻣﻪ ،اﻃﻼﻋﺎت دﻳﮕﺮي ﻫﻢ ﺑﺎﻳﺪ در ﻓﺎﻳﻠﻬﺎي EXEﻧﮕﻬﺪاري ﺷﻮد .اﻳﻦ ﺑﺮﻧﺎﻣﻪﻫﺎ داراي ﻗﻄﻌﺎت ﻣﺠﺰاي ﻛﺪ ،داده و ﭘﺸﺘﻪ ﻫﺴﺘﻨﺪ و ﭘﺲ از ﺑﺎرﺷﺪن از
دﻳﺴﻚ ﺑﺎﻳﺪ ﺗﻮﺳﻂ ﺗﺎﺑﻊ EXECﭘﺮدازش ﺷﻮﻧﺪ ﺗﺎ ﺑﺮاي اﺟﺮا آﻣﺎده ﺷﻮﻧﺪ .ﺑﺮﻧﺎﻣﻪﻫﺎي COMﻫﻤﺎﻧﻨﺪ ﻳﻚ ﺗﺼﻮﻳﺮ ﺣﺎﻓﻈﻪ ﻫﺴﺘﻨﺪ و ﻫﻤﻴﺸﻪ ﺑﺎﻳﺪ در ﻳﻚ ﻣﻜﺎن ﺛﺎﺑﺖ در
ﺣﺎﻓﻈﻪ ﻗﺮار ﮔﻴﺮﻧﺪ و اﺟﺮا ﺷﻮﻧﺪ .اﻣﺎ ﺑﺮﻧﺎﻣﻪﻫﺎي EXEدر ﻫﺮ ﻣﻜﺎن ﺣﺎﻓﻈﻪ ﻛﻪ ﻣﻀﺮﺑﻲ از 16ﺑﺎﺷﺪ ،ﻣﻲﺗﻮاﻧﻨﺪ ﻗﺮار ﮔﺮﻓﺘﻪ و اﺟﺮا ﺷﻮﻧﺪ .ﺑﻪ اﻳﻦ دﻟﻴﻞ در ﻳﻚ ﺑﺮﻧﺎﻣﻪي
EXEﺑﺎﻳﺪ از دﺳﺘﻮرات FARاﺳﺘﻔﺎده ﺷﻮد .ﭼﻮن ﻣﻤﻜﻦ اﺳﺖ ﺑﺮﻧﺎﻣﻪي اﺻﻠﻲ و رواﻟﻬﺎ در ﻗﻄﻌﺎت ﻣﺘﻔﺎوت ﻗﺮار ﮔﻴﺮﻧﺪ .از آﻧﺠﺎﻳﻲﻛﻪ ،ﺑﺮﻧﺎﻣﻪ ﻫﺮ ﺑﺎر در ﻣﻜﺎن ﻣﺘﻔﺎوﺗﻲ ﺑﺎر
ﻣﻲﺷﻮد ،ﻧﺸﺎﻧﻲ ﻗﻄﻌﺎت در اﺟﺮاﻫﺎ ﻣﺨﺘﻠﻒ ،ﻣﺘﻔﺎوت ﺧﻮاﻫﺪ ﺑﻮد .ﺑﻨﺎﺑﺮ اﻳﻦ ،ﺑﺎﻳﺪ در اﺑﺘﺪاي ﻓﺎﻳﻞ EXEاﻃﻼﻋﺎﺗﻲ وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪ ﻛﻪ از ﻃﺮﻳﻖ آن ﺑﺘﻮان ﻧﺸﺎﻧﻲ ﻗﻄﻌﺎت در
ﻓﺎﻳﻞ EXEرا ﺗﺼﺤﻴﺢ ﻧﻤﻮد .ﺑﻪ اﻳﻦ دﻟﻴﻞ در اﺑﺘﺪاي ﻓﺎﻳﻞ ،EXEﺳﺮآﻳﻨﺪي 3وﺟﻮد دارد ﻛﻪ اﻃﻼﻋﺎت ﻣﻬﻤﻲ ﺗﻮﺳﻂ ﻛﺎﻣﭙﺎﻳﻠﺮ ﻳﺎ اﺳﻤﺒﻠﺮ در آن ذﺧﻴﺮه ﻣﻲﺷﻮد و ﻣﻮرد
اﺳﺘﻔﺎدهي ﺑﺎرﻛﻨﻨﺪهي داس)ﻛﻪ ﻫﻤﺎن ﺗﺎﺑﻊ EXECﺑﺎ ﺷﻤﺎرهي (4BHﻗﺮار ﻣﻲﮔﻴﺮد .ﻗﺎﻟﺐ ﺳﺮآﻳﻨﺪ ﻓﺎﻳﻞ EXEﻣﻄﺎﺑﻖ ﺟﺪول ﺻﻔﺤﻪي ﺑﻌﺪ اﺳﺖ.
_________________________________________________________________________________
memory image ١
relative addresses ٢
header ٣
3-17 ﻓﺼﻞ :17ﺑﺮﻧﺎﻣﻪﻫﺎي COMو EXE
1-18ﻣﻘﺪﻣﻪ
ﺗﻮاﺑﻊ ورودي ﺧﺮوﺟﻲ داس ،اﻣﻜﺎن دﺳﺘﺮﺳﻲ ﺑﻪ ﺻﻔﺤﻪ ﻛﻠﻴﺪ ،ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ،ﭼﺎﭘﮕﺮ و واﺳﻂ ﺳﺮﻳﺎل را ﻣﻴﺴﺮ ﻣﻲﺳﺎزﻧﺪ .اﻳﻦ ﺗﻮاﺑﻊ ﺑﻪ دو دﺳﺘﻪ ﺗﻘﺴﻴﻢ
ﻣﻲﺷﻮﻧﺪ:
(1ﺗﻮاﺑﻊ ﻣﺸﺎﺑﻪ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ CP/M
(2ﺗﻮاﺑﻊ ﻣﺸﺎﺑﻪ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ Unix
ﺗﻮاﺑﻊ ﻳﻮﻧﻴﻜﺴﻲ ،از ﻳﻚ دﺳﺘﻪ 1ﻛﻪ ﻳﻚ ﺷﻤﺎرهي ﻋﺪدي اﺳﺖ ،ﺑﻪ ﻋﻨﻮان ﻣﺸﺨﺼﻪي وﺳﻴﻠﻪ اﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ.
در اداﻣﻪ در ﻣﻮرد ﻫﺮ دو ﮔﺮوه ﺗﻮاﺑﻊ ﺻﺤﺒﺖ ﻣﻲﻛﻨﻴﻢ.
دﺳﺘﻪ2 2-18ﺗﻮاﺑﻊ
اﻳﻦ ﺗﻮاﺑﻊ ﻫﻢ ﺑﺎ ﻓﺎﻳﻞ و ﻫﻢ ﺑﺎ وﺳﺎﻳﻞ ﻛﺎراﻛﺘﺮي 3ﻗﺎﺑﻞ اﺳﺘﻔﺎده ﻫﺴﺘﻨﺪ .ﻧﻮع ﻳﺎ ﻧﺎم دﺳﺘﻪ ،وﺳﻴﻠﻪ را ﺗﻌﻴﻴﻦ ﻣﻲﻛﻨﺪ .اﮔﺮ ﻧﺎم دﺳﺘﻪ ،ﻳﻜﻲ از ﻟﻮازم اﺳﺘﺎﻧﺪارد و
ﺷﻨﺎﺧﺘﻪ ﺷﺪهي زﻳﺮ ﺑﺎﺷﺪ ،ورودي-ﺧﺮوﺟﻲ روي آن وﺳﻴﻠﻪ اﻧﺠﺎم ﻣﻲﺷﻮد ،و در ﻏﻴﺮ اﻳﻦﺻﻮرت ،ﺑﺎﻳﺪ دﺳﺘﻪ ،ﻣﺮﺑﻮط ﺑﻪ ﻳﻚ ﻓﺎﻳﻞ ﺑﺎﺷﺪ ﻛﻪ ﺑﺎﻳﺪ ﻗﺒﻼً ﻣﻨﺴﻮب ﺑﻪ ﻳﻚ ﻓﺎﻳﻞ
ﻓﻴﺰﻳﻜﻲ ﺷﺪه و ﺑﺎز ﺷﺪه ﺑﺎﺷﺪ.
Handle Purpose
0 )Standard input (CON/ keyboard
1 )Standard output (CON/ display
2 )Standard output for error messages (CON
3 )Standard serial interface (AUX
4 )Standard printer (PRN
_________________________________________________________________________________
handle ١
handle functions ٢
character devices ٣
2-18 ﻓﺼﻞ :18ورودي-ﺧﺮوﺟﻲ ﻛﺎراﻛﺘﺮ از ﻃﺮﻳﻖ داس
ارﺳﺎل داده ﺑﻪ وﺳﻴﻠﻪ )1. Function 40H of INT 21H: (Send/write data
AH = 40H
BH = handle
CX = number of characters
DS:DX = offset and segment of data
درﻳﺎﻓﺖ داده از وﺳﻴﻠﻪ )2. Function 3FH of INT 21H: (Receive/read data
AH = 3FH
BH = handle
CX = number of characters
DS:DX = offset and segment of data
ﺑﺎزﻛﺮدن وﺳﻴﻠﻪ )3. Function 3DH of INT 21H: (Open
AH = 3DH
AL = 0: read 1: write 2: read/write
DS:DX = address of device name (nul-terminated) string
ﺑﺴﺘﻦ وﺳﻴﻠﻪ )4. Function 3EH of INT 21H: (Close
AH = 3EH
BX = handle
3-18ﺗﻮاﺑﻊ CP/M
ﺗﻮاﺑﻊ ﺳﻨﺘﻲ داس ﺑﻮده و ﻣﺸﺎﺑﻪ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ CP/Mﻫﺴﺘﻨﺪ و ﻧﻴﺎزي ﺑﻪ دﺳﺘﻪ ﻧﺪارﻧﺪ و ﺑﺮاي ﺻﻔﺤﻪﻧﻤﺎﻳﺶ ،ﺻﻔﺤﻪ ﻛﻠﻴﺪ ،ﭼﺎﭘﮕﺮ ،و واﺳﻂ ﺳﺮﻳﺎل ﺗﻮاﺑﻊ
ﻣﺠﺰاﻳﻲ وﺟﻮد دارﻧﺪ:
ﺻﻔﺤﻪ ﻛﻠﻴﺪ :ﺗﻮاﺑﻊ ،07H ،06H ،01Hو 08Hﺑﺮاي ﺧﻮاﻧﺪن ﻛﺎراﻛﺘﺮ از ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﺑﻪﺻﻮرﺗﻬﺎي ﻣﺨﺘﻠﻒ ﺑﺎ اﻧﺘﻈﺎر ،ﺑﺪون اﻧﺘﻈﺎر و ﻏﻴﺮه ،ﻗﺎﺑﻞ •
اﺳﺘﻔﺎده ﻫﺴﺘﻨﺪ .ﺗﺎﺑﻊ ،0BHﺗﻌﺪاد ﻛﺎراﻛﺘﺮﻫﺎ در ﺑﺎﻓﺮ ﺻﻔﺤﻪ ﻛﻠﻴﺪ را ﺑﺮﻣﻲﮔﺮداﻧﺪ .ﺗﺎﺑﻊ ،0CHﺑﺎﻓﺮ ﺻﻔﺤﻪ ﻛﻠﻴﺪ را ﺧﺎﻟﻲ ﻣﻲﻛﻨﺪ و ﺑﺎ ﺗﺎﺑﻊ 0AH
ﻣﻲﺗﻮان ﻳﻚ رﺷﺘﻪ را از ورودي ﺧﻮاﻧﺪ.
ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ :ﺗﺎﺑﻊ ،02Hﺑﺮاي ﻧﻤﺎﻳﺶ ﻛﺎراﻛﺘﺮ و ﺗﺎﺑﻊ 09Hﺑﺮاي ﻧﻤﺎﻳﺶ رﺷﺘﻪ در ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد ﻗﺎﺑﻞ اﺳﺘﻔﺎده ﻫﺴﺘﻨﺪ. •
ﭼﺎﭘﮕﺮ :ﺗﺎﺑﻊ 05Hﺑﺮاي ﭼﺎپ ﻳﻚ ﻛﺎراﻛﺘﺮ در ﭼﺎﭘﮕﺮ ،ﻳﺎ ﻫﻤﺎن واﺳﻂ ﻣﻮازي ﻗﺎﺑﻞ اﺳﺘﻔﺎده اﺳﺖ. •
واﺳﻂ ﺳﺮﻳﺎل :ﺗﺎﺑﻊ 03Hﺑﺮاي درﻳﺎﻓﺖ داده و ﺗﺎﺑﻊ 04Hﺑﺮاي ارﺳﺎل داده ﺑﻪ واﺳﻂ ﺳﺮﻳﺎل ﻗﺎﺑﻞ اﺳﺘﻔﺎده ﻫﺴﺘﻨﺪ. •
ﻓﺼﻞ :19ﻣﺪﻳﺮﻳﺖ ﻓﺎﻳﻞ در داس
)(File Management in DOS
1-19ﻣﻘﺪﻣﻪ
داس داراي ﺗﻮاﺑﻌﻲ ﺑﺮاي ﻣﺪﻳﺮﻳﺖ ﻓﺎﻳﻞ اﺳﺖ .از ﻃﺮﻓﻲ ،زﺑﺎﻧﻬﺎي ﺑﺮﻧﺎﻣﻪﺳﺎزي ﺳﻄﺢ ﺑﺎﻻ ،اﻏﻠﺐ ﺗﻮاﺑﻊ ﺧﺎﺻﻲ را ﺑﺮاي ﻣﺪﻳﺮﻳﺖ ﻓﺎﻳﻞ ﻓﺮاﻫﻢ ﻣﻲﻛﻨﻨﺪ و از اﻳﻨﺮو،
ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﺎن از ﺗﻮاﺑﻊ داس ﺑﻲﻧﻴﺎز ﻣﻲﺷﻮﻧﺪ .اﻣﺎ ،ﻛﺴﺎﻧﻲ ﻛﻪ ﺑﺎ زﺑﺎن اﺳﻤﺒﻠﻲ ﺑﺮﻧﺎﻣﻪ ﻣﻲﻧﻮﻳﺴﻨﺪ ،ﻛﻤﺎﻛﺎن ﺑﻪ ﺗﻮاﺑﻊ داس ﻧﻴﺎز ﺧﻮاﻫﻨﺪ داﺷﺖ.
ﺑﺮاي ﻣﺪﻳﺮﻳﺖ ﻓﺎﻳﻞ ﺑﺎﻳﺪ ﺗﻮاﺑﻌﻲ ﺑﺮاي اﻳﺠﺎد ،ﺣﺬف ،ﺑﺎزﻛﺮدن ،ﺑﺴﺘﻦ ،ﺧﻮاﻧﺪن و ﻧﻮﺷﺘﻦ در ﻓﺎﻳﻞ ﻓﺮاﻫﻢ ﺷﻮد ،ﻛﻪ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ داس ،ﺟﺰو ﺗﻮاﺑﻊ وﻗﻔﻪي ،21H
اﻳﻦ ﺗﻮاﺑﻊ را ﻓﺮاﻫﻢ ﻧﻤﻮده اﺳﺖ .ﻫﻤﺎﻧﻨﺪ ورودي-ﺧﺮوﺟﻲ ﻛﺎراﻛﺘﺮ ،ﺑﺮاي ﻣﺪﻳﺮﻳﺖ ﻓﺎﻳﻠﻬﺎ ﻫﻢ دو دﺳﺘﻪ ﺗﻮاﺑﻊ ﺳﺎزﮔﺎر ﺑﺎ ) CP/Mﺗﻮاﺑﻊ (FCBو ﺳﺎزﮔﺎر ﺑﺎ ) Unixﺗﻮاﺑﻊ
دﺳﺘﻪ (1در داس وﺟﻮد دارد ،ﻛﻪ در اداﻣﻪ ﺑﻪ آﻧﻬﺎ ﻣﻲﭘﺮدازﻳﻢ.
2-19ﺗﻮاﺑﻊ FCB
اﻳﻦ ﺗﻮاﺑﻊ ﺳﺎزﮔﺎر ﺑﺎ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ CP/Mﻫﺴﺘﻨﺪ و ﻣﺒﺘﻨﻲ ﺑﺮ ﺳﺎﺧﺘﺎر 2FCBﻫﺴﺘﻨﺪ .اﻃﻼﻋﺎت ﻣﻮرد ﻧﻴﺎز در ﻣﻮرد ﻓﺎﻳﻞ در زﻣﺎن ﭘﺮدازش آن در ﺳﺎﺧﺘﺎر
FCBﻗﺮار دارﻧﺪ ﻛﻪ داس از آﻧﻬﺎ اﺳﺘﻔﺎده ﻣﻲﻛﻨﺪ و ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲ ﺑﺎﻳﺪ ﺳﺎﺧﺘﻤﺎن دادهي FCBرا در ﺑﺮﻧﺎﻣﻪ داﺷﺘﻪ ﺑﺎﺷﺪ FCB .ﻳﻚ ﺳﺎﺧﺘﺎر ﺳﻠﺴﻠﻪﻣﺮاﺗﺒﻲ ﺑﺮاي ﻓﺎﻳﻠﻬﺎ
ﻧﻴﺴﺖ و ﻟﺬا ﺑﺎ اﻳﻦ روش ﻓﻘﻂ ﻣﻲﺗﻮان ﺑﻪ ﻓﺎﻳﻠﻬﺎي ﻓﻬﺮﺳﺖ ﺟﺎري دﺳﺘﺮﺳﻲ ﭘﻴﺪا ﻧﻤﻮد .اﻣﺎ ،وﺟﻮد FCBدر ﺑﺮﻧﺎﻣﻪ ،ﺑﺎﻋﺚ دﺳﺘﺮﺳﻲ آﺳﺎن و ﺳﺮﻳﻊ ﺑﻪ اﻃﻼﻋﺎت ﻓﺎﻳﻞ ،ﻧﻈﻴﺮ
ﺗﺎرﻳﺦ ،زﻣﺎن ،و اﻧﺪازه و ﻏﻴﺮه ﻣﻲﺷﻮد .ﺳﺎﺧﺘﻤﺎن داده 37 ،FCBﺑﺎﻳﺖ ﺑﻮده و ﺣﺎوي اﻗﻼم اﻃﻼﻋﺎﺗﻲ زﻳﺮ اﺳﺖ:
Address Contents Size
+00H )Device name(0: A, 1:B ... 1 byte
+01H File name 8 bytes
+09H )File mode (extention 3 bytes
+0CH Current block number 1 word
+0EH Data record size 1 word
+10H File size 2 words
+14H Modification date 1 word
+16H Modification time 1 word
+18H Reserved 1 word
+20H Current data record number 1 byte
+21H Data record no. for random access 2 words
ﻧﺸﺎﻧﻲ FCBدر زوج ﺛﺒﺎت ES:DIﺑﻪ ﺗﺎﺑﻊ 29Hﻛﻪ در اداﻣﻪ ذﻛﺮ ﻣﻲﺷﻮد ،ارﺳﺎل ﻣﻲﺷﻮد ،ﺗﺎ FCBرا ﺑﻪ ﻳﻚ ﻓﺎﻳﻞ ﻛﻪ ﻧﺎم آن در DS:SIﻗﺮار داده
ﻣﻲﺷﻮد ،ﻣﺮﺗﺒﻂ ﻣﻲﻛﻨﺪ.
اﻣﺎ ﺗﻮاﺑﻊ FCBﻋﺒﺎرﺗﻨﺪ از:
Function Purpose
0FH: Open file
10H: Close file
13H: Delete file
14H: Sequential read
15H: Sequential write
16H: Create file
17H: Rename file
1AH: Set DTA* address
21H: )Random read (of record
22H: )Random write (of record
23H: Determine file size
24H: Set record number for random access
_________________________________________________________________________________
handle function ١
File Control Block ٢
2-19 ﻓﺼﻞ :19ﻣﺪﻳﺮﻳﺖ ﻓﺎﻳﻞ در داس
* ﺑﺮاي ﻓﺎﻳﻠﻬﺎي داراي رﻛﻮرد ﺑﺰرﮔﺘﺮ از 128ﺑﺎﻳﺖ ،ﺑﺎﻳﺪ ﻳﻚ ﺑﺎﻓﺮ ﺑﺮاي رﻛﻮرد ﺑﻪ ﻋﻨﻮان 1DTAﻣﺸﺨﺺ ﺷﻮد ،ﺗﺎ ﺑﻪ ﺟﺎي DTAﭘﻴﺶﻓﺮض ،اﺳﺘﻔﺎده
ﺷﻮد.
3-19ﺗﻮاﺑﻊ دﺳﺘﻪ
در داس ﻧﮕﺎرش 2.0ﺑﻪ ﺑﻌﺪ ،اﻳﻦ ﻣﻔﻬﻮم ﻣﻌﺮﻓﻲ ﺷﺪ و ﻫﻤﺎن ﻣﻔﻬﻮﻣﻲ اﺳﺖ ﻛﻪ در ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ Unixﻫﻢ وﺟﻮد دارد .ﺑﻪ ازاي ﻫﺮ ﻓﺎﻳﻞ در ﻣﻮﻗﻊ ﺑﺎزﻛﺮدن
آن ﻳﻚ دﺳﺘﻪ)ﻳﻚ ﺷﻤﺎرهي ﻋﺪدي( ﺑﺮﮔﺮداﻧﺪه ﻣﻲﺷﻮد ﻛﻪ ﺑﺮاي ارﺟﺎﻋﺎت ﺑﻌﺪي ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﻲﮔﻴﺮد و ﻣﺸﻜﻞ ﺗﻮاﺑﻊ FCBرا ﻧﺪارد .ﻳﻌﻨﻲ ﻣﻲﺗﻮان ﺑﻪ ﻓﺎﻳﻠﻬﺎي
ﻣﻮﺟﻮد در ﻓﻬﺮﺳﺘﻬﺎ دﺳﺘﺮﺳﻲ ﭘﻴﺪا ﻧﻤﻮد و ﺳﺎﺧﺘﺎر ﺳﻠﺴﻠﻪﻣﺮاﺗﺒﻲ ﻓﺎﻳﻠﻬﺎ ﻧﻴﺰ ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲﺷﻮد.
اﻳﻦ روش ﻧﻴﺎزﻣﻨﺪ ﻧﮕﻬﺪاري ﺳﺎﺧﺘﻤﺎن دادهي FCBدر ﺑﺮﻧﺎﻣﻪ ﻧﻴﺴﺖ .ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ،اﻃﻼﻋﺎﺗﻲ را ﺑﻪازاي ﻫﺮ ﻓﺎﻳﻞ ﭘﺲ از ﺑﺎزﻛﺮدن آن در ﺑﺎﻓﺮﻫﺎي داﺧﻠﻲ
ﺧﻮد ﻧﮕﻬﺪاري ﻣﻲﻛﻨﺪ .ﺑﻪ اﻳﻦ دﻟﻴﻞ در ﺑﺎزﻛﺮدن ﻓﺎﻳﻠﻬﺎ ﻣﺤﺪودﻳﺖ وﺟﻮد دارد .ﺗﻌﺪاد ﻓﺎﻳﻠﻬﺎي ﺑﺎز را ﻣﻲﺗﻮان در CONFIG.SYSﺑﺎ ﻣﺘﻐﻴﺮ FILESﻣﺸﺨﺺ ﻧﻤﻮد ،ﻛﻪ
ﺣﺪاﻛﺜﺮ ﻣﻲﺗﻮاﻧﺪ 255ﺑﺎﺷﺪ:
FILES=n
ﺗﻮاﺑﻊ دﺳﺘﻪاي ﻛﻪ در ﺑﺨﺶ ﻗﺒﻞ ﻣﻌﺮﻓﻲ ﺷﺪ ،ﻫﻢ ﺑﺎ ﻟﻮازم ورودي-ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد و ﻫﻢ ﺑﺎ ﻓﺎﻳﻠﻬﺎ ﻛﺎر ﻣﻲﻛﻨﻨﺪ:
Function Purpose
3CH: Create file
3DH: Open file
3EH: Close file
42H: Move file pointer/determine file size
43H: Read/write file attribute
56H: Rename file
57H/00H: Read write modification and date/time of file
57H/01H: Read write modification and date/time of file
5AH: Create temporary file
5BH: Create new file
5CH/00H: Release protected file range
5CH: Extended open function
_________________________________________________________________________________
Disk Transfer Area ١
ﻓﺼﻞ :20دﺳﺘﺮﺳﻲ ﺑﻪ ﻓﻬﺮﺳﺖ داس
)(Accessing DOS Directory
1-20ﻣﻘﺪﻣﻪ
ﺗﻌﺪادي از ﺗﻮاﺑﻊ داس ﺑﺮاي ﻛﺎرﻛﺮدن ﺑﺎ ﻓﻬﺮﺳﺖ 1و ﺟﺴﺘﺠﻮي ﻓﺎﻳﻠﻬﺎ 2ﻫﺴﺘﻨﺪ .ﺳﺎﺧﺘﺎر ﺳﻠﺴﻠﻪﻣﺮاﺗﺒﻲ ﻓﺎﻳﻠﻬﺎ و ﻓﻬﺮﺳﺖ ،در DOS 2.0ﻣﻌﺮﻓﻲ ﺷﺪ و ﺑﻪ اﻳﻦ
وﺳﻴﻠﻪ ﻣﻲﺗﻮان دﻳﺴﻚ را ﺑﻪ ﻓﻬﺮﺳﺘﻬﺎﻳﻲ ﺑﻪﺻﻮرت ﻣﻨﻄﻘﻲ ﺗﻘﺴﻴﻢ ﻧﻤﻮد و ﺳﺎﺧﺘﺎر درﺧﺖ ﻓﻬﺮﺳﺖ 3را اﻳﺠﺎد ﻛﺮد:
root directory
\
BorlandC BPascal
در درﺧﺖ ﻓﻬﺮﺳﺖ ،ﺗﻌﺪاد زﻳﺮﻓﻬﺮﺳﺘﻬﺎ 4ﺑﻪﺻﻮرت ﭘﻮﻳﺎ ﺗﻐﻴﻴﺮ ﻣﻲﻛﻨﺪ .ﻟﺬا ﺗﻮاﺑﻊ زﻳﺮ ﻣﻮرد ﻧﻴﺎز اﺳﺖ:
(1اﺿﺎﻓﻪ ﻛﺮدن ورودي ،5ﻣﻌﺎدل ﻓﺮﻣﺎن MDدر ﻣﺤﻴﻂ ﻓﺮﻣﺎن داس :ﺗﺎﺑﻊ 39Hوﻗﻔﻪي 21H
(2ﺣﺬف ﻛﺮدن ورودي ،ﻣﻌﺎدل ﻓﺮﻣﺎن RDدر ﻣﺤﻴﻂ ﻓﺮﻣﺎن داس :ﺗﺎﺑﻊ 3AHوﻗﻔﻪي 21H
(3ﺗﻐﻴﻴﺮ ﻓﻬﺮﺳﺖ ﺟﺎري ،ﻣﻌﺎدل ﻓﺮﻣﺎن CDدر ﻣﺤﻴﻂ ﻓﺮﻣﺎن داس :ﺗﺎﺑﻊ 3BHوﻗﻔﻪي 21H
(4ﺗﻐﻴﻴﺮ دﻳﺴﻚ دراﻳﻮ ﭘﻴﺶﻓﺮض ،ﻣﻌﺎدل A:ﻳﺎ C:در ﻣﺤﻴﻂ ﻓﺮﻣﺎن داس :ﺗﺎﺑﻊ 0EHوﻗﻔﻪي 21H
در ﻣﻮﻗﻊ ﻓﺮﻣﺖ ﻛﺮدن ﻫﺮ دﻳﺴﻜﺖ ،ﺑﺨﺸﻬﺎي 19ﺗﺎ 32ﺑﻪ ﻓﻬﺮﺳﺖ رﻳﺸﻪ ﺗﺨﺼﻴﺺ داده ﻣﻲﺷﻮد و در ﻫﺮ ﺑﺨﺶ ،اﻃﻼﻋﺎت 15ورودي ﻓﻬﺮﺳﺖ ﻧﮕﻬﺪاري
ﻣﻲﺷﻮد .ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ ﺑﺮ روي ﻓﻬﺮﺳﺖ رﻳﺸﻪ ﻣﻲﺗﻮان ﺣﺪاﻛﺜﺮ 210ﻓﺎﻳﻞ ﻧﮕﻬﺪاري ﻧﻤﻮد .در ﻣﻮرد دﻳﺴﻚ ﺳﺨﺖ ﻫﻢ ﺑﻪ ﺻﻮرﺗﻲ ﻣﺸﺎﺑﻪ اﺳﺖ و در ﻫﺮ ﺣﺎل در ﻣﻮرد ﺗﻌﺪاد
ﻓﺎﻳﻠﻬﺎ در ﻓﻬﺮﺳﺖ رﻳﺸﻪ ﻣﺤﺪودﻳﺖ وﺟﻮد دارد )از ﺑﺮﻧﺎﻣﻪي Norton DiskEditﻣﻲﺗﻮان ﺑﺮاي دﻳﺪن اﻃﻼﻋﺎت ﻓﻬﺮﺳﺘﻬﺎ اﺳﺘﻔﺎده ﻧﻤﻮد( .در ﻫﺮ ورودي ﻓﻬﺮﺳﺖ،
اﻃﻼﻋﺎﺗﻲ ﻧﻈﻴﺮ ﻣﻮارد زﻳﺮ در ﻣﻮرد ﻓﺎﻳﻠﻬﺎ وﺟﻮد دارد:
Name(8 char) Ext(3 char) Attribute(1 byte) Date Time ... First Cluster of File in FAT
ﺑﻪ ازاي ﻫﺮ زﻳﺮﻓﻬﺮﺳﺖ ،ﻳﻚ ﻓﺎﻳﻞ ﺑﺮ روي دﻳﺴﻚ ﻧﮕﻬﺪاري ﻣﻲﺷﻮد ،و ﻫﻤﺎن ﺳﺎﺧﺘﺎر ﻓﻮق ﺑﺮاي ﻓﺎﻳﻠﻬﺎ در آن ﻧﻴﺰ رﻋﺎﻳﺖ ﻣﻲﺷﻮد .وﻟﻲ در ﻣﻮرد زﻳﺮﻓﻬﺮﺳﺘﻬﺎ،
ﻣﺤﺪودﻳﺘﻲ در ﻣﻮرد ﺗﻌﺪاد ﻓﺎﻳﻠﻬﺎ در آن ﻧﺪارﻳﻢ.
ﺗﺎﺑﻊ 47Hﺑﺮاي ﻳﺎﻓﺘﻦ داﻳﺮﻛﺘﻮري ﺟﺎري اﺳﺖ و ﻣﺴﻴﺮ ﻛﺎﻣﻞ 6ﻓﻬﺮﺳﺖ ﺟﺎري را ﺑﺮﻣﻲﮔﺮداﻧﺪ .دراﻳﻮ ﻣﻮردﻧﻈﺮ ﺑﺎﻳﺪ در ﺛﺒﺎت DLﻣﺸﺨﺺ ﺷﻮد:
2-20ﺟﺴﺘﺠﻮي ﻓﺎﻳﻠﻬﺎ
دو دﺳﺘﻪ ﺗﺎﺑﻊ ﺑﺮاي ﺟﺴﺘﺠﻮي ﻓﺎﻳﻠﻬﺎ وﺟﻮد دارد:
_________________________________________________________________________________
directory ١
file search ٢
directory tree ٣
subdirectory ٤
entry ٥
full path ٦
2-19 ﻓﺼﻞ :19ﻣﺪﻳﺮﻳﺖ ﻓﺎﻳﻞ در داس
(1ﺗﻮاﺑﻊ : FCBﺗﺎﺑﻊ 11Hﺑﺮاي ﻳﺎﻓﺘﻦ ﻧﺨﺴﺘﻴﻦ ﻓﺎﻳﻞ) (FindFirstو ﺗﺎﺑﻊ 12Hﺑﺮاي ﻳﺎﻓﺘﻦ ﺑﻌﺪي)(FindNext
(2ﺗﻮاﺑﻊ دﺳﺘﻪ :ﺗﺎﺑﻊ 4EHﺑﺮاي ﻳﺎﻓﺘﻦ ﻧﺨﺴﺘﻴﻦ ﻓﺎﻳﻞ) (FindFirstو ﺗﺎﺑﻊ 4FHﺑﺮاي ﻳﺎﻓﺘﻦ ﺑﻌﺪي)(FindNext
ﺟﺴﺘﺠﻮ ﺑﺮاي ﻓﺎﻳﻠﻬﺎ ﺑﺮاﺳﺎس ﻣﺸﺨﺼﻪ 1آن و ﻧﻴﺰ ﻳﻚ اﻟﮕﻮ (*.TXT) 2اﻧﺠﺎم ﻣﻲﺷﻮد .ﺑﻪ ازي ﻫﺮ ﻓﺎﻳﻞ در ورودي ﻓﻬﺮﺳﺖ ،ﻳﻚ ﺑﺎﻳﺖ ﺑﻪﻋﻨﻮان ﻣﺸﺨﺼﻪ
وﺟﻮد دارد ﻛﻪ در ﺟﺴﺘﺠﻮ ﻣﻮرد ﻣﻘﺎﻳﺴﻪ ﻗﺮار ﻣﻲﮔﻴﺮد .اﻧﻮاع ﻣﺸﺨﺼﻪي ﻓﺎﻳﻠﻬﺎ ﺑﻪﺻﻮرت زﻳﺮ اﺳﺖ:
* روﺷﻲ ﻛﻪ در Win95ﺑﺮاي ﭘﻴﺎدهﺳﺎزي ﻧﺎم ﻃﻮﻻﻧﻲ ﻓﺎﻳﻠﻬﺎ 3اﺳﺘﻔﺎده ﺷﺪه ،اﺳﺘﻔﺎده از ﻫﻤﻴﻦ ﺑﺎﻳﺖ ﻣﺸﺨﺼﻪ ﻓﺎﻳﻠﻬﺎ در ﻓﻬﺮﺳﺘﻬﺎ اﺳﺖ .ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ ﻛﻪ در
ﻧﺨﺴﺘﻴﻦ ورودي ،ﺑﺨﺸﻲ از ﻧﺎم ﺑﺎ ﻣﺸﺨﺼﻪي ﻋﺎدي و اداﻣﻪي ﻧﺎم در ورودﻳﻬﺎي دﻳﮕﺮ ﺑﺎ ﻣﺸﺨﺼﻪي رزرو اﺳﺖ .ﺑﺮاي ﻣﺜﺎل اﮔﺮ ﻧﺎم ﻓﺎﻳﻞ
PCSystemProgramming.TXTﺑﺎﺷﺪ ،ﺗﻘﺮﻳﺒﺎً ﺑﻪﺻﻮرت زﻳﺮ ﺧﻮاﻫﺪ ﺑﻮد:
~
1st entry with normal attribute: PCSyst 1.TXT
2nd entry with reserved attribute: emProgra.---
3rd entry with reserved attribute: mming.---
_________________________________________________________________________________
attribute ١
wildcard ٢
long file name ٣
ﻓﺼﻞ :22ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪ
)(RAM Management
Function Purpose
48H Allocate memory
49H Free memory
4AH Change size of a memory block
58H Read/set memory management model
ﺧﻮد داس ﻫﻢ ﺑﻮﺳﻴﻠﻪي ﺗﺎﺑﻊ ،Execﺑﺮاي ﺑﺎرﻛﺮدن ﺑﺮﻧﺎﻣﻪﻫﺎ در ﺣﺎﻓﻈﻪ ،ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ 48Hﺑﺮاي ﺑﺮﻧﺎﻣﻪ ﺣﺎﻓﻈﻪ ﺗﺨﺼﻴﺺ ﻣﻲدﻫﺪ و ﭘﺲ از ﭘﺎﻳﺎن اﺟﺮاي
ﺑﺮﻧﺎﻣﻪ ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ 49Hآﻧﺮا آزاد ﻣﻲﻛﻨﺪ .ﻣﻘﺪار ﺣﺎﻓﻈﻪي ﺗﺨﺼﻴﺺ داده ﺷﺪه ﺑﻪ ﻧﻮع ﺑﺮﻧﺎﻣﻪ ﺑﺴﺘﮕﻲ دارد .ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻫﺎي .COMﻛﻞ ﺣﺎﻓﻈﻪ رزرو ﻣﻲﺷﻮد و
ﭼﻨﺎﻧﭽﻪ ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﻛﻞ ﺣﺎﻓﻈﻪ ﻧﻴﺎز ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ ،ﺑﺎﻳﺪ اﺑﺘﺪا ﻣﺎﺑﻘﻲ ﺣﺎﻓﻈﻪ را آزاد ﻧﻤﺎﻳﺪ ،وﮔﺮﻧﻪ ﺣﺎﻓﻈﻪاي آزاد ﻧﺨﻮاﻫﺪ ﻣﺎﻧﺪ .اﻣﺎ ،ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻫﺎي .EXEﻣﻴﺰان ﺣﺎﻓﻈﻪاي ﻛﻪ
ﺗﻮﺳﻂ ﺗﺎﺑﻊ Execﺗﺨﺼﻴﺺ داده ﻣﻲﺷﻮد ،ﻫﻤﺎن ﻣﻘﺪاري اﺳﺖ ﻛﻪ در ﺳﺮآﻳﻨﺪ ﻓﺎﻳﻞ .EXEﻣﺸﺨﺺ ﺷﺪه اﺳﺖ .اﮔﺮ Execﻧﺘﻮاﻧﺪ ﺑﻪ اﻧﺪازهي ﻣﺸﺨﺺ ﺷﺪه در ﺳﺮآﻳﻨﺪ
ﻓﺎﻳﻞ .EXEﺣﺎﻓﻈﻪ ﺗﺨﺼﻴﺺ دﻫﺪ ،ﭘﻴﻐﺎم " "Insufficent memoryﻳﺎ " "Program too big to fit in memoryداده و ﺑﺮﻧﺎﻣﻪ را اﺟﺮا ﻧﻤﻲﻛﻨﺪ .ﻋﻼوه
ﺑﺮ ﺣﺎﻓﻈﻪاي ﻛﻪ Execﺑﺮاي ﺑﺮﻧﺎﻣﻪﻫﺎ ﺗﺨﺼﻴﺺ ﻣﻲدﻫﺪ ،ﺧﻮد ﺑﺮﻧﺎﻣﻪﻫﺎ ﻫﻢ ﻣﻲﺗﻮاﻧﻨﺪ ﺑﻪﻃﻮر ﭘﻮﻳﺎ ﺣﺎﻓﻈﻪ ﺗﺨﺼﻴﺺ دﻫﻨﺪ.
ﺗﺨﺼﻴﺺ ﺣﺎﻓﻈﻪ ﺑﺎ ﺗﺎﺑﻊ :48Hاﮔﺮ از ﻳﻚ زﺑﺎن ﺳﻄﺢ ﺑﺎﻻ ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ اﺳﺘﻔﺎده ﻣﻲﻛﻨﻴﻢ ،ﻣﺸﻜﻠﻲ ﺑﺮاي ﺗﺨﺼﻴﺺ ﺣﺎﻓﻈﻪ ﻧﺪارﻳﻢ .زﻳﺮا ،زﺑﺎﻧﻬﺎي
ﺳﻄﺢ ﺑﺎﻻ از ﻳﻚ ﺳﺎﺧﺘﺎر heapاﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ و در اﺑﺘﺪا ﺑﻪ ﻣﻴﺰان ﻣﻮرد ﻧﻴﺎز ،ﻛﻪ در ﺳﺮآﻳﻨﺪ ﻓﺎﻳﻞ .EXEﻣﺸﺨﺺ ﻣﻲﺷﻮد ،ﺣﺎﻓﻈﻪ ﺗﺨﺼﻴﺺ داده و در ﺑﺮﻧﺎﻣﻪ ﺑﺎ روش
ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪي ﻣﺴﺘﻘﻞ از ﺗﻮاﺑﻊ داس ،آﻧﺮا ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺗﺨﺼﻴﺺ ﻣﻲدﻫﻨﺪ ،و دﺳﺘﻮرات ﻣﺮﺑﻮط ﺑﻪ ﺗﺨﺼﻴﺺ ﺣﺎﻓﻈﻪي ﭘﻮﻳﺎ ،از اﻳﻦ ﺣﺎﻓﻈﻪي heapاﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ .اﻣﺎ ،در
ﺑﺮﻧﺎﻣﻪﻫﺎي زﺑﺎن اﺳﻤﺒﻠﻲ ،ﺑﺎﻳﺪ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲ ﺗﺨﺼﻴﺺ ﺣﺎﻓﻈﻪ را ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ 48Hاﻧﺠﺎم دﻫﺪ .ﺑﺮاي ﻓﺮاﺧﻮاﻧﻲ اﻳﻦ ﺗﺎﺑﻊ ﺑﺎﻳﺪ اﻧﺪازهي ﺑﻠﻮك ﺣﺎﻓﻈﻪ در ﺛﺒﺎت BX
ﻣﺸﺨﺺ ﺷﻮد ،ﻛﻪ ﺑﺮاﺳﺎس ﭘﺎراﮔﺮاف) 16ﺑﺎﻳﺖ( اﺳﺖ و ﻣﻲﺗﻮاﻧﺪ ﺣﺪاﻗﻞ 16) 1Hﺑﺎﻳﺖ( و ﺣﺪاﻛﺜﺮ ) 1111Hﻳﻚ ﻗﻄﻌﻪي (64KBﺑﺎﺷﺪ .در ﺑﺎزﮔﺸﺖ ،ﺛﺒﺎت AX
ﺣﺎوي ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪ ﺑﻠﻮك ﺣﺎﻓﻈﻪي ﺗﺨﺼﻴﺺ داده ﺷﺪه اﺳﺖ .ﻣﺜﻼً اﮔﺮ ﻳﻚ ﭘﺎراﮔﺮاف ﺣﺎﻓﻈﻪ درﺧﻮاﺳﺖ ﺷﻮد ،ﺑﻠﻮك ﺗﺨﺼﻴﺺ داده ﺷﺪه ،در ﻣﺤﺪودهي AX:0000ﺗﺎ
AX:000Fﺧﻮاﻫﺪ ﺑﻮد.
ﺗﻌﻴﻴﻦ ﻣﻴﺰان ﺣﺎﻓﻈﻪي ﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ :ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ﻣﻲﺗﻮان از ﻫﻤﺎن ﺗﺎﺑﻊ 48Hاﺳﺘﻔﺎده ﻧﻤﻮد .ﻣﻘﺪار (16*64KB) 0FFFFHدر BX
ﻗﺮار داده ﺷﺪه و ﺳﭙﺲ 48Hﻓﺮاﺧﻮاﻧﻲ ﺷﻮد .در ﭘﺎﺳﺦ ﭼﻮن داس ﻧﻤﻲﺗﻮاﻧﺪ اﻳﻦ ﻣﻘﺪار ﺣﺎﻓﻈﻪ ﺗﺨﺼﻴﺺ دﻫﺪ ،در BXﺗﻌﺪاد ﭘﺎراﮔﺮاﻓﻬﺎي آزاد را ﺑﺮﻣﻲﮔﺮداﻧﺪ.
ﺗﺎﺑﻊ :4AHاﻳﻦ ﺗﺎﺑﻊ اﻧﺪازهي ﻳﻚ ﺑﻠﻮك ازﻗﺒﻞ ﺗﺨﺼﻴﺺ داده ﺷﺪه را ﺗﻐﻴﻴﺮ ﻣﻲدﻫﺪ .ﺑﺮاي ﻛﻢﻛﺮدن اﻧﺪازهي ﺑﻠﻮك ،ﻣﺸﻜﻠﻲ ﭘﻴﺶ ﻧﻤﻲآﻳﺪ .اﻣﺎ ﺑﺮاي
اﻓﺰاﻳﺶ آن ،ﺑﻪ دﻟﻴﻞ آﻧﻜﻪ ﻣﻤﻜﻦ اﺳﺖ اداﻣﻪي ﺣﺎﻓﻈﻪ ،ﺗﻮﺳﻂ ﺳﺎﻳﺮ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺗﺨﺼﻴﺺ داده ﺷﺪه ﺑﺎﺷﺪ ،ﻣﻤﻜﻦ اﺳﺖ اﻣﻜﺎن اﻓﺰاﻳﺶ وﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ .در اﻳﻦ ﺻﻮرت
CF=1ﺷﺪه ﻛﻪ ﻧﺸﺎﻧﮕﺮ وﻗﻮع ﺧﻄﺎ اﺳﺖ و در ﺛﺒﺎت ،BXاﻧﺪازهي ﻗﺎﺑﻞ اﻓﺰاﻳﺶ ﺑﺮﮔﺮداﻧﺪه ﻣﻲﺷﻮد.
ﺗﺎﺑﻊ :58Hاﺳﺘﺮاﺗﮋيﻫﺎي ﻣﺨﺘﻠﻒ ﺗﺨﺼﻴﺺ ﺣﺎﻓﻈﻪ 2را ﻣﻲﺗﻮان ﺑﺎ اﻳﻦ ﺗﺎﺑﻊ ﺗﻨﻈﻴﻢ ﻧﻤﻮد .اﻧﻮاع اﺳﺘﺮاﺗﮋيﻫﺎ ﻋﺒﺎرﺗﻨﺪ از:
First Fit: Use first memory block large enough
Best Fit: Use smallest memory block large enough
Last Fit: Use high part of last usable memory block
_________________________________________________________________________________
device drivers ١
allocation strategy ٢
2-22 ﻓﺼﻞ :22ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪ
3-22اﺳﺘﻔﺎده از UMB
ﺑﺮاي اﺳﺘﻔﺎده از UMBsدر ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪي ﻣﻌﻤﻮﻟﻲ و در ﺻﻮرت ﻓﻌﺎل ﺷﺪن UMBدر ،CONFIG.SYSﺑﺎ ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ 48Hﻣﻤﻜﻦ اﺳﺖ
ﻳﻚ ﺑﻠﻮك ﺣﺎﻓﻈﻪ ﻛﻪ ﺟﺰو UMBsاﺳﺖ ﺑﺮﮔﺮداﻧﺪه ﺷﻮد ،ﻳﺎ آﻧﻜﻪ ﺟﺰو ﺣﺎﻓﻈﻪي ﻣﺘﻌﺎرف ﺑﺎﺷﺪ .ﺑﺮاي ﺗﺸﺨﻴﺺ اﻳﻨﻜﻪ ﺑﻠﻮك ﺑﺮﮔﺮداﻧﺪه ﺷﺪه UMB ،اﺳﺖ ﻳﺎ ﻣﺘﻌﺎرف،
ﻛﺎﻓﻲ اﺳﺖ ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪي ﺑﺮﮔﺮداﻧﺪه ﺷﺪه در AXﭼﻚ ﺷﻮد .اﮔﺮ ﺑﺎﻻﺗﺮ از A000Hﺑﺎﺷﺪ UMB ،اﺳﺖ .زﻳﺮﺗﻮاﺑﻊ ﺗﺎﺑﻊ ،58Hﻛﺎرﻫﺎي ﻣﻮرد ﻧﻴﺎز در اﻳﻦ زﻣﻴﻨﻪ را
اﻧﺠﺎم ﻣﻲدﻫﻨﺪ .اﻣﺎ ﻛﺎر اﺻﻠﻲ ،58Hﺗﻨﻄﻴﻢ ﻳﺎ ﺑﺮرﺳﻲ ﻣﺪل ﺗﺨﺼﻴﺺ ﺣﺎﻓﻈﻪ اﺳﺖ:
Subfunction Description
00H Read memory model
01H Set memory model
02H Query UMB status
03H Set UMB status
ﻓﺼﻞ :23ﺗﺎﺑﻊ Exec
)(The Exec Function
1-23ﻣﻘﺪﻣﻪ
ﺗﺎﺑﻊ ﺷﻤﺎرهي 4BHداس ،داراي ﻧﺎم Execاﺳﺖ .اﻳﻦ ﺗﺎﺑﻊ در ﺣﻘﻴﻘﺖ ﺑﺎرﻛﻨﻨﺪه 1اﺳﺖ و ﺑﻪ ﻳﻚ ﺑﺮﻧﺎﻣﻪي اﺻﻠﻲ 2اﺟﺎزه ﻣﻲدﻫﺪ ﻛﻪ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﻓﺮﻋﻲ 3را
از دﻳﺴﻚ در ﺣﺎﻓﻈﻪ ﺑﺎر ﻧﻤﻮده و اﺟﺮا ﻛﻨﺪ .در ﺻﻮرﺗﻲ ﻛﻪ ﺑﺮﻧﺎﻣﻪي ﻓﺮﻋﻲ ﻳﻚ ﺑﺮﻧﺎﻣﻪي ﻣﻘﻴﻢ در ﺣﺎﻓﻈﻪ ) (TSRﻧﺒﺎﺷﺪ ،ﭘﺲ از ﭘﺎﻳﺎن اﺟﺮا ،ﺣﺎﻓﻈﻪي اﺷﻐﺎل ﺷﺪه ﺑﻮﺳﻴﻠﻪي
آن ،ﻛﻪ ﺑﻮﺳﻴﻠﻪي Execﺗﺨﺼﻴﺺ داده ﺷﺪه ،آزاد ﺧﻮاﻫﺪ ﺷﺪ.
ﺑﺮﻧﺎﻣﻪي ﻓﺮﻋﻲ ﻫﻢ ﻣﻲﺗﻮاﻧﺪ ﺑﺮﻧﺎﻣﻪي دﻳﮕﺮي را ﻓﺮاﺧﻮاﻧﻲ ﻧﻤﻮده و اﺟﺮا ﻛﻨﺪ و در واﻗﻊ ﺧﻮدش ﻳﻚ ﺑﺮﻧﺎﻣﻪي اﺻﻠﻲ ﺑﺎﺷﺪ .اﻳﻦ روش ﺗﺎ ﺟﺎﻳﻲ ﻛﻪ ﺣﺎﻓﻈﻪ آزاد
ﺑﺎﺷﺪ ،ﻣﻲﺗﻮاﻧﺪ اداﻣﻪ ﻳﺎﺑﺪ .ﻳﻚ ﻣﺜﺎل اﺻﻠﻲ از اﺟﺮاي ،Execﺑﺮﻧﺎﻣﻪي COMMAN.COMاﺳﺖ .وﻗﺘﻲ در ﺧﻂ ﻓﺮﻣﺎن ،ﺗﺎﻳﭗ ﻣﻲﻛﻨﻴﻢ BP ،BPدرﺣﻘﻴﻘﺖ ﻳﻚ
ﺑﺮﻧﺎﻣﻪي ﻓﺮﻋﻲ ﻧﺴﺒﺖ ﺑﻪ COMMAND.COMﺧﻮاﻫﺪ ﺑﻮد .در داﺧﻞ BPﻣﻲﺗﻮاﻧﻴﻢ DOS Shellﻛﻨﻴﻢ .در اﻳﻦ ﺻﻮرت ،ﻳﻚ ﻧﺴﺨﻪي دﻳﮕﺮ از
COMMAND.COMاﺟﺮا ﻣﻲﺷﻮد و اﻳﻦ ﻧﺴﺨﻪ ﻳﻚ ﺑﺮﻧﺎﻣﻪي ﻓﺮﻋﻲ ﻧﺴﺒﺖ ﺑﻪ BPﻣﻲﺷﻮد .در اﻳﻦ ﺷﺮاﻳﻂ در ﺧﻂ ﻓﺮﻣﺎن ﻣﻲﺗﻮاﻧﻴﻢ ﺑﺮﻧﺎﻣﻪﻫﺎي دﻳﮕﺮ را ﻓﺮاﺧﻮاﻧﻲ
ﻛﻨﻴﻢ ،ﻛﻪ آﻧﻬﺎ ﻧﺴﺒﺖ ﺑﻪ ،COMMAND.COMﻓﺮﻋﻲ ﺧﻮاﻫﻨﺪ ﺑﻮد...
COMMAND.COM Parent1
ﺑﺎزﮔﺸﺖ اﺟﺮاي BP
BP
Child1 = Parent2
ﺑﺎزﮔﺸﺖ DOS Shell
COMMAND.COM
Child2 = Parent3
ﺑﺎزﮔﺸﺖ اﺟﺮاي NC
NC
Child3
_________________________________________________________________________________
loader ١
parent program ٢
child program ٣
file pointer ٤
normal termination ٥
2-23 ﻓﺼﻞ :23ﺗﺎﺑﻊ Exec
اﮔﺮ ﺑﺮﻧﺎﻣﻪي اﺻﻠﻲ از ﻧﻮع .EXEﺑﺎﺷﺪ ،در ﺻﻮرﺗﻴﻜﻪ ﺣﺎﻓﻈﻪ ﺑﻪ اﻧﺪازهي ﻛﺎﻓﻲ آزاد ﺑﺎﺷﺪ ،ﻣﻲﺗﻮاﻧﺪ ﺑﺮﻧﺎﻣﻪﻫﺎي ﻓﺮﻋﻲ را اﺟﺮا ﻛﻨﺪ .اﻣﺎ ﺑﺮﻧﺎﻣﻪﻫﺎي .COM
ﭼﻮن ﻛﻞ ﺣﺎﻓﻈﻪ را اﺷﻐﺎل ﻣﻲﻛﻨﻨﺪ ،ﻧﻤﻲﺗﻮاﻧﻨﺪ ﺑﺮﻧﺎﻣﻪي دﻳﮕﺮي را اﺟﺮا ﻛﻨﻨﺪ ،ﻣﮕﺮ آﻧﻜﻪ ﻗﺒﻼً ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ 49Hﺣﺎﻓﻈﻪﻫﺎي ﻏﻴﺮﺿﺮور را آزاد ﻧﻤﺎﻳﻨﺪ.
AH = 4BH
AL = 0 or 3 )(0: File is executable, 3: File is overlay
)DS:DX = Address of .EXE or .COM program name(null-terminalted string
ES:BX = Address of parameter block
ﻓﺎﻳﻞ BATرا ﻧﻤﻲﺗﻮان ﺑﺎ اﻳﻦ روش ﻓﺮاﺧﻮاﻧﻲ ﻧﻤﻮد و ﺑﺎﻳﺪ COMMAND.COMرا ﺑﺎ ﭘﺎراﻣﺘﺮ ” “/Cﻓﺮاﺧﻮاﻧﻲ ﻧﻤﻮد:
ﺑﻠﻮك ﭘﺎراﻣﺘﺮ :3ﭘﺎراﻣﺘﺮﻫﺎ را ﻣﻲﺗﻮان از ﻃﺮﻳﻖ ﺑﻠﻮك ﭘﺎراﻣﺘﺮ ﺑﻪ ﺑﺮﻧﺎﻣﻪي ﻓﺮﻋﻲ ارﺳﺎل ﻧﻤﻮد .ﻧﺸﺎﻧﻲ ﺑﻠﻮك ﭘﺎراﻣﺘﺮ در ES:BXﺑﻪ ﺗﺎﺑﻊ Execارﺳﺎل
ﻣﻲﺷﻮد .ﺳﺎﺧﺘﺎر ﺑﻠﻮك ﭘﺎراﻣﺘﺮ ﺑﻪﺻﻮرت زﻳﺮ اﺳﺖ:
ﺑﻠﻮك ﻣﺤﻴﻂ :ﭘﺮدازﺷﮕﺮ ﻓﺮﻣﺎن و ﺳﺎﻳﺮ ﺑﺮﻧﺎﻣﻪﻫﺎ ،اﻃﻼﻋﺎﺗﻲ را از ﺑﻠﻮك ﻣﺤﻴﻂ ﺑﺪﺳﺖ ﻣﻲآورﻧﺪ ،ﻛﻪ ﻳﻚ ﺳﺮي رﺷﺘﻪ اﺳﺖ و داراي ﻧﺤﻮ زﻳﺮ اﺳﺖ و ﺑﺎ دﺳﺘﻮر
DOSSETﻣﻲﺗﻮان آﻧﺮا ﺗﻨﻈﻴﻢ ﻧﻤﻮد و ﺣﺪاﻛﺜﺮ ﻣﻲﺗﻮاﻧﺪ 32Kﺑﺎﺷﺪ:
Name = parameter
* ﻓﻴﻠﺪﻫﺎي 2و 3ﻧﺸﺎﻧﻲ ﭘﺎراﻣﺘﺮ ﻓﺮﻣﺎن را ﻣﺸﺨﺺ ﻣﻲﻛﻨﻨﺪ ﻛﻪ در ﻣﺒﺪأ PSP 80Hﺑﺮﻧﺎﻣﻪ ﻗﺮار ﻣﻲﮔﻴﺮد.
4-23وﻇﺎﻳﻒ EXEC
ﻛﺎر ﻣﻬﻢ ،Execﺗﺼﺤﻴﺢ ﻧﺸﺎﻧﻲﻫﺎي ﺟﺎﺑﺠﺎﭘﺬﻳﺮ 4ﺑﺮﻧﺎﻣﻪﻫﺎي EXEاﺳﺖ ،ﻛﻪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﻃﻼﻋﺎﺗﻲ اﻧﺠﺎم ﻣﻲﺷﻮد ﻛﻪ ﻛﺎﻣﭙﺎﻳﻠﺮ ﻳﺎ اﺳﻤﺒﻠﺮ در ﺳﺮآﻳﻨﺪ ﻓﺎﻳﻞ
EXEدر ﻗﺴﻤﺖ ﺟﺪول ﺟﺎﺑﺠﺎﻳﻲ 5ﻗﺮار داده اﺳﺖ .ﻛﺎر دﻳﮕﺮ ،ﻣﻘﺪاردﻫﻲ SS ،IP ،CSو SPاﺳﺖ .آﻧﮕﺎه ،ﺑﺮﻧﺎﻣﻪ را اﺟﺮا ﻣﻲﻛﻨﺪ ،ﻛﻪ اﻳﻦ ﻛﺎر ﺑﺎ ﻣﻘﺪاردﻫﻲ IPو ﭘﺮش
ﺑﻪ ﻧﺸﺎﻧﻲ اﺑﺘﺪاي ﻛﺪ اﺟﺮاﻳﻲ ﺑﺮﻧﺎﻣﻪ اﻧﺠﺎم ﻣﻲﺷﻮد .ﭘﺲ از اﺟﺮاي ﺑﺮﻧﺎﻣﻪ ،ﺑﺮاﺳﺎس ﻧﻮع ﺧﺎﺗﻤﻪي ﺑﺮﻧﺎﻣﻪ ﺑﻪ CFﻣﻘﺪار 0ﻳﺎ 1ﻣﻲدﻫﺪ .در ﻣﻮﻗﻊ ﻓﺮاﺧﻮاﻧﻲ ،Execاﮔﺮ
AL=3ﺑﺎﺷﺪ ،ﺑﻪ ﻣﻌﻨﻲ ﻫﻤﭙﻮﺷﺎ 6ﺑﻮدن ﻓﺎﻳﻞ EXEﻳﺎ COMاﺳﺖ و ﺑﻨﺎﺑﺮ اﻳﻦ آﻧﺮا در ﺣﺎﻓﻈﻪ ﺑﺎرﻣﻲﻛﻨﺪ ،وﻟﻲ آﻧﺮا اﺟﺮا ﻧﻤﻲﻛﻨﺪ ،ﺑﻠﻜﻪ ﭘﺲ از ﺑﺎرﻛﺮدن ،ﺑﻪ ﺑﺮﻧﺎﻣﻪي
_________________________________________________________________________________
command line ١
environment block ٢
paramter block ٣
relocatable ٤
relocation table ٥
overlay ٦
3-23 ﻓﺼﻞ :23ﺗﺎﺑﻊ Exec
ﻓﺮاﺧﻮاﻧﻨﺪه ﺑﺮﮔﺸﺖ ﻣﻲﺷﻮد .ﺑﺮﻧﺎﻣﻪﻫﺎي ﻫﻤﭙﻮﺷﺎ ،در ﻫﺮﺟﺎي ﺣﺎﻓﻈﻪ ﻛﻪ Execﺑﺨﻮاﻫﺪ ﺑﺎرﻧﻤﻲﺷﻮﻧﺪ ،ﺑﻠﻜﻪ در ﺟﺎﻳﻲ ﺑﺎر ﻣﻲﺷﻮﻧﺪ ﻛﻪ ﻓﺮاﺧﻮاﻧﻨﺪهي ،Execﻧﺸﺎﻧﻲ آﻧﺮا
ﺑﺪﻫﺪ .در اﻳﻦ ﺣﺎﻟﺖ ﺑﻠﻮك ﭘﺎراﻣﺘﺮ ﺷﺎﻣﻞ اﻃﻼﻋﺎت زﻳﺮ اﺳﺖ:
* :reloaction factorﻧﺸﺎﻧﻲ ﻗﻄﻌﻪي ﺑﺮﻧﺎﻣﻪي ﻓﺮاﺧﻮاﻧﻲﺷﺪه)ﻳﻜﻲ از ﻗﺴﻤﺘﻬﺎي ﻫﻤﭙﻮﺷﺎي ﺑﺮﻧﺎﻣﻪ( را ﺗﻨﻈﻴﻢ ﻣﻲﻛﻨﺪ و ﻓﻘﻂ ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻫﺎي EXE
ﻣﻌﻨﻲ دارد و ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻫﺎي COMﺻﻔﺮ اﺳﺖ.
ﺑﺮﻧﺎﻣﻪاي ﻛﻪ ﻫﻤﭙﻮﺷﺎ ﺑﺎﺷﺪ و ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ ﺑﺎرﺷﻮد ،ﻗﺒﻞ از آن PSPﻗﺮار ﻧﻤﻲﮔﻴﺮد .اﻳﻦ ﻛﺎر درﻣﻮرد ﺑﺮﻧﺎﻣﻪﻫﺎي COMﻣﺸﻜﻞآﻓﺮﻳﻦ اﺳﺖ .زﻳﺮا درﺣﺎﻟﺖ
ﻋﺎدي ﺑﺮﻧﺎﻣﻪ COMاز ﺑﺎﻳﺖ 100Hاﺟﺮا ﻣﻲﺷﻮد ،وﻟﻲ در اﻳﻦ ﺣﺎﻟﺖ ﭼﻮن PSPﺑﺎرﻧﻤﻲﺷﻮد ،ﻧﺸﺎﻧﻴﻬﺎي jumpﺑﺮﻧﺎﻣﻪي COMاﺷﺘﺒﺎه ﺧﻮاﻫﻨﺪ ﺑﻮد .از آﻧﺠﺎﻳﻲ ﻛﻪ
ﻫﻤﻪي دﺳﺘﻮرات jumpدﺳﺘﺮﺳﻲ ﺑﻪ دادهﻫﺎ در درون ﺑﺮﻧﺎﻣﻪي COMﻧﺴﺒﺖ ﺑﻪ ﻧﺸﺎﻧﻲ 100Hﻫﺴﺘﻨﺪ و ﻧﻪ ﺻﻔﺮ ،ﻧﻤﻲﺗﻮان دﺳﺘﻮر FAR CALLرا ﺑﺎ ﻗﻄﻌﻪاي ﻛﻪ
ﺑﺮﻧﺎﻣﻪ در آن ﺑﺎرﺷﺪه ﺑﻪﻋﻨﻮان ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪ و ﻣﻘﺪار ﺻﻔﺮ ﺑﻪﻋﻨﻮان ﻧﺸﺎﻧﻲ ﻣﺒﺪأ ،ﻓﺮاﺧﻮاﻧﻲ ﻧﻤﻮد .ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪ ﺑﺮاي FAR CALLﺑﺎﻳﺪ ﻧﺸﺎﻧﻲ ﻗﻄﻌﻪاي ﻛﻪ ﺑﺮﻧﺎﻣﻪ در آن
ﺑﺎرﺷﺪه ﻣﻨﻬﺎي ) 10Hﻃﻮل ﺳﺮآﻳﻨﺪ ﻓﺎﻳﻞ (COMو 100Hﺑﻪﻋﻨﻮان ﻣﺒﺪأ ﺑﺎﺷﺪ .اﮔﺮ ﺑﺮﻧﺎﻣﻪي COMﺑﻪﻋﻨﻮان ﻫﻤﭙﻮﺷﺎي ﻳﻚ ﺑﺮﻧﺎﻣﻪي دﻳﮕﺮ ﺑﺎﺷﺪ ،ﺑﺎﻳﺪ داراي
ورودﻳﻬﺎي ﻧﺸﺎﻧﻲ 1ﻏﻴﺮ از 100Hدر داﺧﻞ ﺧﻮد ﺑﺎﺷﺪ و ﻟﺬا ﻓﻘﻂ ﻛﺎﻓﻲ اﺳﺖ ﻧﺸﺎﻧﻲﻫﺎي ﻣﺒﺪأ دﺳﺘﻮرات FAR CALLﺗﻐﻴﻴﺮ داده ﺷﻮﻧﺪ.
* در ﺑﺮﻧﺎﻣﻪﻫﺎي ﻫﻤﭙﻮﺷﺎﻳﻲ ﻛﻪ ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي ﺑﻮرﻟﻨﺪ ﺗﺤﺖ داس اﻳﺠﺎد ﻣﻲﻛﻨﻨﺪ ،ﻳﻚ ” “Overlay Managerﺑﻪ ﺑﺮﻧﺎﻣﻪ ﻣﺘﺼﻞ ﻣﻲﺷﻮد ﻛﻪ ﻛﺎرﻫﺎي
ﻣﺪﻳﺮﻳﺘﻲ ﻣﻮرد ﻧﻴﺎز را اﻧﺠﺎم ﻣﻲدﻫﺪ و ﻧﺸﺎﻧﻴﻬﺎ را ﭘﺲ از ﺑﺎرﻛﺮدن در ﺣﺎﻓﻈﻪ ﺗﺼﺤﻴﺢ ﻣﻲﻛﻨﺪ.
_________________________________________________________________________________
entry address ١
ﻓﺼﻞ :25ﮔﺮداﻧﻨﺪهﻫﺎي وﺳﻴﻠﻪ
)(Device Drivers
1-25ﻣﻘﺪﻣﻪ
ﻳﻜﻲ از ﭘﻴﭽﻴﺪهﺗﺮﻳﻦ ﻛﺎرﻫﺎي ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﺳﻴﺴﺘﻢ ،ﻧﻮﺷﺘﻦ ﮔﺮداﻧﻨﺪهﻫﺎي وﺳﻴﻠﻪ (DD)1اﺳﺖ .ﮔﺮداﻧﻨﺪهﻫﺎي وﺳﻴﻠﻪ در داس ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﻟﻮازم ﺧﺎرﺟﻲ
ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﻲﮔﻴﺮﻧﺪ و ﺑﺮﻧﺎﻣﻪﻫﺎي ﻛﻮﭼﻜﻲ ﻫﺴﺘﻨﺪ ﻛﻪ وﺳﺎﻳﻞ ﻣﺨﺘﻠﻔﻲ ،از ﺻﻔﺤﻪﻛﻠﻴﺪ ﮔﺮﻓﺘﻪ ﺗﺎ CD-ROMرا ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲﻛﻨﻨﺪ .ﺑﻪ دﻟﻴﻞ ﺳﺎﺧﺘﺎر و
ﻣﺤﺪودﻳﺘﻬﺎي ﺧﺎص ،ﮔﺮداﻧﻨﺪهﻫﺎي وﺳﻴﻠﻪ را در داس ﺗﻨﻬﺎ ﺑﺎ زﺑﺎن اﺳﻤﺒﻠﻲ ﻣﻲﺗﻮان ﻧﻮﺷﺖ .در اﻳﻦ ﻓﺼﻞ ،ﺳﺎﺧﺘﺎر ﮔﺮداﻧﻨﺪهﻫﺎي وﺳﻴﻠﻪ را ﻣﻮرد ﻣﻄﺎﻟﻌﻪ ﻗﺮار ﻣﻲدﻫﻴﻢ.
در ،DOS 2.0ﻣﻔﻬﻮم DDﻣﻌﺮﻓﻲ ﺷﺪ و ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ اﻣﻜﺎن اﺳﺘﻔﺎده از EMSو HDﻓﺮاﻫﻢ ﺷﺪ .ﻳﻚ DDﺷﺎﻣﻞ اﻃﻼﻋﺎت وﺿﻌﻴﺖ و رواﻟﻬﺎﻳﻲ
ﺑﻪﻋﻨﻮان ﺗﻮاﺑﻊ ﮔﺮداﻧﻨﺪه اﺳﺖ .اﻳﻦ رواﻟﻬﺎ ﻣﺴﺌﻮل اﻧﺠﺎم وﻇﺎﻳﻒ ﻣﻮرد ﻧﻴﺎز DOSﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ وﺳﻴﻠﻪ ﻫﺴﺘﻨﺪ .ﺑﺮاي ﻧﻤﻮﻧﻪ ،ﮔﺮداﻧﻨﺪهي ﻳﻚ دﻳﺴﻚ ﺳﺨﺖ ،داراي
ﺗﻮاﺑﻌﻲ ﺑﺮاي ﺧﻮاﻧﺪن ،ﻧﻮﺷﺘﻦ ،و وارﺳﻲ ﺑﺨﺸﻬﺎ ﺑﺮ روي دﻳﺴﻚ اﺳﺖ.
ﮔﺮداﻧﻨﺪهﻫﺎي ﻧﻮﺷﺘﻪ ﺷﺪه ﺑﻮﺳﻴﻠﻪي ﻛﺎرﺑﺮ :ارﺗﺒﺎط داس ﺑﺎ DDﻣﺒﺘﻨﻲ اﺳﺖ ﺑﺮ ﻳﻚ ﺳﺎﺧﺘﻤﺎن داده و ﺑﺮﺧﻲ ﻓﺮاﺧﻮاﻧﻲ ﺗﻮاﺑﻊ ﺳﺎده ،ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﺎن زﺑﺎن
اﺳﻤﺒﻠﻲ ﻣﻲﺗﻮاﻧﻨﺪ ﺑﺮاي ﻫﺮوﺳﻴﻠﻪاي ﻳﻚ DDﺑﻨﻮﻳﺴﻨﺪ .ﻣﺘﺄﺳﻔﺎﻧﻪ ﺗﺤﺖ داس ﻧﻤﻲﺗﻮان DDرا ﺑﺎ زﺑﺎﻧﻬﺎي ﺳﻄﺢ ﺑﺎﻻ ﻧﻮﺷﺖDD .ﻫﺎ از ﺑﺮﺧﻲ ﺟﻬﺎت ﻣﺸﺎﺑﻪ ﺑﺮﻧﺎﻣﻪﻫﺎي
COMﻫﺴﺘﻨﺪ)ﻧﺸﺎﻧﻲﻫﺎي ﺟﺎﺑﺠﺎﭘﺬﻳﺮ ﻧﺪارﻧﺪ( ،اﻣﺎ از ﻧﺸﺎﻧﻲ 00Hﺷﺮوع ﻣﻲﺷﻮﻧﺪ ﻧﻪ ،100Hﻳﻌﻨﻲ ﻗﺒﻞ از آﻧﻬﺎ PSPﻗﺮار ﻧﻤﻲﮔﻴﺮد.
DDﻫﺎي ﻧﻮﺷﺘﻪ ﺷﺪه ﺑﻮﺳﻴﻠﻪي ﻛﺎرﺑﺮ ﺗﻮﺳﻂ داس و در ﻫﻨﮕﺎم ﺑﻮتﺷﺪن آن ،از ﻃﺮﻳﻖ اﻃﻼﻋﺎت ﻓﺎﻳﻞ CONFIG.SYSﻧﺼﺐ ﻣﻲﺷﻮﻧﺪ و ﻫﻤﺎﻧﻨﺪ
ﺑﺮﻧﺎﻣﻪﻫﺎي COMو EXEاز ﺧﻂ ﻓﺮﻣﺎن ﻗﺎﺑﻞ اﺟﺮا ﻧﻴﺴﺘﻨﺪ .ﺑﺮﺧﻲ DDﻫﺎ ﻧﻴﺰ در ﻫﺴﺘﻪي داس وﺟﻮد دارﻧﺪ و ﺑﻪﻃﻮر ﺧﻮدﻛﺎر ﻧﺼﺐ ﻣﻲﺷﻮﻧﺪ .اﻳﻨﻬﺎ ﻋﺒﺎرﺗﻨﺪ از:
.PRN ،AUX،CON ،$CLOCKﺑﻪ ﻋﻼوه ،ﮔﺮداﻧﻨﺪهﻫﺎي HDو FDﻫﻢ ﺑﻪﻃﻮر ﺧﻮدﻛﺎر ﻧﺼﺐ ﻣﻲﺷﻮﻧﺪ.
DDﻫﺎ ﺑﻪﻃﻮر ﺗﺮﺗﻴﺒﻲ در ﺣﺎﻓﻈﻪ ﺑﺎرﺷﺪه و ﺑﻪ ﻫﻤﺪﻳﮕﺮ ﻣﺮﺗﺒﻂ ﻣﻲﺷﻮﻧﺪ و ﺗﺸﻜﻴﻞ ﻳﻚ زﻧﺠﻴﺮه را ﻣﻲدﻫﻨﺪ .در ﺷﻜﻞ زﻳﺮ اﻳﻦ زﻧﺠﻴﺮه ﻧﺸﺎن داده ﺷﺪه اﺳﺖ:
NUL
NUL
اﻓﺰاﻳﺶ ﻧﺸﺎﻧﻲ ﺣﺎﻓﻈﻪ CON
CON
PRN ﭘﺲ از ﻧﺼﺐ ANSI.SYS
PRN
AUX
AUX
CLOCK CLOCK
CON
اﮔﺮ ﺑﺨﻮاﻫﻴﻢ ﮔﺮداﻧﻨﺪهي ﺟﺪﻳﺪي ﻧﺼﺐ ﻛﻨﻴﻢ ،ﺑﺎﻳﺪ دﺳﺘﻮري ﺑﻪﺷﻜﻞ زﻳﺮ در CONFIG.SYSﻗﺮار دﻫﻴﻢ:
DEVICE=NEWDD.DRV
_________________________________________________________________________________
device drivers ١
portable ٢
2-25 ﻓﺼﻞ :25ﮔﺮداﻧﻨﺪهﻫﺎي وﺳﻴﻠﻪ
ﺑﺮاي ﻣﺜﺎل ANSI.SYSﻛﻪ ﮔﺮداﻧﻨﺪهي ﺟﺪﻳﺪي را ﺑﺮاي ورودي-ﺧﺮوﺟﻲ ﻛﺎراﻛﺘﺮ ،و در واﻗﻊ ﻳﻚ CONﺟﺪﻳﺪ را ﻓﺮاﻫﻢ ﻣﻲﻛﻨﺪ ،ﺑﻪ ﺻﻮرت زﻳﺮ ﻧﺼﺐ
ﻣﻲﺷﻮد:
DEVICE=ANSI.SYS
ﺑﺎ ﻗﺮار ﮔﺮﻓﺘﻦ آن در زﻧﺠﻴﺮهي DDﻫﺎ ،ﻫﺮﮔﺎه ﻛﻪ از ﻃﺮﻳﻖ داس ﺑﺨﻮاﻫﻴﻢ ﻛﺎراﻛﺘﺮي را ﺑﺮ روي ﺻﻔﺤﻪ ﺑﻨﻮﻳﺴﻴﻢ ،داس ﭼﻮن زﻧﺠﻴﺮهي DDﻫﺎ را دﻧﺒﺎل
ﻣﻲﻛﻨﺪ ،اﺑﺘﺪا ﺗﺎﺑﻊ ﺗﻌﺮﻳﻒ ﺷﺪه در CONﺟﺪﻳﺪ را ﭘﻴﺪا ﻣﻲﻛﻨﺪ و آﻧﺮا اﺟﺮا ﻣﻲﻛﻨﺪ.
ﻫﻤﻪي DDﻫﺎ را ﻧﻤﻲﺗﻮان ﻫﻤﺎﻧﻨﺪ CONﺗﻌﻮﻳﺾ ﻧﻤﻮد .ﻣﺜﻼً NULﻫﻤﻴﺸﻪ ﻧﺨﺴﺘﻴﻦ DDﺑﻮده و اﮔﺮ DDﺟﺪﻳﺪي ﺑﺮاي آن اﻳﺠﺎد ﺷﻮد ،داس از آن
ﺻﺮفﻧﻈﺮ ﺧﻮاﻫﺪ ﻧﻤﻮد .ﻫﻤﻴﻦ ﻣﺴﺄﻟﻪ در ﻣﻮرد ﮔﺮداﻧﻨﺪهﻫﺎي HDو FDﻫﻢ ﺻﺎدق اﺳﺖ .ﻣﻲﺗﻮان ﮔﺮداﻧﻨﺪهي ﺟﺪﻳﺪي ﺑﺮاي ﻳﻚ وﺳﻴﻠﻪي ذﺧﻴﺮهﺳﺎزي اﻧﺒﻮه اﺿﺎﻓﻪ ﻧﻤﻮد،
وﻟﻲ ﻧﻤﻲﺗﻮان ﮔﺮداﻧﻨﺪهي C:ﻳﺎ A:را ﺗﻌﻮﻳﺾ ﻧﻤﻮد.
3-25اﻧﻮاع ﮔﺮداﻧﻨﺪهﻫﺎ
دو ﻧﻮع DDدر داس وﺟﻮد دارد :ﻛﺎراﻛﺘﺮي) 1(CDDو ﺑﻠﻮﻛﻲ)2(BDD
اﻳﻦ ﻧﻮع DDداراي ﺳﺎﺧﺘﺎر ﺳﺎدهاي اﺳﺖ و ﺑﺎ ﻫﺮ ﺑﺎر ﻓﺮاﺧﻮاﻧﻲ ﻳﻚ ﻛﺎراﻛﺘﺮ را ﻣﻨﺘﻘﻞ ﻣﻲﻛﻨﻨﺪ و ﺑﺎ وﺳﺎﻳﻠﻲ ﻧﻈﻴﺮ ﺻﻔﺤﻪﻛﻠﻴﺪ ،ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ،ﭼﺎﭘﮕﺮ و ﻣﻮدم
ﻛﺎر ﻣﻲﻛﻨﻨﺪ .ﻳﻚ CDDﻓﻘﻂ ﻳﻚ وﺳﻴﻠﻪ را ﻣﻲﺗﻮاﻧﺪ ﻛﻨﺘﺮل ﻛﻨﺪ .ﺑﻨﺎﺑﺮ اﻳﻦ ﺑﺮاي وﺳﺎﻳﻞ ﻣﺨﺘﻠﻒ ﺑﺎﻳﺪ CDDﻫﺎي ﻣﺘﻔﺎوت در داس ﻧﺼﺐ ﺷﻮد .اﻳﻦ ﻧﻮع DDداراي دو
ﺣﺎﻟﺖ ﻋﻤﻠﻴﺎﺗﻲ اﺳﺖ:
• ﺣﺎﻟﺖ :Cookedﻛﺎراﻛﺘﺮﻫﺎ ﻗﺒﻞ از اﻧﺘﻘﺎل ﭘﺮدازش ﻣﻲﺷﻮﻧﺪ و آﻧﮕﺎه ﺗﺤﻮﻳﻞ ﺑﺮﻧﺎﻣﻪﻫﺎ ﻣﻲﺷﻮﻧﺪ .ﺑﺮاي ﻣﺜﺎل ﻳﻚ ﮔﺮداﻧﻨﺪهي ﺻﻔﺤﻪﻛﻠﻴﺪ ،ﻛﻠﻴﺪﻫﺎﻳﻲ
ﻧﻈﻴﺮ > <ENTERﻳﺎ > <CTRL+Pرا ﭘﺮدازش و ﻛﻨﺘﺮل ﻣﻲﻛﻨﺪ و ﺑﺎ زدن اوﻟﻲ ،از ﻛﻠﻴﺪﻫﺎي ﺑﻌﺪي زده ﺷﺪه ،ﺻﺮفﻧﻈﺮ ﻣﻲﻛﻨﺪ و در ﻣﻮرد
دوﻣﻲ ،ﻫﻤﻪي ﺣﺮﻓﻬﺎي زدن ﺷﺪه را ﻋﻼوه ﺑﺮ ﻧﻤﺎﻳﺶ ،ﺑﺮ روي ﭼﺎﭘﮕﺮ ﻫﻢ ﭼﺎپ ﻣﻲﻛﻨﺪ.
ﺣﺎﻟﺖ :Rawدر اﻳﻦ ﺣﺎﻟﺖ ﻛﺎراﻛﺘﺮﻫﺎي ﻛﻨﺘﺮﻟﻲ ﭘﺮدازش ﻧﻤﻲﺷﻮﻧﺪ و ﺗﻤﺎﻣﻲ ﻛﺎراﻛﺘﺮﻫﺎ از وﺳﻴﻠﻪ ﺑﻪ ﺑﺮﻧﺎﻣﻪ و ﺑﺮﻋﻜﺲ ﻣﻨﺘﻘﻞ ﻣﻲﺷﻮﻧﺪ .اﮔﺮ ﺑﺮﻧﺎﻣﻪ •
ﺑﺨﻮاﻫﺪ 10ﻛﺎراﻛﺘﺮ ﺑﺨﻮاﻧﺪ ،دﻗﻴﻘﺎً ﻫﻤﺎن 10ﻛﺎراﻛﺘﺮ ﺑﻪ او ﺗﺤﻮﻳﻞ داده ﻣﻲﺷﻮد و ﻫﻴﭻ ﭘﺮدازﺷﻲ ﺑﺮ روي ﻛﺎراﻛﺘﺮﻫﺎ اﻧﺠﺎم ﻧﻤﻲﺷﻮد.
ﻧﺤﻮهي ﺗﺸﺨﻴﺺ وﺳﺎﻳﻞ ﻣﺪﻳﺮﻳﺖ ﺷﻮﻧﺪه ﺑﺎ ﻳﻚ BDDﺑﻪ اﻳﻦ ﺻﻮرت اﺳﺖ ﻛﻪ از ﻧﺎم وﺳﻴﻠﻪ)ﻣﺜﻞ CONﻳﺎ (PRNاﺳﺘﻔﺎده ﻧﻤﻲﺷﻮد ،ﺑﻠﻜﻪ ﺑﺎ ﻳﻚ ﺣﺮف،
ﻧﻈﻴﺮ D ،C ،B ،Aو ﻏﻴﺮه ﻣﺸﺨﺺ ﻣﻲﺷﻮﻧﺪ ،ﻛﻪ ﻧﻤﻲﺗﻮاﻧﻨﺪ ﺗﻜﺮاري ﺑﺎﺷﻨﺪ ،وﻟﻲ ﺑﺎﻳﺪ ﺑﻪﺻﻮرت ﭘﻲدرﭘﻲ ﺑﺎﺷﻨﺪ .ﻫﺮ BDDﺑﺎﻳﺪ ﻳﻚ FATو ﻳﻚ داﻳﺮﻛﺘﻮري رﻳﺸﻪ
داﺷﺘﻪ ﺑﺎﺷﺪ و ﺑﺮ ﺧﻼف CDDﺣﺎﻟﺘﻬﺎي ﻋﻤﻠﻴﺎﺗﻲ Cookedو Rawﻧﺪارﻧﺪ.
دﺳﺘﺮﺳﻲ ﺑﻪ ﮔﺮداﻧﻨﺪهﻫﺎ:
راﻫﻬﺎي ﻣﺨﺘﻠﻔﻲ ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﮔﺮداﻧﻨﺪهﻫﺎ وﺟﻮد دارﻧﺪ .ﺑﻪ CDDﻣﻲﺗﻮان ﺑﺎ اﺳﺘﻔﺎده از ﺗﻮاﺑﻊ FCBﻳﺎ handleدﺳﺘﺮﺳﻲ ﭘﻴﺪا ﻧﻤﻮد ،ﻛﻪ اﺳﻢ وﺳﻴﻠﻪ
ﺑﻪﺟﺎي اﺳﻢ ﻓﺎﻳﻞ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﻲﮔﻴﺮد .اﻣﺎ ﺑﻪ BDDﻫﺎ ﻣﻲﺗﻮان ﺑﺎ اﺳﺘﻔﺎده از ﺗﻮاﺑﻊ داس ﺑﺮاي ﻓﻬﺮﺳﺖ ،ﻓﺎﻳﻞ و ﻏﻴﺮه دﺳﺘﺮﺳﻲ ﭘﻴﺪا ﻧﻤﻮد .روش دﻳﮕﺮ دﺳﺘﺮﺳﻲ،
ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ 44Hداس اﺳﺖ ﻛﻪ ﺑﻪ 5IOCTLﻣﻌﺮوف اﺳﺖ و داراي ﺗﻌﺪادي زﻳﺮ ﺗﺎﺑﻊ اﺳﺖ ﻛﻪ در ﻣﻮرد آن در اداﻣﻪي اﻳﻦ ﻓﺼﻞ ﺻﺤﺒﺖ ﻣﻲﺷﻮد.
_________________________________________________________________________________
Character Device Driver ١
Block Device Driver ٢
logical sector ٣
volume ٤
I/O Control ٥
3-25 ﻓﺼﻞ :25ﮔﺮداﻧﻨﺪهﻫﺎي وﺳﻴﻠﻪ
:Device headerدر اﺑﺘﺪاي ﻫﺮ DDوﺟﻮد دارد و ﺷﺎﻣﻞ اﻃﻼﻋﺎت زﻳﺮ ﺑﺮاي ﻧﺼﺐ وﺳﻴﻠﻪ ﺗﻮﺳﻂ داس اﺳﺖ: •
:Strategy routineﺑﺮاي ﻣﻘﺪاردﻫﻲ اوﻟﻴﻪي DDﺗﻮﺳﻂ داس در ﻫﻨﮕﺎم ﻓﺮاﺧﻮاﻧﻲ ﺗﻮاﺑﻊ ﮔﺮداﻧﻨﺪه و ﻗﺒﻞ از اﺟﺮاي روال وﻗﻔﻪ ،ﻓﺮاﺧﻮاﻧﻲ •
ﻣﻲﺷﻮد.
:Interrupt routineﺑﺎ رواﻟﻬﺎي ﻣﻌﻤﻮﻟﻲ وﻗﻔﻪ ﻣﺘﻔﺎوت اﺳﺖ و در ﺣﻘﻴﻘﺖ ﺗﻮاﺑﻊ ﮔﺮداﻧﻨﺪه ﺗﻮﺳﻂ آن اﻧﺠﺎم ﻣﻲﺷﻮد و ﭘﺲ از روال اﺳﺘﺮاﺗﮋي •
ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﺷﻮد.
از آﻧﺠﺎﻳﻲ ﻛﻪ در زﻣﺎن ﻧﺼﺐ ،DDداس ﺑﻪﻃﻮر ﻛﺎﻣﻞ ﺑﺎﻻ ﻧﻴﺎﻣﺪه اﺳﺖ ،روال ﻣﻘﺪار دﻫﻲ ﻣﻲﺗﻮاﻧﺪ ﺗﻨﻬﺎ ﺗﻮاﺑﻊ 01Hﺗﺎ 1CHداس )ﺑﺮاي ورودي-ﺧﺮوﺟﻲ
ﻛﺎراﻛﺘﺮ( ،ﺗﺎﺑﻊ ) 30Hﺗﻌﻴﻴﻦ ﻧﮕﺎرش داس( ،و ﺗﻮاﺑﻊ 25Hو (Get/Set Int. Vect) 35Hرا ﻓﺮاﺧﻮاﻧﻲ ﻛﻨﺪ ،و اﻳﻦ دﻟﻴﻞ اﺻﻠﻲ ﻋﺪم اﻣﻜﺎن ﻧﻮﺷﺘﻦ DDﺑﺎ زﺑﺎﻧﻬﺎي
ﺳﻄﺢ ﺑﺎﻻ اﺳﺖ.
6-25ﮔﺮداﻧﻨﺪهي ﺳﺎﻋﺖ
ﻳﻜﻲ از ﮔﺮداﻧﻨﺪهﻫﺎي اﺻﻠﻲ داس اﺳﺖ ﻛﻪ ﻧﺎم آن $CLOCKﺑﻮده و ﺑﻪﻃﻮر ﺧﻮدﻛﺎر ﻧﺼﺐ ﻣﻲﺷﻮد و ﻳﻚ CDDاﺳﺖ .ﻣﻲﺗﻮان از ﻧﺎم دﻳﮕﺮي ﻧﻴﺰ
ﺑﻪﺟﺎي $CLOCKﺑﺮاي آن اﺳﺘﻔﺎده ﻧﻤﻮد ،اﻣﺎ ﺑﺎﻳﺪ در ،device headerﺑﻴﺖ دوم attribute wordﺑﻪ 1ﻣﻘﺪاردﻫﻲ ﺷﻮد .ﻫﻤﭽﻨﻴﻦ ﭼﻮن CDDاﺳﺖ ،ﺑﻴﺖ
15آن ﻧﻴﺰ 1اﺳﺖ.
ﺗﻮاﺑﻊ 2AHﺗﺎ 2DHداس ،ﺑﺮاي ﺗﻨﻈﻴﻢ و ﻧﻤﺎﻳﺶ ﺗﺎرﻳﺦ و زﻣﺎن ﺗﻮاﺑﻊ اﻳﻦ ﮔﺮداﻧﻨﺪه را ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﻛﻨﻨﺪ .اﻳﻦ CDDﻓﻘﻂ داراي ﺗﻮاﺑﻌﻲ ﺑﺮاي ﻧﻘﻞ و
اﻧﺘﻘﺎل ﺗﺎرﻳﺦ اﺳﺖ ،و از اﻳﻨﺮو ﺗﻮاﺑﻊ (Write) 08H ،(Read) 04Hو (Initialization) 00Hﺑﺎﻳﺪ ﻓﺮاﻫﻢ ﺷﻮﻧﺪ و ﻣﺎﺑﻘﻲ ﺑﺎﻳﺪ ﺧﺎﻟﻲ ﺑﺎﺷﻨﺪ .ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ
،04Hﺗﺎرﻳﺦ و زﻣﺎن از ﮔﺮداﻧﻨﺪه ﺑﻪ داس ﻣﻨﺘﻘﻞ ﻣﻲﺷﻮد و داس ﻧﻴﺰ ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ ،08Hﺗﺎرﻳﺦ و زﻣﺎن ﺟﺪﻳﺪ را ﺗﻨﻈﻴﻢ ﻣﻲﻛﻨﺪ .ﭘﺎراﻣﺘﺮﻫﺎي زﻣﺎن و ﺗﺎرﻳﺦ ،در ﻳﻚ ﺑﺎﻓﺮ
ﻛﻪ 6ﺑﺎﻳﺖ اﺳﺖ ،ﻣﻨﺘﻘﻞ ﻣﻲﺷﻮﻧﺪ:
* ﻧﺤﻮهي ﻧﮕﻬﺪاري ﺗﺎرﻳﺦ )ﺑﺮ اﺳﺎس ﺗﻌﺪاد روزﻫﺎ از اول ژاﻧﻮﻳﻪ (1980ﻏﻴﺮ ﻣﻌﻤﻮل اﺳﺖ و داس ﺑﺎﻳﺪ روز/ﻣﺎه/ﺳﺎل را ﺑﺎ درﻧﻈﺮ ﮔﺮﻓﺘﻦ ﺗﻤﺎﻣﻲ ﺟﻮاﻧﺐ ﺗﺒﺪﻳﻞ،
از ﻗﺒﻴﻞ ﺳﺎﻟﻬﺎي ﻛﺒﻴﺴﻪ ﺑﻪ ﺗﻌﺪاد روز و ﺑﺮﻋﻜﺲ ﺗﺒﺪﻳﻞ ﻧﻤﺎﻳﺪ.
5-25 ﻓﺼﻞ :25ﮔﺮداﻧﻨﺪهﻫﺎي وﺳﻴﻠﻪ
وﻗﺘﻲ ﻳﻚ ﮔﺮداﻧﻨﺪه ﻧﺼﺐ ﻣﻲﺷﻮد ،ﻳﻚ وﺳﻴﻠﻪي ﻓﻴﺰﻳﻜﻲ ﺑﺎ ﻳﻚ ﻧﺎم ﻣﻨﻄﻘﻲ ﺑﻪ ﺳﻴﺴﺘﻢ ﻣﺘﺼﻞ ﺷﺪه و ارﺗﺒﺎط ﺑﺎ آن ﻣﻴﺴﺮ ﻣﻲﺷﻮد .ﻣﺜﻼً اﮔﺮ CD-ROM
ﻧﺼﺐ ﻛﺮدهاﻳﻢ ،دراﻳﻮ E:ﺑﻪ آن ﻣﻨﺴﻮب ﻣﻲﺷﻮد و دﺳﺘﺮﺳﻲ ﺑﻪ E:اﻧﺠﺎم ﻣﻲدﻫﻴﻢ ،داس ﺑﺮ اﺳﺎس ﻧﻮع دﺳﺘﺮﺳﻲ ،ﻳﻜﻲ از ﺗﻮاﺑﻊ ﺗﺸﺮﻳﺢ ﺷﺪه را ﻛﻪ در ﻛﺪ DDوﺟﻮد دارد،
ﻓﺮاﺧﻮاﻧﻲ ﻧﻤﻮده و اﺟﺮا ﻣﻲﻛﻨﺪ .ﻣﺜﻼً اﮔﺮ دﺳﺘﺮﺳﻲ ،از ﻧﻮع ﺧﻮاﻧﺪن اﺳﺖ ،ﺗﺎﺑﻊ readﻣﺨﺼﻮص ﮔﺮداﻧﻨﺪه ﻛﻪ در ﻛﺪ DDوﺟﻮد دارد ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﺷﻮد.
IOCTLداراي ﺗﻌﺪاد زﻳﺎدي زﻳﺮﺗﺎﺑﻊ اﺳﺖ ﻛﻪ ﺷﻤﺎرهي آن ﺑﺎﻳﺪ در ALﭘﺎس ﺷﻮد و ﻫﻤﺎﻧﻨﺪ ﻫﻤﻪي ﺗﻮاﺑﻊ داس ،ﭘﺲ از اﺟﺮا CFﻧﺸﺎندﻫﻨﺪهي وﻗﻮع ﻳﺎ
ﻋﺪم وﻗﻮع ﺧﻄﺎ ﺧﻮاﻫﺪ ﺑﻮد .در اداﻣﻪ ﻣﺨﺘﺼﺮي در ﻣﻮرد اﻳﻦ ﺗﻮاﺑﻊ ﺗﻮﺿﻴﺢ داده ﻣﻲﺷﻮد:
* زﻳﺮ ﺗﻮاﺑﻊ 06و 07وﺿﻌﻴﺖ CDDرا ﻧﺸﺎن ﻣﻲدﻫﻨﺪ .اوﻟﻲ ﻣﻲﮔﻮﻳﺪ ﻛﻪ آﻳﺎ وﺳﻴﻠﻪ ﻗﺎدر ﺑﻪ ارﺳﺎل داده اﺳﺖ ﻳﺎ ﻧﻪ؟ و دوﻣﻲ ﻣﻲﮔﻮﻳﺪ ﻛﻪ آﻳﺎ وﺳﻴﻠﻪ ﻗﺎدر
ﺑﻪ درﻳﺎﻓﺖ داده اﺳﺖ ﻳﺎ ﻧﻪ؟ handleوﺳﻴﻠﻪ ﺑﺎﻳﺪ در BXارﺳﺎل ﺷﻮد و اﮔﺮ وﺳﻴﻠﻪ آﻣﺎده ﺑﺎﺷﺪ ،ﻣﻘﺪار FFHدر ALﺑﺮﮔﺮداﻧﺪه ﻣﻲﺷﻮد.
* زﻳﺮﺗﺎﺑﻊ 00ﺑﺮاي ﺑﺪﺳﺖ آوردن اﻃﻼﻋﺎت وﺳﻴﻠﻪ ﺑﺮاي ﻳﻚ handleدر BDDاﺳﺖ .ﭼﻮن ﻣﻤﻜﻦ اﺳﺖ ﭼﻨﺪ handleدر وﺳﻴﻠﻪ ﻓﻌﺎل ﺑﺎﺷﺪ.
ﻧﺸﺎﻧﻲ ﺑﺎرﺷﺪن DDدر ﺣﺎﻓﻈﻪ ﺗﻮﺳﻂ داس ﺗﻌﻴﻴﻦ ﻣﻲﺷﻮد و در زﻣﺎن ﺗﺴﺖ و اﺷﻜﺎﻟﺰداﻳﻲ ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲ ﻧﺎﻣﺸﺨﺺ اﺳﺖ. •
ﮔﺮداﻧﻨﺪهي ﺟﺪﻳﺪ ﺑﺮاي CONرا ﻧﻤﻲﺗﻮان ﺑﺎ ﺑﺮﻧﺎﻣﻪي debugداس ،ﺗﺴﺖ ﻛﺮد .ﭼﻮن ﺧﻮد debugاز CONاﺳﺘﻔﺎده ﻣﻲﻛﻨﺪ. •
وﻗﺘﻲ ﻳﻚ DDﻣﻲﻧﻮﻳﺴﻴﺪ ،ﻳﻚ ﺑﺮﻧﺎﻣﻪي ﺗﺴﺖ ﺑﺮاي ﺗﻚ ﺗﻚ ﺗﻮاﺑﻊ ﺑﺎ روﺷﻲ ﻣﺸﺎﺑﻪ داس ﺑﻨﻮﻳﺴﻴﺪ و ﻗﺒﻞ از ﻧﺼﺐ DDﻫﻤﻪي ﺗﻮاﺑﻊ آﻧﺮا ﺗﺤﺖ •
ﻛﻨﺘﺮل ﺧﻮد ﺗﺴﺖ ﻛﻨﻴﺪ.
BDDﻫﺎ را ﺗﻨﻬﺎ ﭘﺲ از ﺗﺴﺖ ﻛﺎﻣﻞ در ﺳﻴﺴﺘﻢ ﻧﺼﺐ ﻛﻨﻴﺪ .زﻳﺮا ﻣﻤﻜﻦ اﺳﺖ ﻣﺸﻜﻼﺗﻲ ﻣﺜﻞ ﺗﺪاﺧﻞ ﺑﺎ ﺳﺎﻳﺮ ﻟﻮازم و ﻣﺜﻼً ﺧﺮاب ﻛﺮدن partition •
tableدﻳﺴﻚ ﺳﺨﺖ و ﻏﻴﺮه ﭘﻴﺶ آﻳﺪ.
_________________________________________________________________________________
device configurartion ١
data transmision ٢
6-25 ﻓﺼﻞ :25ﮔﺮداﻧﻨﺪهﻫﺎي وﺳﻴﻠﻪ
10-25ﮔﺮداﻧﻨﺪهﻫﺎي CD-ROM
از ﻧﻈﺮ داس CD-ROM ،ﻛﻪ ﻳﻚ وﺳﻴﻠﻪي ذﺧﻴﺮهﺳﺎزي اﻧﺒﻮه اﺳﺖ ،ﺑﺎﻳﺪ ﻳﻚ ﮔﺮداﻧﻨﺪهي وﺳﻴﻠﻪي ﺑﻠﻮﻛﻲ داﺷﺘﻪ و داراي FATﺑﺎﺷﺪ .اﻳﻦ در ﺣﺎﻟﻲاﺳﺖ
ﻛﻪ ﻓﺮﻣﺖ ذﺧﻴﺮهﺳﺎزي دادهﻫﺎ در CD-ROMﺑﻪ ﺻﻮرﺗﻬﺎي ﺧﺎﺻﻲ ﺑﻮده و ﺑﺮاي ﺧﻮاﻧﺪن وﻧﻮﺷﺘﻦ دادهﻫﺎ ،ﺑﻠﻮﻛﻬﺎﻳﻲ ﺑﺎ اﻧﺪازهي ﻣﺘﻔﺎوت ﺑﺎ دﻳﺴﻚ ﺳﺨﺖ ،و ﻣﺜ ً
ﻼ
ﺑﻠﻮﻛﻬﺎي 2KBاﺳﺘﻔﺎده ﻣﻲﺷﻮد .اﻃﻼﻋﺎت ﻓﺎﻳﻠﻬﺎ ﻫﻢ ﺑﻪ ﺻﻮرت FATﻧﮕﻬﺪاري ﻧﻤﻲﺷﻮد ،ﺑﻠﻜﻪ از روﺷﻬﺎي ﺧﺎص ،ﻧﻈﻴﺮ اﺳﺘﺎﻧﺪارﻫﺎي ISOاﺳﺘﻔﺎده ﻣﻲﺷﻮد .از اﻳﻨﺮو،
ﺑﺎﻳﺪ ﺑﻪﺟﺎي BDDاز CDDﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ CD-ROMاﺳﺘﻔﺎده ﻧﻤﻮد ،ﻛﻪ در اﻳﻦ ﺻﻮرت ﻳﻚ ﺣﺮف دراﻳﻮ ﺑﻪ آن ﻣﻨﺴﻮب ﻧﺨﻮاﻫﺪ ﺷﺪ .اﻣﺎ ،ﺑﺮاي آﻧﻜﻪ ﺑﺘﻮان از
اﻳﻦ وﺳﻴﻠﻪ ﺑﻪ ﻋﻨﻮان ﻳﻚ وﺳﻴﻠﻪي ذﺧﻴﺮهﺳﺎزي اﻧﺒﻮه و ﻫﻤﺎﻧﻨﺪ وﺳﺎﻳﻞ ﺑﻠﻮﻛﻲ ﻧﻈﻴﺮ HDاﺳﺘﻔﺎده ﻧﻤﻮد ،و ﻳﻚ ﺣﺮف دراﻳﻮ ﺑﻪ آن ﻣﻨﺴﻮب ﻛﺮد ،ﺑﺎﻳﺪ واﺳﻄﻬﺎﻳﻲ وﺟﻮد داﺷﺘﻪ
ﺑﺎﺷﺪ.
DEVICE=HITACHI.SYS /D:CDR1
ﻛﻪ ﮔﺮداﻧﻨﺪه ﺑﺮاي CD-ROMﺳﺎﺧﺖ HITACHIرا ﻧﺼﺐ ﻣﻲﻛﻨﺪ و اﻳﻦ CDDﺑﺎ ﻧﺎم CDR1ﺑﻪ ﺳﻴﺴﺘﻢ ﺷﻨﺎﺳﺎﻧﺪه ﻣﻲﺷﻮد .اﻣﺎ ﻫﻤﺎﻧﮕﻮﻧﻪ ﻛﻪ
ﮔﻔﺘﻪ ﺷﺪ ،ﺗﺮﺟﻴﺢ ﻣﻲدﻫﻴﻢ ﻛﻪ از ﻃﺮﻳﻖ داس و ﻫﻤﺎﻧﻨﺪ ﻳﻚ وﻟﻮم HDﺑﻪ آن دﺳﺘﺮﺳﻲ داﺷﺘﻪ ﺑﺎﺷﻴﻢ .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ،ﺑﺎﻳﺪ ﺑﺮﻧﺎﻣﻪي 1MSCDEXرا اﺟﺮا ﻛﻨﻴﻢ:
_________________________________________________________________________________
Microsoft CD Extension ١
ﻓﺼﻞ :26ﺳﻴﺴﺘﻢ ﻓﺎﻳﻞ داس
)(DOS File System
ﻫﺮ وﻟﻮم داراي ﺳﺎﺧﺘﺎر ﻣﻨﻄﻘﻲ ﺧﺎﺻﻲ ﺑﻮده ،ﻛﻪ ﺑﻪ دﻳﺴﻜﺖ ﻳﺎ دﻳﺴﻚ ﺑﻮدن و ﻣﻴﺰان ﻇﺮﻓﻴﺖ آن ﺑﺴﺘﮕﻲ ﻧﺪارد و ﻓﻘﻂ اﻧﺪازهدادهﻫﺎي ﻣﺪﻳﺮﻳﺘﻲ ﺳﺎﺧﺘﺎر ،ﺗﻔﺎوت
ﺧﻮاﻫﺪ داﺷﺖ .ﺑﻪ ﻫﺮ وﻟﻮم ﻣﻲﺗﻮان ﻳﻚ ﻧﺎم ﺑﺮﭼﺴﺐ وﻟﻮم 4ﻣﻨﺴﻮب ﻧﻤﻮد .ﻫﺮ وﻟﻮم ﺣﺘﻤﺎً داراي ﻳﻚ ﻓﻬﺮﺳﺖ رﻳﺸﻪ و اﺣﺘﻤﺎﻻً ﺗﻌﺪادي زﻳﺮﻓﻬﺮﺳﺖ اﺳﺖ.
ﺑﺨﺸﻬﺎ :5داس ﻫﺮ وﻟﻮم را ﻳﻚ ﺳﺮي ﺑﺨﺶ ﭘﺸﺖﺳﺮ ﻫﻢ ﻣﻲﺑﻴﻨﺪ .ﻫﺮ ﺑﺨﺶ 512ﺑﺎﻳﺖ اﺳﺖ و داراي ﻳﻚ ﺷﻤﺎرهي ﺑﺨﺶ ﻣﻨﻄﻘﻲ اﺳﺖ ﻛﻪ ﺑﻪﺻﻮرت
ﭘﻲدرﭘﻲ و از 0ﺷﻤﺎرهﮔﺬاري ﻣﻲﺷﻮﻧﺪ .ﺑﺮاي ﻧﻤﻮﻧﻪ ،ﻳﻚ وﻟﻮم 10ﻣﮕﺎﺑﺎﻳﺘﻲ 20,480ﺑﺨﺶ دارد ،ﻛﻪ ﺷﻤﺎرهﻫﺎﻳﺶ از 0ﺗﺎ 20,479ﻫﺴﺘﻨﺪ .داس ﻛﻨﺘﺮﻟﻲ ﺑﺮ ﻣﺪﻳﺮﻳﺖ
ﻓﻴﺰﻳﻜﻲ ﺑﺨﺸﻬﺎ ﻧﺪارد و اﻳﻦ ﻛﺎر ﺗﻮﺳﻂ ﮔﺮداﻧﻨﺪهﻫﺎي وﺳﻴﻠﻪ دﻳﺴﻚ ﺳﺨﺖ 6اﻧﺠﺎم ﻣﻲﺷﻮد و ﻛﺎر ﺗﺒﺪﻳﻞ ﺑﺨﺸﻬﺎي ﻣﻨﻄﻘﻲ ﺑﻪ ﻓﻴﺰﻳﻜﻲ ﺗﻮﺳﻂ HDDDاﻧﺠﺎم ﻣﻲﺷﻮد.
:FATﺗﻮاﺑﻊ داس ﺑﺮاي ﻣﺪﻳﺮﻳﺖ ﻓﺎﻳﻠﻬﺎ ،دﺳﺘﺮﺳﻲ ﺑﻪ ﻓﺎﻳﻞ را ﺗﺒﺪﻳﻞ ﺑﻪ دﺳﺘﺮﺳﻲ ﺑﻪ ﺑﺨﺸﻬﺎي ﻣﻨﻄﻘﻲ ﻣﻲﻛﻨﻨﺪ و ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر از ﺳﺎﺧﺘﺎر ﺟﺪول
ﺗﺨﺼﻴﺺ ﻓﺎﻳﻠﻬﺎ 7ﻳﺎ FATاﺳﺘﻔﺎده ﻣﻲﺷﻮد ،ﻛﻪ در اداﻣﻪ در ﺑﺎرهي آن ﻣﻔﺼﻼً ﺻﺤﺒﺖ ﻣﻲﺷﻮد.
ﺳﺎﺧﺘﺎر ﻟﻮازم ذﺧﻴﺮهﺳﺎزي اﻧﺒﻮه :ﺳﺎﺧﺘﺎر اﻏﻠﺐ ﻟﻮازم ذﺧﻴﺮهﺳﺎزي اﻧﺒﻮه ﺑﻪﺻﻮرت زﻳﺮ اﺳﺖ:
:Boot Sectorﺑﺨﺶ ﺻﻔﺮ ،ﺑﺨﺶ ﺑﻮتﻛﻨﻨﺪه اﺳﺖ و ﻫﺮ وﻟﻮم داراي ﻳﻚ ﺑﺨﺶ ﺻﻔﺮ اﺳﺖ و در ﺻﻮرﺗﻲ ﻛﻪ اﻳﻦ ﺑﺨﺶ ﺣﺎوي رواﻟﻬﺎي ﺑﻮتﻛﻨﻨﺪهي
ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﺑﺎﺷﺪ ،ﺑﻪ آن ﺑﻮتﻛﻨﻨﺪه 8ﮔﻔﺘﻪ ﻣﻲﺷﻮد .اﻳﻦ ﺑﺨﺶ ﺣﺎوي اﻃﻼﻋﺎت ﻣﻮردﻧﻴﺎز ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﻧﺎﺣﻴﻪﻫﺎي ﻣﺨﺘﻠﻒ و ﺳﺎﺧﺘﺎرﻫﺎي دادهاي وﻟﻮم اﺳﺖ ،و ﺑﻪ
ﺷﻜﻞ زﻳﺮ اﺳﺖ:
FAT 2-26
ﺳﺎﺧﺘﺎري اﺳﺖ ﻛﻪ اﻃﻼﻋﺎت ﻣﺮﺑﻮط ﺑﻪ ﺑﺨﺸﻬﺎي ﻳﻚ ﻓﺎﻳﻞ در آن ﻧﮕﻬﺪاري ﻣﻲﺷﻮﻧﺪ .ﻫﺮ ورودي 1در ،FATﻛﻪ 16ﺑﻴﺖ ﻳﺎ ﻳﻚ wordاﺳﺖ ،ﻣﺘﻨﺎﻇﺮ ﺑﺎ
ﻳﻚ ﻛﻼﺳﺘﺮ 2ﻳﺎ واﺣﺪ ﺗﺨﺼﻴﺺ 3اﺳﺖ ﻛﻪ ﺷﺎﻣﻞ ﺗﻌﺪادي ﺑﺨﺶ ﭘﺸﺖ ﺳﺮ ﻫﻢ اﺳﺖ .ﻧﺸﺎﻧﻲ 0DHدر ﺑﺨﺶ ﺻﻔﺮ ،ﺗﻌﺪاد ﺑﺨﺸﻬﺎ در ﻫﺮ ﻛﻼﺳﺘﺮ را ﻣﻌﻴﻦ ﻣﻲﻛﻨﺪ و ﺑﺎﻳﺪ
ﺗﻮاﻧﻲ از ،2ﻧﻈﻴﺮ 4 ،2 ،1ﻳﺎ .8ﺑﺎﺷﺪ:
وﻟﻲ ﻋﻠﻲرﻏﻢ ﺟﺪول ﻓﻮق ،ﺑﺮﻧﺎﻣﻪﻫﺎي ﻓﺮﻣﺖ ﺑﻪ ﻣﻘﺎدﻳﺮ ﻓﻮق ﻣﺤﺪود ﻧﻴﺴﺘﻨﺪ و در ﻣﻮرد وﻟﻮﻣﻬﺎي ﺑﺰرﮔﺘﺮ از 32MBﺑﺎﻳﺪ ﻣﻘﺎدﻳﺮ ﺑﻴﺸﺘﺮي در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﻮد.
زﻳﺮا ﺗﻌﺪاد ﻛﻼﺳﺘﺮﻫﺎ ﺑﻪ 65536ﻣﺤﺪود ﺑﻮده و ﺑﺎ آن ﻧﻤﻲﺗﻮان وﻟﻮﻣﻬﺎي ﺑﺰرگ را ﺑﺎ 16 FATﺑﻴﺘﻲ ﻣﺸﺨﺺ ﻧﻤﻮد .ﺑﻪ اﻳﻦ دﻟﻴﻞ در DOS 4.0ﺑﻪ ﺑﻌﺪ ،ﻣﻔﻬﻮم ﻓﻮق
ﮔﺴﺘﺮش داده ﺷﺪ ،ﺑﺪون آﻧﻜﻪ ﻣﻨﻄﻖ ﻛﺎر ﻋﻮض ﺷﻮد ،و ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ در ﻫﺮ ﻛﻼﺳﺘﺮ ﻣﻲﺗﻮان ﺗﻌﺪاد ﺑﺨﺸﻬﺎي ﺑﻴﺸﺘﺮي را ﻣﺸﺨﺺ ﻧﻤﻮد ،ﻛﻪ ﺑﺮاي وﻟﻮﻣﻬﺎي 32MBﺗﺎ
2GBﺑﻪﺻﻮرت زﻳﺮ اﺳﺖ:
ﺗﻜﻪﺗﻜﻪﺷﺪن ﻓﺎﻳﻞ :4روش داس ﺑﺮاي ﻧﮕﻬﺪاري ﻓﺎﻳﻠﻬﺎ در ﻗﺎﻟﺐ ﺗﻌﺪادي ﺑﺨﺶ ﺑﺮ روي دﻳﺴﻚ ،ﻣﺸﻜﻼﺗﻲ را در زﻣﻴﻨﻪي ﺳﺮﻋﺖ دﺳﺘﺮﺳﻲ ﺑﻪ ﻓﺎﻳﻠﻬﺎ
اﻳﺠﺎد ﻣﻲﻛﻨﺪ .زﻳﺮا ﭘﺲ از ﻣﺪﺗﻲ و ﺑﺎ ﺑﻬﻨﮕﺎم ﺳﺎزي ﻓﺎﻳﻞ ،ﻛﻼﺳﺘﺮﻫﺎي ﻳﻚ ﻓﺎﻳﻞ ﭘﺸﺖ ﺳﺮ ﻫﻢ ﻗﺮار ﻧﺨﻮاﻫﻨﺪ داﺷﺖ و ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﻛﻼﺳﺘﺮﻫﺎي ﻣﺨﺘﻠﻒ ،ﻧﻴﺎز ﺑﻪ
ﺣﺮﻛﺖ زﻳﺎد ﻫِﺪ HDﺧﻮاﻫﺪ ﺑﻮد .ﺑﺮﻧﺎﻣﻪﻫﺎﻳﻲ ﻧﻈﻴﺮ Defragﻳﺎ Norton Speed Diskﻛﺎري ﻛﻪ اﻧﺠﺎم ﻣﻲدﻫﻨﺪ ،ﻗﺮار دادن اﻳﻦ ﻛﻼﺳﺘﺮﻫﺎ ﺑﻪ ﺻﻮرت ﭘﺸﺖ ﺳﺮ ﻫﻢ
اﺳﺖ.
ﺳﺎﺧﺘﺎر :FATدر ،DOS 2.0ﻫﺮ ورودي 12 ،FATﺑﻴﺘﻲ ﺑﻮد ﻛﻪ 4,096ﻛﻼﺳﺘﺮ را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ و اﮔﺮ ﻫﺮ ﻛﻼﺳﺘﺮ ﺣﺎوي 4ﺑﺨﺶ ﺑﺎﺷﺪ ،ﺑﺎ
اﺳﺘﻔﺎده از اﻳﻦ ﻧﻮع FATﻣﻲﺗﻮان ﺑﻪ وﻟﻮﻣﻲ ﺑﺎ ﻇﺮﻓﻴﺖ 4*512*4096= 32MBدﺳﺘﺮﺳﻲ ﭘﻴﺪا ﻧﻤﻮد .از اﻳﻨﺮو ،در ﻧﮕﺎرﺷﻬﺎي ﺑﻌﺪي داس ،ﻣﻲﺗﻮان ﺑﺮاي وﻟﻮﻣﻬﺎي
ﺑﺰرﮔﺘﺮ ،از FAT16ﻧﻴﺰ اﺳﺘﻔﺎده ﻛﺮد ،ﻛﻪ ﻫﺮ ورودي 16 ،FAT16ﺑﻴﺖ اﺳﺖ و ﺑﺎ آن ﻣﻲﺗﻮان 65,536ﻛﻼﺳﺘﺮ را ﻣﺸﺨﺺ ﻧﻤﻮد .اﮔﺮ ﻫﺮ ﻛﻼﺳﺘﺮ 4ﺑﺨﺶ داﺷﺘﻪ
_________________________________________________________________________________
entry ١
cluster ٢
allocation unit ٣
file fragmentation ٤
3-26 ﻓﺼﻞ :26ﺳﻴﺴﺘﻢ ﻓﺎﻳﻞ داس
ﺑﺎﺷﺪ ،ﻇﺮﻓﻴﺖ وﻟﻮم ﻣﻲﺗﻮاﻧﺪ ﺗﺎ 4*512*65536= 132MBﺑﺎﺷﺪ ،و ﺑﺮ اﺳﺎس ﺳﺘﻮن آﺧﺮ ﺟﺪول ﻓﻮق ،ﺑﺮاي ﻛﻼﺳﺘﺮﻫﺎي 64ﺑﺨﺸﻲ ،ﻣﻲﺗﻮان ﺑﻪ وﻟﻮﻣﻲ ﺑﺎ ﻇﺮﻓﻴﺖ
64*512*65536=2GBدﺳﺘﺮﺳﻲ ﭘﻴﺪا ﻧﻤﻮد ،ﻛﻪ در اﻳﻦ ﺣﺎﻟﺖ ﻣﺸﻜﻞ ﺑﺰرگ ﺑﻮدن ﻛﻼﺳﺘﺮﻫﺎ و اﺗﻼف ﻓﻀﺎي HDﭘﻴﺶ ﻣﻲآﻳﺪ .ﺑﻪ اﻳﻦ دﻟﻴﻞ در ،Win98
FAT32ﻣﻌﺮﻓﻲ ﺷﺪه اﺳﺖ ﻛﻪ ﺑﺎ اﺳﺘﻔﺎده از آن ﻣﻲﺗﻮان ﻛﻼﺳﺘﺮﻫﺎي ﻛﻮﭼﻜﺘﺮ داﺷﺖ و درﻧﺘﻴﺠﻪ ﻣﺸﻜﻞ اﺗﻼف ﻓﻀﺎي HDﺑﺮﻃﺮف ﻣﻲﺷﻮد.
Entry Content
0H FDFH
1H FFFH
... ...
100H 120H
... ....
120H 130H
... ....
130H FF8H
... ....
دو ورودي اول ،FATرزرو ﻫﺴﺘﻨﺪ و ﻧﺸﺎندﻫﻨﺪهي ﺗﻮﺻﻴﻒﮔﺮ وﺳﻴﻠﻪ 1ﻫﺴﺘﻨﺪ ،ﻛﻪ ﺑﺮاي FDﻣﻘﺪار F8Hو ﺑﺮاي FFH ،HDاﺳﺖ .ﻣﺎﺑﻘﻲ ﻓﻀﺎي دو
ورودي اول ﺑﺎ FFHﭘﺮ ﻣﻲﺷﻮد.
در ﻓﻬﺮﺳﺖ ﻓﺎﻳﻠﻬﺎ ،ﺑﺮاي ﻫﺮ ﻓﺎﻳﻞ ،ﺷﻤﺎرهي ﻧﺨﺴﺘﻴﻦ ﻛﻼﺳﺘﺮ در FATﻧﮕﻬﺪاري ﻣﻲﺷﻮد .ﻣﺜﻼً ﺑﺮاي ﻳﻚ ﻓﺎﻳﻞ ﺧﺎص ﻛﻪ داراي ﺳﻪ ﻛﻼﺳﺘﺮ اﺳﺖ ،در ﺷﻜﻞ
ﻓﻮق ،ﺷﻤﺎرهي اوﻟﻴﻦ ﻛﻼﺳﺘﺮ ،ﻛﻪ در ﻓﻬﺮﺳﺖ ﻓﺎﻳﻠﻬﺎ ﻧﮕﻬﺪاري ﻣﻲﺷﻮد 100H ،اﺳﺖ و ﺷﻤﺎرهي دوﻣﻴﻦ ﻛﻼﺳﺘﺮ 120Hو ﺷﻤﺎرهي ﺳﻮﻣﻴﻦ ﻛﻼﺳﺘﺮ 130H ،اﺳﺖ .در
ورودي ﺷﻤﺎرهي ،100Hﻋﺪد 120Hﻧﻮﺷﺘﻪ ﺷﺪه و در ورودي ،120Hﻋﺪد 130Hﻧﻮﺷﺘﻪ ﺷﺪه و در ورودي ،120Hﻛﺪ FFF8Hﻧﻮﺷﺘﻪ ﺷﺪه ﻛﻪ ﻣﺸﺨﺺ
ﻛﻨﻨﺪهي ﭘﺎﻳﺎن ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﻛﻼﺳﺘﺮﻫﺎ اﺳﺖ.
ﻣﺤﺘﻮي ﻫﺮ ورودي FATﻳﻚ ﻛﺪ 12ﻳﺎ 16ﺑﻴﺘﻲ اﺳﺖ ،ﻛﻪ اﻧﻮاع آن ﻃﺒﻖ ﺟﺪول زﻳﺮ اﺳﺖ:
ﻣﺸﻜﻠﻲ ﻛﻪ در ﻣﻮرد FATدر اﻏﻠﺐ اوﻗﺎت اﺗﻔﺎق ﻣﻲاﻓﺘﺪ ،ﺧﺮاب ﺷﺪن ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ورودﻳﻬﺎ ﻳﺎ ﻛﻼﺳﺘﺮﻫﺎي ﮔﻢﺷﺪه 2اﺳﺖ ،ﺑﻪ ﻧﺤﻮي ﻛﻪ ﺑﺮﺧﻲ ورودﻳﻬﺎ
ﺣﺎوي ﻛﺪﻫﺎي ﺧﺎص ﻧﺒﻮده و ﻛﺪ ﻣﻮﺟﻮد در آن ،ﻣﺮﺑﻮط ﺑﻪ ﻫﻴﭽﻜﺪام از ﻓﺎﻳﻠﻬﺎي ﺳﻴﺴﺘﻢ ﻧﻴﺴﺖ .ﺑﺮﻧﺎﻣﻪﻫﺎﻳﻲ ﻣﺜﻞ ChkDskﺳﺎ ScanDiskاﻳﻨﮕﻮﻧﻪ ﻛﻼﺳﺘﺮﻫﺎ را
ﻳﺎﻓﺘﻪ و ﺗﺤﺖ ﻋﻨﻮان availableﻋﻼﻣﺖ ﻣﻲزﻧﻨﺪ.
3-26ﻓﻬﺮﺳﺖ رﻳﺸﻪ
ﻓﻬﺮﺳﺖ رﻳﺸﻪ ،3ﺑﻼﻓﺎﺻﻠﻪ ﭘﺲ از اوﻟﻴﻦ ﻧﺴﺨﻪي FATدر وﻟﻮم ذﺧﻴﺮه ﻣﻲﺷﻮد .ﻓﻬﺮﺳﺖ رﻳﺸﻪ ﻫﻤﺎﻧﻨﺪ زﻳﺮﻓﻬﺮﺳﺖ ،ﻳﻚ ﺳﺎﺧﺘﺎر 32ﺑﻴﺘﻲ اﺳﺖ ﻛﻪ ﺣﺎوي
اﻃﻼﻋﺎت ﻓﺎﻳﻠﻬﺎ ﻳﺎ زﻳﺮﻓﻬﺮﺳﺘﻬﺎ ﻳﺎ ﺑﺮﭼﺴﺐ وﻟﻮم اﺳﺖ .اﻳﻦ اﻃﻼﻋﺎت ﻋﺒﺎرﺗﻨﺪ از:
_________________________________________________________________________________
media descriptor ١
lost clusters ٢
root directory ٣
4-26 ﻓﺼﻞ :26ﺳﻴﺴﺘﻢ ﻓﺎﻳﻞ داس
Code Meaning
00H Last directory entry
05H First character of file name has ASCII code E5H
2EH )!?( File applies to current directory
E5H File is deleted
ﺑﻴﺘﻬﺎي ﻣﺨﺘﻠﻒ ﻓﻴﻠﺪ file attributeدر اﻃﻼﻋﺎت ورودي ﻓﻬﺮﺳﺖ ،ﻣﺸﺨﺺﻛﻨﻨﺪهي اﻃﻼﻋﺎت زﻳﺮ اﺳﺖ:
Bit Meaning
0 )1=Write-Protected (or Read-Only
1 1=Hidden
2 1=System file
3 1=Volume name
4 1=Subdirectory
5 1=Archive
6 Reserved
7 Reserved
* ﺑﻴﺖ ﭘﻨﺠﻢ ﻣﺸﺨﺺﻛﻨﻨﺪه Archiveﺑﻮدن ﻳﺎ ﻧﺒﻮدن ﻓﺎﻳﻞ اﺳﺖ .اﻳﻦ ﺑﻴﺖ ﺗﻮﺳﻂ دﺳﺘﻮر Backupو ﭘﺲ از ﻛﭙﻲﻛﺮدن ﻓﺎﻳﻞ در رﺳﺎﻧﻪي ،Backup
ﺑﻪ ﺻﻔﺮ ﻣﻘﺪاردﻫﻲ ﻣﻲﺷﻮد و ﺑﺎ اوﻟﻴﻦ دﺳﺘﻴﺎﺑﻲ ﺗﻮﺳﻂ ﺗﻮاﺑﻊ داس ،ﺑﻪ 1ﻣﻘﺪاردﻫﻲ ﻣﻲﺷﻮد .ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ در اﺟﺮاي ﺑﻌﺪي دﺳﺘﻮر ،Backupﺗﻨﻬﺎ از
ﻓﺎﻳﻠﻬﺎﻳﻲ Backupﺗﻬﻴﻪ ﻣﻲﺷﻮد ﻛﻪ در اﻳﻦ ﻓﺎﺻﻠﻪ ﺑﻬﻨﮕﺎم ﺷﺪهاﻧﺪ.
* ﻓﻴﻠﺪ File Sizeﺣﺎوي اﻧﺪازهي ﻓﺎﻳﻞ اﺳﺖ ﻛﻪ ﺑﻪﺻﻮرت زﻳﺮ در دو Wordﻣﺠﺰا ﻧﮕﻬﺪاري ﻣﻲﺷﻮد:
* ﺑﺮاي زﻳﺮﻓﻬﺮﺳﺘﻬﺎ ،ﺳﺎﺧﺘﺎر ﻓﻮق در ﻗﺎﻟﺐ ﻳﻚ ﻓﺎﻳﻞ در ﺳﻴﺴﺘﻢ ﻧﮕﻬﺪاري ﻣﻲﺷﻮد و ﺑﺮﺧﻼف ﻓﻬﺮﺳﺖ رﻳﺸﻪ ،ﻣﺤﺪودﻳﺖ ﺗﻌﺪاد ﻓﺎﻳﻞ را ﻧﺪارد.
ﻓﺼﻞ :32ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﻘﻴﻢ در ﺣﺎﻓﻈﻪ
)(Terminate and Stay Resident Programs
1-32ﻣﻘﺪﻣﻪ
داس ﻳﻚ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﭼﻨﺪﻛﺎره 1ﻧﻴﺴﺖ و ﻧﻤﻲﺗﻮاﻧﺪ ﺑﻴﺶ از ﻳﻚ ﺑﺮﻧﺎﻣﻪ را در ﻫﺮ زﻣﺎن اﺟﺮا ﻛﻨﺪ .اﻣﺎ ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﻘﻴﻢ در ﺣﺎﻓﻈﻪ) (TSRﻣﻲﺗﻮاﻧﻨﺪ ﺑﺮﺧﻲ از
ﻣﺰاﻳﺎي ﭼﻨﺪﻛﺎرهﺑﻮدن را ﺑﺮاي داس ﺑﻪﻫﻤﺮاه ﺑﻴﺎورﻧﺪ .اﻏﻠﺐ ﺑﺮﻧﺎﻣﻪﻫﺎي TSRﺑﻪ اﻳﻦ ﺻﻮرت ﻫﺴﺘﻨﺪ ﻛﻪ ﺑﺎ زدن ﻳﻚ ﻛﻠﻴﺪ ،ﻓﻌﺎل ﺷﺪه و ﻛﺎري را اﻧﺠﺎم ﻣﻲدﻫﻨﺪ و دوﺑﺎره ﺑﻪ
زﻣﻴﻨﻪ 2ﻣﻲروﻧﺪ .ﻣﺜﺎﻟﻲ از ﻛﺎرﺑﺮد اﻳﻦ ﮔﻮﻧﻪ ﺑﺮﻧﺎﻣﻪﻫﺎ ،ﺑﺮﻧﺎﻣﻪﻫﺎي ﺗﻘﻮﻳﻢ ،ﻣﺎﺷﻴﻦ ﺣﺴﺎب و ﻏﻴﺮه اﺳﺖ .در ﺣﻘﻴﻘﺖ ﺑﺮﻧﺎﻣﻪﻫﺎي ،TSRﺑﺮﻧﺎﻣﻪﻫﺎﻳﻲ ﭼﻨﺪﻛﺎره ﻧﻴﺴﺘﻨﺪ ،ﺑﻠﻜﻪ ﻳﻚ
روش ﭼﻨﺪﺑﺮﻧﺎﻣﻪاي 3ﻫﺴﺘﻨﺪ .زﻳﺮا ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﻪﻃﻮر ﻫﻤﺰﻣﺎن اﺟﺮا ﻧﻤﻲﺷﻮﻧﺪ .ﮔﺮﭼﻪ ﺑﺮﻧﺎﻣﻪﻫﺎي TSRﻣﻤﻜﻦ اﺳﺖ ﻛﺎرﻫﺎي ﻣﺘﻔﺎوﺗﻲ اﻧﺠﺎم دﻫﻨﺪ ،وﻟﻲ ﻣﻔﺎﻫﻴﻢ و ﺳﺎﺧﺘﺎر
ﻳﻜﺴﺎﻧﻲ دارﻧﺪ .در اداﻣﻪ ﺑﺎ اﻳﻦ ﻣﻔﺎﻫﻴﻢ و ﺳﺎﺧﺘﺎر آﺷﻨﺎ ﻣﻲﺷﻮﻳﺪ.
_________________________________________________________________________________
multitask ١
background ٢
multiprogramming ٣
multiplexer ٤
2-32 ﻓﺼﻞ :32ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﻘﻴﻢ در ﺣﺎﻓﻈﻪ
ﺑﺮ اﺳﺎس ﺷﻜﻞ ﻓﻮق ﻛﻪ ﺑﺮاي دو ﺑﺮﻧﺎﻣﻪي TSRرﺳﻢ ﺷﺪه اﺳﺖ ،ﻫﺮ ﺑﺮﻧﺎﻣﻪي TSRداراي ﻳﻚ روال ﺳﺮوﻳﺲ وﻗﻔﻪي 09Hاﺳﺖ ﻛﻪ در آن اﺑﺘﺪا روال ﻗﺒﻠﻲ را
ﻓﺮاﺧﻮاﻧﻲ ﻧﻤﻮده و ﺳﭙﺲ ﺑﺮرﺳﻲ ﻣﻲﻛﻨﺪ ﻛﻪ Hotkeyﻣﻮردﻧﻈﺮش زده ﺷﺪه اﺳﺖ ﻳﺎ ﻧﻪ؟ در ﺻﻮرﺗﻲ ﻛﻪ زده ﺷﺪه ﺑﺎﺷﺪ ،ﺗﻮاﺑﻊ ﻣﺮﺑﻮط ﺑﻪ ﺧﻮد را اﻧﺠﺎم ﻣﻲدﻫﺪ .ﺑﺎ اﻳﻦ روش
ﻫﺮ ﺑﺮﻧﺎﻣﻪاي ﻛﻪ اﺑﺘﺪا ﻧﺼﺐ ﺷﻮد اﻟﻮﻳﺖ درﻳﺎﻓﺖ و ﭘﺮدازش ﻛﻠﻴﺪ ﺑﺎ او ﺧﻮاﻫﺪ ﺑﻮد .ﺑﺎ اﻳﻦ روش ،ﻧﻤﻲﺗﻮان ﻳﻚ ﺑﺮﻧﺎﻣﻪي TSRﻧﻮﺷﺖ ﻛﻪ زدن ﻛﻠﻴﺪﻫﺎي
Alt+Ctrl+Delرا ﻛﻨﺘﺮل ﻧﻤﺎﻳﺪ ،زﻳﺮا اﻳﻦ ﻛﺎر در روال اﺻﻠﻲ ﺳﺮوﻳﺲ وﻗﻔﻪي 09Hﻛﻪ در ROM-BIOSﻗﺮار دارد ﻛﻨﺘﺮل ﻣﻲﺷﻮد و ﺳﻴﺴﺘﻢ restartﻣﻲﺷﻮد.
اﮔﺮ ﺑﺨﻮاﻫﻴﻢ اﻳﻦ ﻛﺎر را اﻧﺠﺎم دﻫﻴﻢ ،ﺑﺎﻳﺪ اﺑﺘﺪا و ﻗﺒﻞ از ﻓﺮاﺧﻮاﻧﻲ روال ﻗﺒﻠﻲ ،ﺻﻔﺤﻪ ﻛﻠﻴﺪ را ﺑﺎ روش دﺳﺘﺮﺳﻲ ﻣﺴﺘﻘﻴﻢ ﺑﺨﻮاﻧﻴﻢ)ﺧﻮاﻧﺪن درﮔﺎه 60Hو ﻛﻨﺘﺮل ﺑﺎﻳﺖ
وﺿﻌﻴﺖ ﺻﻔﺤﻪ ﻛﻠﻴﺪ از ﺛﺒﺎﺗﻬﺎي آن(.
ﻓﺮاﺧﻮاﻧﻲ ﺗﻮاﺑﻊ داس :ﺑﺮﻧﺎﻣﻪﻫﺎي TSRﻣﻤﻜﻦ اﺳﺖ ﺗﻮاﺑﻊ داس را ﻓﺮاﺧﻮاﻧﻲ ﻛﻨﻨﺪ .اﻳﻦ ﻣﺴﺄﻟﻪ ﻋﻠﻲاﻟﺨﺼﻮص در ﺑﺮﻧﺎﻣﻪﻫﺎي ﺳﻄﺢ ﺑﺎﻻ ،ﻗﺎﺑﻞ ﻛﻨﺘﺮل
ﺑﻮﺳﻴﻠﻪي ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲ ﻧﻴﺴﺖ .ﻣﺸﻜﻠﻲ ﻛﻪ وﺟﻮد دارد ،ﻋﺪم ﻗﺎﺑﻠﻴﺖ اﺟﺮاي ﻣﺠﺪد 1ﻛﺪﻫﺎي داس اﺳﺖ .ﭼﻮن داس ﺑﺮاي ﺣﺎﻟﺖ ﺗﻚﻛﺎره ﻧﻮﺷﺘﻪ ﺷﺪه اﺳﺖ وﻟﻲ وﻗﺘﻲ در
داﺧﻞ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ،ﺑﺎ زدن ﻳﻚ Hotkeyﻳﻚ ﺑﺮﻧﺎﻣﻪي TSRرا ﻓﻌﺎل ﻣﻲﻛﻨﻴﻢ ،اﻳﻦ ﻣﺸﻜﻞ ﭘﻴﺶ ﻣﻲآﻳﺪ ﻛﻪ ﺛﺒﺎﺗﻬﺎي ﻣﻮرد اﺳﺘﻔﺎدهي ﺑﺮﻧﺎﻣﻪي در ﺣﺎل اﺟﺮا ،ﺗﻮﺳﻂ
ﺑﺮﻧﺎﻣﻪي TSRدﺳﺘﻜﺎري ﻣﻲﺷﻮﻧﺪ و ﻟﺬا ﭘﺲ از ﺑﺮﮔﺸﺖ ،ﺑﺮﻧﺎﻣﻪي درﺣﺎل اﺟﺮا دﭼﺎر اﺧﺘﻼل ﻣﻲﺷﻮد .ﺑﻪ اﻳﻦ دﻟﻴﻞ در ﺑﺮﻧﺎﻣﻪﻫﺎي TSRﺑﻬﺘﺮ اﺳﺖ از ﺗﻮاﺑﻊ داس اﺳﺘﻔﺎده
ﻧﺸﻮد و ﻧﻴﺰ ﻫﻤﺎﻧﻨﺪ رواﻟﻬﺎي ﺳﺮوﻳﺲ وﻗﻔﻪاي ﻛﻪ در ﻛﺎﻣﭙﺎﻳﻠﺮﻫﺎي ﺑﻮرﻟﻨﺪ ﺗﻮﻟﻴﺪ ﻣﻲﺷﻮد ،اﺑﺘﺪاي ISRﻫﻤﻪي ﺛﺒﺎﺗﻬﺎ در ﭘﺸﺘﻪ pushو در اﻧﺘﻬﺎي ﻛﺎر ﻫﻤﻪي ﺛﺒﺎﺗﻬﺎ pop
ﺷﻮﻧﺪ.
ﻓﻌﺎلﺳﺎزي ﺑﺎ ﺗﺄﺧﻴﺮ :ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻣﺸﻜﻞ ﻓﻮق ،ﺑﺎﻳﺪ ﻗﺒﻞ از ﻓﻌﺎلﺳﺎزي ﻳﻚ ﺑﺮﻧﺎﻣﻪي TSRﻛﻨﺘﺮل ﺷﻮد ﻛﻪ آﻳﺎ در ﺻﻮرت ﻓﻌﺎلﺳﺎزي ﻗﺎدر ﺑﻪ اﻧﺠﺎم
وﻇﺎﻳﻔﺶ اﺳﺖ ﻳﺎ ﻧﻪ؟ ﺑﻪ اﻳﻦ دﻟﻴﻞ اﻏﻠﺐ ﺑﺮﻧﺎﻣﻪﻫﺎي TSRروال ﺳﺮوﻳﺲ ﺟﺪﻳﺪي ﺑﺮاي ) INT 08Hﺗﺎﻳﻤﺮ( ﻧﻴﺰ ﻧﺼﺐ ﻣﻲﻛﻨﻨﺪ .در ﺻﻮرت ﻓﺮاﻫﻢ ﻧﺒﻮدن ﺷﺮاﻳﻂ اﺟﺮاي
ﺑﺮﻧﺎﻣﻪي ،TSRﻳﻚ Flagرا در ISRوﻗﻔﻪي ،09Hﻣﻘﺪاردﻫﻲ ﻣﻲﻛﻨﺪ و در ISRوﻗﻔﻪي ﺗﺎﻳﻤﺮ flag ،را ﻛﻨﺘﺮل ﻣﻲﻛﻨﻨﺪ و در ﺻﻮرت 1ﺑﻮدن ﺑﺮرﺳﻲ ﻣﻲﻛﻨﻨﺪ ﻛﻪ
آﻳﺎ ﺷﺮاﻳﻂ آﻣﺎده اﺳﺖ ﻳﺎ ﻧﻪ؟ در ﺻﻮرت آﻣﺎده ﺑﻮدن ﺷﺮاﻳﻂ ،ﺑﺮﻧﺎﻣﻪي TSRرا ﻓﻌﺎل ﻣﻲﻛﻨﺪ .در اﻳﻦﺻﻮرت ،ﻓﻌﺎلﺳﺎزي ﺑﺮﻧﺎﻣﻪي TSRﺑﺎ ﺗﺄﺧﻴﺮ اﻧﺠﺎم ﻣﻲﺷﻮد.
* ﺑﺎﻳﺪ از اﺟﺮاي ﻣﺠﺪد ﺑﺮﻧﺎﻣﻪﻫﺎي TSRﺟﻠﻮ ﮔﻴﺮي ﺷﻮد .اﻳﻦ ﻛﺎر ﺑﺎﻳﺪ در ﻗﺴﻤﺖ اﺻﻠﻲ ﺑﺮﻧﺎﻣﻪي TSRاﻧﺠﺎم ﺷﻮد.
زﻣﻴﻨﻪ2 4-32ﺗﻌﻮﻳﺾ
ﺑﻪ ﻓﺮآﻳﻨﺪ ﻓﻌﺎلﺳﺎزي ﻳﻚ ﺑﺮﻧﺎﻣﻪي ،TSRﺗﻌﻮﻳﺾ زﻣﻴﻨﻪ ﮔﻔﺘﻪ ﻣﻲﺷﻮد .زﻣﻴﻨﻪ ﻳﺎ ﻣﺤﻴﻂ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ،اﻃﻼﻋﺎت ﻣﻮرد ﻧﻴﺎزش ﺑﺮاي ﻋﻤﻠﻴﺎت و ﺷﺎﻣﻞ ﻣﻮارد زﻳﺮ
اﺳﺖ:
ﻣﺤﺘﻮي ﺛﺒﺎﺗﻬﺎي ﭘﺮدازﻧﺪه :اﻃﻼﻋﺎت ﺛﺒﺎﺗﻬﺎي ﭘﺮدازﻧﺪه و از ﺟﻤﻠﻪ ﺛﺒﺎﺗﻬﺎي ﻗﻄﻌﻪ ﺑﺎﻳﺪ در ﻣﺘﻐﻴﺮﻫﺎي داﺧﻠﻲ TSRﻳﺎ در ﭘﺸﺘﻪ ذﺧﻴﺮه ﺷﻮﻧﺪ و ﻗﺒﻞ •
از ﺗﻌﻮﻳﺾ زﻣﻴﻨﻪ،ﺛﺒﺎﺗﻬﺎي ﭘﺮدازﻧﺪه ﺑﺎ ﺛﺒﺎﺗﻬﺎي ذﺧﻴﺮه ﺷﺪه ،ﺑﺎر ﺷﻮﻧﺪ.
اﻃﻼﻋﺎت ﻣﻬﻢ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ :ﺷﺎﻣﻞ PSPو 3DTAاﺳﺖ .ﺑﺎ PSPآﺷﻨﺎ ﻫﺴﺘﻴﺪ ،اﻣﺎ DTAﺑﺎﻓﺮي اﺳﺖ ﻛﻪ ﺑﺮاي ﺧﻮاﻧﺪن ﺑﻠﻮﻛﻬﺎي ﺑﺰرگ •
داده از دﻳﺴﻚ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﻲﮔﻴﺮد .ﺑﺎﻳﺪ ﻧﺸﺎﻧﻲ آﻧﻬﺎ ﻫﻢ ذﺧﻴﺮه ﺷﻮد و در ﺗﻌﻮﻳﺾ زﻣﻴﻨﻪ ،آﻧﻬﺎ ﻧﻴﺰ ﺗﻌﻮﻳﺾ ﺷﻮﻧﺪ .ﺑﺮاي ﺧﻮاﻧﺪن و ﺗﻨﻈﻴﻢ ﻧﺸﺎﻧﻲ
DTAﺗﻮاﺑﻊ 1AHو 2FHداس ﻗﺎﺑﻞ اﺳﺘﻔﺎده ﻫﺴﺘﻨﺪ و ﺑﺮاي PSPﻧﻴﺰ ﺗﺎﺑﻊ 50Hﺑﺮاي ﺗﻨﻈﻴﻢ و ﺗﻮاﺑﻊ 62Hو 51Hﺑﺮاي ﺧﻮاﻧﺪن ﻧﺸﺎﻧﻲ
ﻗﺎﺑﻞ اﺳﺘﻔﺎده ﻫﺴﺘﻨﺪ.
ﺣﺎﻓﻈﻪي اﺷﻐﺎلﺷﺪه ﺑﻮﺳﻴﻠﻪي ﺑﺮﻧﺎﻣﻪ :ﻛﻪ ﺑﻪ دﻟﻴﻞ ﻣﻘﻴﻢ ﺑﻮدن ﺑﺮﻧﺎﻣﻪ در ﺣﺎﻓﻈﻪ ،ﻣﺸﻜﻠﻲ از اﻳﻦ ﻧﻈﺮ ﻧﺪارﻳﻢ. •
_________________________________________________________________________________
re-enterant ١
context switch ٢
Disk Transfer Area ٣
3-32 ﻓﺼﻞ :32ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﻘﻴﻢ در ﺣﺎﻓﻈﻪ
:TsrInitﺑﺮﻧﺎﻣﻪ را ﺗﺒﺪﻳﻞ ﺑﻪ ﻳﻚ ﺑﺮﻧﺎﻣﻪي TSRﻧﻤﻮده ،ﻣﺪﻳﺮ وﻗﻔﻪ را ﻧﺼﺐ ﻣﻲﻛﻨﺪ ،ﺑﺮﻧﺎﻣﻪ را درﺣﺎﻓﻈﻪ ﺑﺎرﻣﻲﻛﻨﺪ و آﻧﺮا ﺧﺎﺗﻤﻪ ﻣﻲدﻫﺪ. •
:TsrIsInstﺗﻌﻴﻴﻦ ﻣﻲﻛﻨﺪ ﻛﻪ آﻳﺎ ﺑﺨﺶ ﻣﻘﻴﻢ در ﺣﺎﻓﻈﻪي ﺑﺮﻧﺎﻣﻪ ،ﻗﺒﻼً در ﺣﺎﻓﻈﻪ ﻣﻘﻴﻢ ﺷﺪه اﺳﺖ ﻳﺎ ﻧﻪ؟ •
:TsrCanUnInstﺗﻌﻴﻴﻦ ﻣﻲﻛﻨﺪ ﻛﻪ آﻳﺎ ﺑﺨﺶ ﻣﻘﻴﻢ در ﺣﺎﻓﻈﻪ ﻗﺎﺑﻞ ﺧﺎرج ﺷﺪن اﺳﺖ ﻳﺎ ﻧﻪ؟ •
:TsrSetPtrﻳﻚ اﺷﺎرهﮔﺮ ﺑﻪ ﻧﺸﺎﻧﻲ رواﻟﻲ ﻛﻪ ﻗﺮار اﺳﺖ در داﺧﻞ ﺑﺮﻧﺎﻣﻪ اﺟﺮا ﺷﻮد ،اﻳﺠﺎد ﻣﻲﻛﻨﺪ. •
;)SetIntVec(NewISRn, n
ﻣﻘﻴﻢﺳﺎزي ﺑﺮﻧﺎﻣﻪ در ﺣﺎﻓﻈﻪ: •
;)Keep(0
* ﻣﻘﺪار ﭘﺎراﻣﺘﺮ ،Keepﻫﻤﻴﺸﻪ ﻣﻘﺪار 0اﺳﺖ ﻛﻪ ﻛﺪ ﺑﺮﮔﺸﺘﻲ ﺑﻪ داس اﺳﺖ.
;)OldISRn = getvect(n
ISRﺟﺪﻳﺪ ﻧﺼﺐ ﺷﻮد: •
;)setvect(NewISRn, n
ﻣﻘﻴﻢﺳﺎزي ﺑﺮﻧﺎﻣﻪ در ﺣﺎﻓﻈﻪ: •
;)keep(0, ProgSize
* ﻣﻘﺪار ﭘﺎراﻣﺘﺮ اول ،keepﻫﻤﻴﺸﻪ ﻣﻘﺪار 0اﺳﺖ ﻛﻪ ﻛﺪ ﺑﺮﮔﺸﺘﻲ ﺑﻪ داس اﺳﺖ.
* ﭘﺎراﻣﺘﺮ دوم ،keepاﻧﺪازهي ﺑﺮﻧﺎﻣﻪ در ﺣﺎﻓﻈﻪ اﺳﺖ ﻛﻪ واﺑﺴﻪ ﺑﻪ ﻣﺪل ﺑﺮﻧﺎﻣﻪ ﺑﻮده و ﺑﺮاي ﻣﺪل ،smallﻃﺒﻖ ﻓﺮﻣﻮل زﻳﺮ ﺑﺪﺳﺖ ﻣﻲآﻳﺪ:
6-32ﺗﺴﻬﻴﻢﻛﻨﻨﺪه
ﺑﺮﺧﻲ ﺑﺮﻧﺎﻣﻪﻫﺎي داس ،ﻧﻈﻴﺮ Append ،Assign ،Share ،Printو Doskeyﺑﻪﺻﻮرت TSRﻫﺴﺘﻨﺪ و در ﺻﻮر ﻧﻴﺎز ،ﻓﻌﺎل ﺷﺪه و ﻋﻤﻠﻲ را اﻧﺠﺎم
ﻣﻲدﻫﻨﺪ و ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ،از وﻗﻔﻪي 2FHاﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪه ﻛﻪ ﺑﻪ ﺗﺴﻬﻴﻢﻛﻨﻨﺪه (Mux) 1ﻣﻌﺮوف اﺳﺖ Mux .در ﺣﻘﻴﻘﺖ ﻳﻚ واﺳﻂ ارﺗﺒﺎﻃﻲ ﺑﻴﻦ ﺑﺮﻧﺎﻣﻪﻫﺎي
TSRو ﺳﺎﻳﺮ ﺑﺮﻧﺎﻣﻪﻫﺎ اﺳﺖ و ﻫﺮ ﺑﺮﻧﺎﻣﻪي TSRﻣﻲﺗﻮاﻧﺪ از ﻃﺮﻳﻖ Hotkeyﻳﺎ اﻣﻜﺎﻧﺎت اﻳﻦ وﻗﻔﻪ ﻓﻌﺎل ﺷﻮد .ﺑﺮﻧﺎﻣﻪﻫﺎي TSRاﺳﺘﻔﺎده ﻛﻨﻨﺪه از Muxﺑﺎﻳﺪ اﻳﻦ
ﻧﻜﺘﻪ را رﻋﺎﻳﺖ ﻛﻨﻨﺪ ﻛﻪ در ﻫﺮ زﻣﺎن ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﺘﻌﺪدي از Muxاﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ .ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ﺑﻪ اﻳﻦ روش ﻋﻤﻞ ﺷﻮد ﻛﻪ ﻗﺒﻞ از آﻧﻜﻪ ﺑﺮﻧﺎﻣﻪ از Muxاﺳﺘﻔﺎده
ﻛﻨﺪ ،ﻳﻚ idﻫﺸﺖ ﺑﻴﺘﻲ ﻛﻪ ﺑﻪ آن Mux Codeﮔﻔﺘﻪ ﻣﻲﺷﻮد ﺑﻪ ﺧﻮد ﻣﻨﺴﻮب ﻛﻨﺪMux Code .ﻫﺎي 00Hﺗﺎ BFHﺑﻪ ﺑﺮﻧﺎﻣﻪﻫﺎي داس ﺗﺨﺼﻴﺺ داده ﺷﺪهاﻧﺪ
و از ﻛﺪﻫﺎي BFHﺗﺎ FFHﺳﺎﻳﺮ ﺑﺮﻧﺎﻣﻪﻫﺎ ﻣﻲﺗﻮاﻧﻨﺪ اﺳﺘﻔﺎده ﻛﻨﻨﺪ .وﻗﺘﻲ اﻳﻦ ﻧﻮع ﺑﺮﻧﺎﻣﻪي TSRﻧﺼﺐ ﻣﻲﺷﻮد ،ﺑﺎﻳﺪ ﻳﻚ روال ﺳﺮوﻳﺲ وﻗﻔﻪ ﺑﺮاي ،Muxﻋﻼوه ﺑﺮ
ﺳﺎﻳﺮ ISRﻫﺎي ﻣﻮرد ﻧﻴﺎزش ﻧﺼﺐ ﻛﻨﺪ .ﻳﻌﻨﻲ ﺑﺎﻳﺪ INT 2FHرا ﻧﻴﺰ ﺗﻌﻮﻳﺾ ﻧﻤﺎﻳﺪ و در ،ISRﭼﻚ ﻛﻨﺪ ﻛﻪ اﮔﺮ Mux Codeﻗﺮار داده ﺷﺪه در ،AHﻗﺒﻞ از
ﻓﺮاﺧﻮاﻧﻲ id ،INT 2FHآن اﺳﺖ ،ﺗﻮاﺑﻊ ﺧﻮد را اﺟﺮا ﻛﻨﺪ ،وﮔﺮﻧﻪ روال ﻗﺒﻠﻲ را ﻛﻪ ﻧﺸﺎﻧﻲ آﻧﺮا ﺣﻔﻆ ﻧﻤﻮده ،ﻓﺮاﺧﻮاﻧﻲ ﻛﻨﺪ:
1. Mux-handler
AH=xx
Own
?function yes execute function
no
2. Mux-handler
AH=yy
Own
?function yes execute function
no
Original Mux-handler
در اﺑﺘﺪا ﺑﺎﻳﺪ ﺗﻌﻴﻴﻦ ﺷﻮد ﻛﻪ آﻳﺎ ﺑﺮﻧﺎﻣﻪي ﻓﺮاﺧﻮاﻧﻨﺪه ﻣﻲﺧﻮاﻫﺪ آن Handlerرا ﻓﺮاﺧﻮاﻧﻲ ﻛﻨﺪ ﻳﺎ ﻧﻪ؟ ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر Mux Codeﺑﺎﻳﺪ در ﺛﺒﺎت AH
ﻗﺮار داده ﺷﻮد .در ﺻﻮرﺗﻲ ﻛﻪ ﻛﺪ ﻣﺨﺼﻮص ﺑﺮﻧﺎﻣﻪ در AHﺑﺎﺷﺪ ،ﺗﻮاﺑﻊ ﻣﺮﺑﻮط ﺑﻪ آن ﺑﺮﻧﺎﻣﻪ ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﺷﻮﻧﺪ ،ﻛﻪ ﺑﺎﻳﺪ ﺷﻤﺎره ﺗﺎﺑﻊ در ﺛﺒﺎت دﻳﮕﺮي ،ﻏﻴﺮ از AHﻗﺮار
داده ﺷﺪه و ﺳﺎﻳﺮ ﭘﺎراﻣﺘﺮﻫﺎ ﻧﻴﺰ در ﺛﺒﺎﺗﻬﺎي دﻳﮕﺮ ﻗﺮار داده ﺷﺪه ﺑﺎﺷﻨﺪ .ﺑﺮﺧﻲ از Mux Codeﻫﺎي ﺑﺮﻧﺎﻣﻪﻫﺎي داس ﺑﻪﺻﻮرت ﻫﺴﺘﻨﺪ:
DOS Program Mux Code
Print 01H
Assign 06H
Share 10H
ANSI.SYS 1AH
GRAFTABL B0H
HIMEM.SYS 43H
DOSKEY 48H
DBLSPACE.BIN 4AH
KeyB ADH
Append B7H
_________________________________________________________________________________
Multiplexer ١
ﻓﺼﻞ :33ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه و داس
)(Protected Mode and DOS
1-33ﻣﻘﺪﻣﻪ
ﭘﺮدازﻧﺪهي 80286اﻣﻜﺎن اﺳﺘﻔﺎده از ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه (PM)1را ﻓﺮاﻫﻢ ﻧﻤﻮد .اﻣﺎ داس ﺳﻴﺴﺘﻢ ﻋﺎﻣﻠﻲ ﺑﺮاي ﺣﺎﻟﺖ واﻗﻌﻲ (RM)2اﺳﺖ و ﻧﻤﻲﺗﻮاﻧﺪ از
ﻣﺰاﻳﺎي PMاﺳﺘﻔﺎده ﻛﻨﺪ .ﻣﺸﻜﻞ اﺻﻠﻲ اﻳﻦ اﺳﺖ ﻛﻪ داس ﺑﺮ اﺳﺎس BIOSاﺳﺖ و BIOSﻫﻢ ﺑﺮاي RMاﺳﺖ و در PMﻗﺎﺑﻞ اﺳﺘﻔﺎده ﻧﻴﺴﺖ .ﭼﺮا؟
زﻳﺮا رواﻟﻬﺎي وﻗﻔﻪي BIOSﺑﺮاﺳﺎس ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪي ﻣﻨﻄﻘﻲ )ﻣﺒﺪأ ،ﻗﻄﻌﻪ( 3ﻋﻤﻞ ﻣﻲﻛﻨﻨﺪ ﻛﻪ ﺗﻨﻬﺎ در RMﻣﻌﺘﺒﺮ اﺳﺖ ،ﻧﻪ ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪي ﻓﻴﺰﻳﻜﻲ
و ﺑﺮاﺳﺎس ﺗﻮﺻﻴﻒﮔﺮ ﻗﻄﻌﻪ 4ﻛﻪ در PMاﺳﺘﻔﺎده ﻣﻲﺷﻮد .ﺑﻪ اﻳﻦ دﻟﻴﻞ ﺑﻪ ﻣﺤﺾ ﺳﻮﺋﻴﭻﻛﺮدن ﺑﻪ PMرواﻟﻬﺎي BIOSدﻳﮕﺮ ﻗﺎﺑﻞ اﺳﺘﻔﺎده ﻧﺨﻮاﻫﻨﺪ ﺑﻮد.
ﮔﺮﭼﻪ PM ،80286را ﻓﺮاﻫﻢ ﻧﻤﻮد ،وﻟﻲ داراي ﻳﻚ ﻧﻘﻄﻪ ﺿﻌﻒ ﻋﻤﺪه ﺑﻮد و آن ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪ ﺑﻪﺻﻮرت ﻗﻄﻌﻪﺑﻨﺪيﺷﺪه 5ﺑﻮد ،ﻧﻪ ﺻﻔﺤﻪ ﺑﻨﺪي 6و از
اﻳﻦ ﻧﻈﺮ ﺑﺮ روي آن ﺳﻴﺴﺘﻤﻬﺎي ﻋﻤﻞ privilidgedﻧﻈﻴﺮ Unixﻗﺎﺑﻞ ﭘﻴﺎدهﺳﺎزي ﻧﺒﻮدﻧﺪ .اﻣﺎ 80386و i486ﺗﻤﺎﻣﻲ ﻗﺪرت PMرا در اﺧﺘﻴﺎر ﻗﺮار ﻣﻲدﻫﻨﺪ و ﭘﺲ
از آﻣﺪن آﻧﻬﺎ اﻓﺮاد و ﺷﺮﻛﺘﻬﺎي زﻳﺎدي ﺷﺮوع ﺑﻪ دورزدن ﻣﺸﻜﻼت داس و اﺳﺘﻔﺎده از ﻣﺰاﻳﺎي PMﺗﺤﺖ داس ﻧﻤﻮدﻧﺪ و ﺑﺮاي اﻳﻦ ﻣﻨﻈﻮر ﻛﺎرﺑﺮدﻫﺎي زﻳﺮ ﭘﻴﺸﻨﻬﺎد ﺷﺪ:
2-33ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه
PMدر ﺳﺎل 82و ﻫﻤﺰﻣﺎن ﺑﺎ 80286و ﺑﺮاي اﺳﺘﻔﺎده در ﺳﻴﺴﺘﻤﻬﺎي ﻋﻤﻞ ﭼﻨﺪﻛﺎره (MTOS) 8ﻣﻌﺮﻓﻲ ﺷﺪ .اﻣﺎ داس در ﺣﺎﻟﺖ واﻗﻌﻲ ﻛﺎر ﻣﻲﻛﻨﺪ و
ﺗﻚﻛﺎره 9اﺳﺖ و اﮔﺮ ﻣﻲﺧﻮاﺳﺖ ﻳﻚ MTOSﺑﺸﻮد ،ﺑﺎﻳﺪ ﺑﺎزﻧﻮﻳﺴﻲ ﻣﻲﺷﺪ ،ﻛﻪ اﻳﻦ ﻣﺸﻜﻼت ﻋﺪم ﺳﺎزﮔﺎري ﺑﺎ ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﻮﺟﻮد را داﺷﺖ .ﺑﻪ اﻳﻦ دﻟﻴﻞ ﻣﻴﻜﺮوﺳﺎﻓﺖ و
IBMﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﺟﺪﻳﺪي را ﺑﻪ ﻧﺎم OS/2ﻣﻌﺮﻓﻲ ﻛﺮدﻧﺪ ،ﻛﻪ ﺑﻪدﻟﻴﻞ ﻧﻴﺎز ﺑﻪ ﺳﺨﺖاﻓﺰار ﻗﺪرﺗﻤﻨﺪ و ﺣﺎﻓﻈﻪي زﻳﺎد ،ﭼﻨﺪان ﻣﺮﺳﻮم ﻧﺸﺪ .اﻣﺎ ﻣﻴﻜﺮوﺳﺎﻓﺖ ﺑﻌﺪاً ،اﺑﺘﺪا اﻗﺪام
ﺑﻪ ﻋﺮﺿﻪي ﮔﻮﻧﻪاي از ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ Unixﺑﺮاي ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎي ،PCﺑﺎ ﻧﺎم XENIXﻧﻤﻮد ،وﻟﻲ ﺑﻌﺪاً ﺑﺎ ﻓﺮوش آن ﺑﻪ ﺷﺮﻛﺖ ،SCOﻛﺎر ﺑﺮ روي آن را ﻣﺘﻮﻗﻒ ﻧﻤﻮده
و اﻗﺪام ﺑﻪ ﻋﺮﺿﻪي Windows 3.1و ﺳﭙﺲ Windows NTو آﻧﮕﺎه ﺳﺎﻳﺮ وﻳﻨﺪوزﻫﺎي 32ﺑﻴﺘﻲ ﻧﻤﻮد .ﺗﻤﺎﻣﻲ اﻳﻦ ﺳﻴﺴﺘﻤﻬﺎي ﻋﺎﻣﻞ ﻧﺎم ﺑﺮده ﺷﺪهMTOS ،
ﺑﻮده و در PMﻛﺎر ﻣﻲﻛﻨﻨﺪ.
_________________________________________________________________________________
Protcted Mode ١
Real Mode ٢
Segment:Offset ٣
Segment Descriptor ٤
segmented ٥
paging ٦
DOS extentions ٧
multitasking OSs ٨
single-task ٩
task switching ١٠
preemptive multutasking ١١
time slicing ١٢
OS privilidges ١٣
2-33 ﻓﺼﻞ :33ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه و داس
ﺣﺎﻓﻈﻪي ﻣﺠﺎزي :(VM) 2ﻧﻴﺎزﻫﺎي ﺣﺎﻓﻈﻪاي در ﻣﺤﻴﻄﻬﺎي ﭼﻨﺪﻛﺎرهاي زﻳﺎد اﺳﺖ و ﺑﻨﺎﺑﺮ اﻳﻦ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﺑﺎﻳﺪ ﺑﺘﻮاﻧﺪ از ﺣﺎﻓﻄﻪي اﺻﻠﻲ و •
دﻳﺴﻚ ﺑﻪﻋﻨﻮان swapاﺳﺘﻔﺎده ﻛﻨﺪ و ﻣﺴﺎﺋﻞ ﻣﺪﻳﺮﻳﺘﻲ را ﭘﺮدازﻧﺪه ﺗﺴﻬﻴﻞ ﻛﻨﺪ.
ﺛﺒﺎت :MSWاﻳﻦ ﺛﺒﺎت ﺑﺮاي ﺳﻮﺋﻴﭻ ﻛﺮدن ﺑﻪ PMﻗﺎﺑﻞ اﺳﺘﻔﺎده اﺳﺖ و داراي ﺑﻴﺘﻬﺎي زﻳﺮ اﺳﺖ:
ﺣﺎﻓﻈﻪي ﻣﺠﺎزي :ﻫﺮ ﺗﻮﺻﻴﻒﮔﺮ در GDTﻣﻲﺗﻮاﻧﺪ ﺗﻮﺻﻴﻒﮔﺮ ﻳﻚ LDTﺑﺎﺷﺪ .ﻫﻤﭽﻨﻴﻦ ﻫﺮ ﻛﺪام از اﻳﻦ دو ﺟﺪول ﻣﻲﺗﻮاﻧﺪ 8192ﺗﻮﺻﻴﻒﮔﺮ داﺷﺘﻪ
ﺑﺎﺷﺪ .ﻫﻤﭽﻨﻴﻦ ﻫﺮ ﺗﻮﺻﻴﻒﮔﺮ LDTﻣﻲﺗﻮاﻧﺪ ﻳﻚ ﻗﻄﻌﻪي 64Kرا ﺗﻮﺻﻴﻒ ﻛﻨﺪ .ﺑﻪ اﻳﻦ ﺗﺮﺗﻴﺐ ،ﭘﺮدازﻧﺪه ﻣﻲﺗﻮاﻧﺪ ﺑﻪ ﻓﻀﺎي ﺣﺎﻓﻈﻪي ﻣﺠﺎزي
8192*8192*64KB = 1GBدﺳﺘﺮﺳﻲ داﺷﺘﻪ ﺑﺎﺷﺪ ،ﻛﻪ ﻣﻲﺗﻮاﻧﺪ ﺷﺎﻣﻞ ﺣﺎﻓﻈﻪي اﺻﻠﻲ و دﻳﺴﻚ)ﺑﻪﻋﻨﻮان (swapﺑﺎﺷﺪ.
4-33ﺣﺎﻟﺖ ﻣﺠﺎزي86
ﺣﺎﻟﺖ ﻣﺠﺎزي 86ﻳﺎ 7V86ﺑﺮاي اﻳﺠﺎد ﺳﺎزش ﺑﻴﻦ PMو RMاﻳﺠﺎد ﺷﺪ .ﺑﺴﻴﺎري از ﺗﺴﻬﻴﻼت ﻣﺮﺑﻮط ﺑﻪ ،EMSﻧﻈﻴﺮ EMM386.SYSو
ﻣﺤﻴﻄﻬﺎي ﭼﻨﺪﻛﺎره ،ﻧﻈﻴﺮ DescView386از V86اﺳﺘﻔﺎده ﻣﻲﻛﻨﻨﺪ .وﻗﺘﻲ ﻳﻚ ﺳﻴﺴﺘﻢ در اﻳﻦ ﺣﺎﻟﺖ ﻛﺎر ﻣﻲﻛﻨﺪ،ﻛﺎﻣﭙﻴﻮﺗﺮ در ﺣﺎﻟﺖ اﺟﺮا در RMاﺳﺖ ،در ﺣﺎﻟﻴﻜﻪ
ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪ ،ﻣﺪﻳﺮﻳﺖ ﻛﺎرﻫﺎ ،و ﻗﻮاﻋﺪ ﻣﺮﺑﻮط ﺑﻪ اﻣﺘﻴﺎزات ،در PMﻋﻤﻞ ﻣﻲﻛﻨﻨﺪ .وﻗﺘﻲ ﻳﻚ ﺑﺮﻧﺎﻣﻪ را در V86اﺟﺮا ﻣﻲﻛﻨﻴﺪ ،آن ﺑﺮﻧﺎﻣﻪ ﻧﻈﻴﺮ ﻳﻚ ﻛﺎر ﻣﺴﺘﻘﻞ در
RMﻋﻤﻞ ﻣﻲﻛﻨﺪ و PMدر ﺣﻘﻴﻘﺖ از دﻳﺪ آن ﭘﻨﻬﺎن اﺳﺖ .ﺑﺮﻧﺎﻣﻪ ﻓﻜﺮ ﻣﻲﻛﻨﺪ ﻛﻪ ﻳﻚ ﻣﮕﺎﺑﺎت ﻓﻀﺎي ﻧﺸﺎﻧﻲ دارد و ﻧﺸﺎﻧﻲدﻫﻲ در آن ﻃﺒﻖ ﻫﻤﺎن ﻓﺮﻣﻮل ﺗﺒﺪﻳﻞ
ﻧﺸﺎﻧﻲ ﻣﻨﻄﻘﻲ ﺑﻪ ﻓﻴﺰﻳﻜﻲ SegmentAddress * 16 + OffsetAddressاﺳﺖ .ﺑﺮاي ﻣﺜﺎل در وﻳﻨﺪوز ،ﭘﻨﺠﺮهﻫﺎي داﺳﻲ ﻛﻪ در DOS-promptدر اﺧﺘﻴﺎر
ﻗﺮار ﻣﻲﮔﻴﺮﻧﺪ ،ﻛﺎرﺑﺮدي از اﻳﻦ ﺣﺎﻟﺖ اﺳﺖ.
_________________________________________________________________________________
user processes ١
vitual memory ٢
Global Descriptor Table ٣
Local Descriptor Table ٤
Load GDT ٥
Load LDT ٦
Virtual-86 mode ٧
3-33 ﻓﺼﻞ :33ﺣﺎﻟﺖ ﻣﺤﺎﻓﻈﺖﺷﺪه و داس
:VCPIدر ﺳﺎل 1989ﺑﻮﺳﻴﻠﻪي ﮔﺮوﻫﻲ از ﺷﺮﻛﺘﻬﺎي ﻛﺎﻣﭙﻴﻮﺗﺮي ﺗﺤﺖ رﻫﺒﺮي Phar Lapو Quadrateckﻣﻌﺮﻓﻲ ﺷﺪ .اﻳﻦ واﺳﻂ ﻫﺪف ﺑﺮﻃﺮف
ﻧﻤﻮدن ﻣﺸﻜﻼت ﻧﺎﺷﻲ از وﺟﻮد ﻫﻤﺰﻣﺎن ﺑﺴﻄﻬﺎي ،multitaskers ،DOSو ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﺪﻳﺮﻳﺖ ﺣﺎﻓﻈﻪ در ﻣﺎﺷﻴﻨﻬﺎي 80386و i486را دﻧﺒﺎل ﻣﻲﻧﻤﻮد.
VCPIﺑﻪ ﺗﻮاﺑﻊ ﺧﻮدش ،ﺗﺤﺖ ﻧﺎم Serverو ﺑﻪ ﺑﺮﻧﺎﻣﻪﻫﺎي اﺳﺘﻔﺎده ﻛﻨﻨﺪه از اﻳﻦ ﺗﻮاﺑﻊ ،ﺗﺤﺖ ﻧﺎم Clientارﺟﺎع ﻣﻲﻛﻨﺪ .اﻳﻦ واﺳﻂ ﺳﺮوﻳﺴﻬﺎي زﻳﺮ را
ﻓﺮاﻫﻢ ﻣﻲﻛﻨﺪ:
ﺳﻪ ﺗﺎﺑﻊ ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ) CR0اوﻟﻴﻦ ﺛﺒﺎت ﻛﻨﺘﺮل( و ﺛﺒﺎﺗﻬﺎي اﺷﻜﺎﻟﺰداﻳﻲ ﭘﺮدازﻧﺪه •
:DPMIاﻳﻦ واﺳﻂ اﺑﺘﺪاً ﺑﻪﻋﻨﻮان اﺳﺘﺎﻧﺪاردي ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ PMﻣﻌﺮﻓﻲ ﻧﺸﺪه ﺑﻮد ،ﺑﻠﻜﻪ در ﻃﺮاﺣﻲ Win 3.0اﻳﺠﺎد ﺷﺪ و ﺑﻪ دﻻﻳﻞ ﻧﺎﻣﻌﻠﻮم، •
ﻣﻴﻜﺮوﺳﺎﻓﺖ آﻧﺮا ﻣﻨﺘﺸﺮ ﻧﻤﻮد .اﻣﺎ ﺑﻌﺪاً در ﺳﺎل ،1990ﺷﺮﻛﺘﻬﺎي ﻣﻌﺮوﻓﻲ ﭼﻮن ﻣﻴﻜﺮوﺳﺎﻓﺖ ،اﻳﻨﺘﻞ ،ﺑﻮرﻟﻨﺪ IBM ،و ﻏﻴﺮه ﺗﺸﻜﻴﻞ ﮔﺮوﻫﻲ را ﺑﺮاي اﺳﺘﺎﻧﺪارد
ﻧﻤﻮدن آن دادﻧﺪ DPMI .ﭘﻮﺷﺶ ﻛﺎﻣﻠﺘﺮي را از اﻣﻜﺎﻧﺎت PMدر اﺧﺘﻴﺎر ﻗﺮار ﻣﻲدﻫﺪ ،ﻛﻪ ﺷﺎﻣﻞ ﻣﻮارد زﻳﺮ اﺳﺖ:
_________________________________________________________________________________
DOS Protected Mode Interface ١
Virtual Control Programming Interface ٢
exceptions ٣
DMA Virtualization ٤