زبان اسمبلی
هدف اين درس درک عميق تر نحوه کار کامپيوتر در سطح پايين و در نتيجه توليد نرم افزارهای کارآمدتر در سطوح بالا می باشد. يادگيری زبان اسمبلی به آشنائی بيشتر با طريقه کارکردن سخت افزار، برنامه ها و سيستم عامل با يکديگر کمک می کند.
در اين درس استفاده از دستورات اسمبلي و نوشتن برنامه هاي ساده اسمبلي را فراخواهيد گرفت.
مقدمه
زبان اسمبلی قديمی ترين زبان برنامه نويسی سطح پايين بعد از زبان ماشين است که ساختار و عملکردی وابسته به ماشين دارد و وسيله خوبی برای يادگيری نحوه کار کامپيوتر، سيستم عامل، کامپايلرها و زبان های سطح بالا است .
مقایسه زبان اسمبلی و زبان های سطح بالا
سیستم های عددی
محاسبات کامپيوتري در مبناي دو انجام مي شود. به طور معمول از سيستم عددي هگزادسيمال براي نمايش اعداد باينري استفاده مي شود.
نمایش داده ها
اکثر ساختمان های داده انتزاعی هستند که توسط برنامه نويس با مجموعه ای از دستورالعمل ها تعريف می شوند. نوع های داده پايه (نظير اعداد باينری صحيح يا مميز شناور، رشته های بيتی، کاراکترها و غيره ) مستقيما در سخت افزار همراه با مجموعه ای از دستورالعمل طراحی می شوند. يک برنامه نويس زبان اسمبلی بايد بداند چگونه سخت افزار اين انواع داده های اصلی را پياده سازی می کند.
نمايش اعداد صحيح - روش علامت مقدار
جدول تعداد بيت ها و محدوده مقادير ممکن داده های عددی صحيح علامت دار به روش مکمل2
ساختمان کامپیوتر
يک سيستم کامپيوتری ترکيب کاملي از سخت افزار و نرم افزارهای سيستمی است که باعث می شود ماشين مفيد و وظيفه مندي برای کار معينی بشود.
اجزای اصلی سخت افزار يک ريز کامپيوتر شامل:
• پردازنده مرکزی
• حافظه
• صفحه کليد به عنوان ورودی
• صفحه نمايش به عنوان خروجی
• يک يا چند ديسک درايو برای ذخيره برنامه ها و داده ها
پردازندهای اینتل
با توجه به اينکه دستورات اسمبلي 8086 در قسمت ها آينده بررسي مي شوند، در اين صفحه با نحوه آدرس دهي حافظه و ثبات هاي اين پردازنده آشنا خواهيد شد.
Debug
برنامه Debug محيطی برای بررسی فايل های مقصد دودوئی و اجرائی است. برنامه امکان انجام تغييرات جزئی در يک برنامه اجرائی را فراهم می کند بدون اينکه نياز به دوباره اسمبل کردن آن باشد.
دستورات اسمبلی
يک برنامه پيچيده از کنار هم قرار دادن دستورات ساده اسمبلی شکل می گيرد. هنگام شروع برنامه نويسی به زبان اسمبلی نيازی به يادگيری کليه دستورات نيست، بنابراين برخی از پرکاربردترين دستورات 80x86 در ادامه شرح داده خواهند شد. دستورات به صورت زير گروه بندی شده اند.
برنامه نویسی
در اين بخش ساختار کلی يک برنامه به زبان اسمبلی توضيح داده می شود. به نحوه تعريف متغيرها و ثابت ها، استفاده از راهنماهای اسمبلر و اسمبل کردن و اجرای برنامه نيز اشاره شده است.
ماکرو
ماکرو مجموعه ای از دستورات است که مشابه زيربرنامه يکبار نوشته می شود و چندين بار استفاده می شود.
ماکرو (macro) نام مخففی برای مجموعه ای از دستورالعمل ها، راهنماها يا ماکروهای ديگر است که يکبار نوشته می شود و به هر تعداد دفعات لازم قابل استفاده است.
اسمبلر هنگام ترجمه برنامه در مواجهه با نام ماکرو دستورات معادل را قرار می دهد.
پشته
پشته يک ليست LIFO است که می تواند به عنوان محلی مناسب برای ذخيره داده های موقتی استفاده شود. پشته برای فراخوانی زيربرنامه ها، ارسال پارامترها و متغيرهای محلی هم به کار می رود. دستورات ابتدائی پشته push و pop هستند.
زیر برنامه
زير برنامه (procedure) مجموعه ای از دستورات است که يکبار تعريف و به دفعات استفاده می شود. با بکارگيری زيربرنامه خوانائی برنامه بالاتر رفته و از تکرار دستورات مشابه جلوگيری می شود. علاوه براين اشکال زدائی و تغيير برنامه آسان تر انجام گيرد.
وقتی يک زيربرنامه فراخوانی می شود کنترل اجرای برنامه به زيربرنامه هدايت می شود. آدرس دستورالعمل بعدی در پشته ذخيره می شود بنابراين هنگامی که زيربرنامه اجرا شد کنترل اجرا قادر خواهد بود به خط بعد از فراخوانی زيربرنامه بر می گردد.
دستورات فراخوانی و بازگشت زيربرنامه
وقفه ها
گاهی اوقات جريان عادی اجرای يک برنامه برای پردازش رويدادی که نياز به پاسخ سريع دارد متوقف می شود. سخت افزار کامپيوتر برای مديريت اين رويدادها مکانيسمی به نام وقفه (interrupt) را دارد.
مثال. وقتی mouse حرکت می کند، سخت افزار mouse برنامه جاری را متوقف می کند تا حرکت mouse گرفته شود( برای حرکت مکان نمای mouse روی صفحه نمايش).
وقتی CPU يک سيگنال وقفه را تشخيص می دهد، فعاليت جاری خود را متوقف می کند و روتين خاصی را فراخوانی می کند که روتين وقفه (interrupt handler) نام دارد. اين روتين علت وقوع وقفه را تشخيص می دهد و عکس العمل مناسب را انجام می دهد.
بيشتر روتين های وقفه بعد از پايان يافتن کنترل اجرا را به برنامه متوقف شده بازمی گردانند. آنها کليه مقادير ثبات ها را به وضعيت قبل از توليد وقفه بر می گردانند. بنابراين برنامه متوقف شده به گونه ای به اجرا ادامه می دهد که هيچ اتفاقی نيافتاده است به جز اين که سيکل های CPU را از دست می دهند.
وقتی دو يا چند وقفه همزمان با هم اتفاق می افتند، CPU از سيستم الويت استفاده می کند و می تواند در طی اجرای بخش بحرانی يک برنامه وقفه ها را غيرفعال کند. وقتی دارد يک روتين وقفه را اجرا می کند کليه وقفه های با الويت کمتر يا، تا زمان خاتمه اجرای روتين، غير فعال هستند.
پورت ها
درحال آماه سازی
دستورات ۸۰۸۶
درحال آماه سازی
با نظرات خود ما را یاری کنید
تعداد بازديد : 3229