|
وقفه ها،
ورودي و خروجي :
يکي از جنبه هاي مهم هر
زبان، از جمله زبان اسمبلي که بايد مورد بررسي قرار گيرد، ورودي و خروجي
داده ها ست .
در اسمبلي ، ورودي و
خروجي داده ها با استفاده از وقفه صورت مي گيرد . لذا پس از تعريف وقفه و چگونگي
پياده سازي ان در در سيستم ، به چگونگي انجام اعمال ورودي و خروجي به وسيله
وقفه مي پردازيم .
چ.ن در اين فصل با ورودي
و خروجي در صفحه نمايش سروکار داريم، بررسي مختصري از وضعيت صفحه نمايش
ضروري به نظر مي رسد. به همين دليل ، ابتدا به تشريح صفحه نمايش مي پردازيم.
تشريح صفحه نمايش :
چون خروجي برنامه بايد در
صفحه نمايش ظاهر شود، بايد اشنايي مختصري با آن داشته باشيد. اين نکته را
ياد آوري مي کنيم که ، هر صفحه نمايش داراي 25 سطر و 80 ستون است. سطرها از صفر
تا 24 و ستون ها از صفر تا 79 شماره گذاري مي شوند. مختصات صفحه نمايش در
شکل زير آمده است. مختصات صفحه به صورت (x,y ) بيان
مي شود که x بيانگر ستون و y بيانگر
سطر است.
در حافظه سيستم ، فضائي
به نام فضاي فضاي نمايش دارد که اطلاعات موجود در آن فضا، در صفحه نمايش
ظاهر مي شوند. آدرس شروع اين حافظه در صفحه نمايش تک رنگ ، B000h است و
اندازه آن 4k است.
2k از آن
مربوط به کاراکترهايي است که بايد نمايش داده شوند و 2k ديگر مربوط به صفت کاراکترهاست. به عبارت
ديگر، هر کاراکتر در حافظه نمايش ، دو بايت را اشغال مي کند . يک بايت براي
ذخيره کد کاراکتر و بايت ديگر براي صفت کاراکتر. صفت کاراکتر، چگونگي نمايش
کاراکتر را در صفحه مشخص مي کند: چشمک زن باشد يا خير، کم رنگ باشد يا پررنگ
و غيره.
توجه به اين نکته ضروري
است که ، آدرس حافظه نمايش ممکن است در تمام کامپيوتر ها يکسان نباشد، لذا
قبل از انجام عمليات ورودي و خروجي ، براي پيدا کردن آدرس حافظه نمايش از
وقفه هاي 10h و 21h استفاده کنيد.

مفهوم وقفه
ها :
وقفه ، سيگنالي از دستگاه
جانبي يا برنامه ي در حال اجرا است که عمل خاصي را درخواست مي کند. وقتي
برنامه ي در حال اجرا، وقفه اي را دريافت مي کند، اجراي برنامه به تعويق مي
افتد و محتويات ثبات هاي cs و IP در پشته
نگهداري ميشود و کنترل اجراي برنامه، به زير برنامه اي مي رود تا به وقفه
پاسخ دهد. هر وقفه، زيربرنامه خاصي دارد که به آن پاسخ مي دهد. پس از اجراي
زيربرنامه پاسخگوئي به وقفه، محتويات CS و IP از پشته
بازيابي مي شوند و اجراي برنامه اي که به تعويق افتاده بود، از سر گرفته مي
شود. وقفه ها به طور کلي به دو دسته اند:
وقفه هاي سيستم
وقفه هايي که برنامه نويس
مي تواند آن ها را توليد کند.
وقفه هايسيستم به نوبه خود
به دو دسته تقسيم مي شوند :
وقفه هاي سخت افزاري
وقفه هاي نرم افزاري
وقفه هاي سخت افزاري
همانطور که از نامشان مشخص است، به وسيله سخت افزار ايجاد مي گردد. وقفه هاي
نرم افزاري شامل وقفه هاي DOS , BIOS است. توجه داريد که DOS و BIOS بخش
هائي از سيستم عامل هستند که اعمال خاصي را انجام مي دهند. بعضي از وقفه ها BIOS
عبارتنداز : 5h ، 10h ، 11h ، 13h ، 14h ، 15h ، 16h ، 17h . وقفه DOS وقفه
شماره 21h است. هر
کدام از وقفه ها کاربرد هاي خاصي دارند که بر حسب نياز، استفاده مي شوند.
تعداد 256 وقفه در سيستم
مورد استفاده قرار مي گيرد که از صفر تا 255 شماره گذاري مي شوند. آدرس زير
برنامه هايي که به وقفه پاسخ مي دهند، در جدولي به نام بردار وقفه قرار
دارد. وقتي وقفه اي اتفاق مي افتد، با استفاده از شماره وقفه، آدرس
زيربرنامه اي که بايد به وقفه پاسخ دهد از جدول بردار وقفه پيدا مي شود و
کنترل اجراي برنامه به اين ادرس مي رود تا زيربرنامه وقفه را اجرا کند. چون
256 وقفه وجود دارد و آدرس شروع زيربرنامه ي وقفه، 32 بيتي ( 4 بايت) است،
ميزان حافظه که به بردار وقفه اختصاص مي يابد، 1024 بايت
است و از آدرس 0h تا 3FFh را اشغال مي کند. يعني 1024
بايت اول حافظه کامپيوتر ، به جدول برداري وقفه اختصاص دارد. براي پيدا کردن
آدرس شروع زيربرنامه وقفه، شماره آن وقفه در 4 ضرب مي شود. عددي که حاصل مي
شود، محلي از جدول بردار وقفه است که آدرس زيربرنامه وقفه در اين محل وجود
دارد. بعنوان مثال، آدرس زيربرنامه پاسخگوئي به وقفه شماره 5، در محل 14 h قرار دارد، زيرا 5*4=20 و عدد 20 در مبناي 10
، برابر با 14h (در
مبناي 16) است.
مفهوم تابع
وقفه : هر وقفه ممکن است داراي خدمات مختلفي باشد و بر اساس آن، اعمال
گوناگوني را انجام دهد. خدمات مختلف هر وقفه را تابع آن وقفه مي گويند و
تابع وقفه ها نيز از صفر شماره گذاري مي شوند.
اجراي وقفه
ها در زبان اسمبلي :
براي اجراي وقفه ها در
زبان اسمبلي از دستور INT به صورت زير استفاده مي
شود:
شماره
وقفه
INT
اگر وقفه اي که توسط
دستور INT اجرا مي شوند، داراي تابع باشد، براي اجراي
تابعي از وقفه، شماره تابع بايد در ثبات AH قرار
گيرد. بعنوان مثال، براي اجراي تابع 4Ch وقفه 21h بايد از دستورات زير استفاده کرد( اين تابع به
اجراي برنامه خاتمه مي دهد).
Mov ax, 4c00h
Int 21
مدل هاي
حافظه :
مدل حافظه الگويي است که
چگونگي استفاده از سگمنت ها و ترکيب آنها را مشخص مي کند. هر مدل حافظه،
محدوديت هاي خاص خحودش را دارد، از جمله حداکثر فضايي که براي برنامه و داده
هاي برنامه مهياست. اما مهمترين چيزي که راجع به مدل هاي حافظه بايد دانست
تاثير آنها بر چگونگي دستيابي برنامه به داده ها و زيرروال هاست.
بطور کلي ، انتخاب مدل
حافظه ، انتخابي است بين سرعت اجراي برنامه و قابليت اندازه برنامه. در مدل
حافظه اي که براي داده ها، حداکثر يک سگمنت 64k تدارک مي بيند، فضاي آدرس دهي داده ها ، 16
بيت خواهد بود. بدين ترتيب ، داده ها با سرعت حداکثر بيشتري دستيابي مي
شوند، زيرا آدرس 16 بيتي مي تواند پس از آدرس سگمنت آفست 332 بيتي بار
شود. به طور مشابه ، مدل حافظه اي که زيرروال ها را در سگمنت جداگانه قرار
مي دهد، لازم است ثبات هاي cs و IP در
هنگام فراخواني زيرروال ها، بار شود.
مدل هاي مختلف حافظه، به
وسيله تعداد بايت هايي که مي تواند توسط دستورالعمل ها داده ها مورد استفاده
قرار گيرد، مشخص مي شوند. بعنوان مثال وقتي 64K براي دستورالعمل ها اختصاص مي يابد، معنايش
اين است که تمام دستورالعمل ها بايد در يک سگمنت 64K باشند. تمام مدل هاي حافظه جز مدل tiny فايل exe ايجاد
مي کنند. مدل tiny فايل com ايجاد
مي نمايد.
تمام مدل هاي حافظه به جز
مدل مسطح، در حالت واقعي قابل استفاده اند. مدل مسطح در حالت حفاظت شده ي
پردازنده قابل استفاده است.
|