۱۳۸۷ دی ۷, شنبه

اين زبان مادر همه زبان ها Assembly

اين زبان مادر همه زبان ها   اگر قصد داريد كه برنامه نويسي با زبان اسمبلي را آغاز كنيد و روش هاي قديمي و نزديك به زبان ماشين را براي رسيدن به هدف هاي برنامه سازي خود در پيش بگيريد، لازم است در زمينه هاي مختلفي، اطلاعات كسب كنيد كه در ادامه به مهم ترين آنها اشاره اي اجمالي خواهيم داشت.

سيستم اعداد

با اين كه با ورود به دنياي اسمبلي، از زبان ماشين و كدهاي عددي مربوط به آن فاصله گرفته ايم، اما نبايد فراموش كرد كه اسمبلي يك زبان نزديك به زبان ماشين است و زبان ماشين نيز چيزي نيست جز عدد و رقم و صفر و يك.
در واقع اگر مي خواهيم در سيستم اعداد قابل فهم رايانه محاسبات و عمليات منطقي خود را انجام دهيم بايد با روش ها و قوانين سيستم اعداد در مبناي 2 (binary)  آشنايي داشته باشيم. اعدادي كه ما در دنياي واقعي با آنها به انجام محاسبات خود مي پردازيم در مبناي 10 (decimal) هستند. يعني از ارقام صفر تا 9 تشكيل شده اند.
بنابراين علاوه بر انجام محاسبات در مبناي 2، بايد بتوانيم اعمال تبديل از مبناي 10 به 2 و برعكس را نيز انجام دهيم.
زماني كه محاسبات در مبناي 2 انجام مي شود هر عدد شامل تعداد زيادي رقم خواهد بود كه تعداد اين ارقام در مبناي 2 از هر مبناي ديگري بيشتر خواهد بود. در نتيجه كار با آن كمي مشكل خواهد بود. در سيستم اعداد مبناهاي ديگري مثل مبناي 8 و 16 كه به ترتيب به آنها اكتال (octal) و هگزادسيمال (hexadecimal)  گفته مي شود نيز به كار مي رود.
در واقع در مبناي 8 و 16 به ترتيب هر 3 و 4 رقم مبناي 2 تنها به يك رقم تبديل مي شود و به اين ترتيب حجم ارقام نوشته شده به يك سوم و يك چهارم كاهش مي يابد. پس با دانستن اعمال تبديل اين مبناها به يكديگر و انجام محاسبات مربوط به آنها مي توان به سيستم اعداد در دنياي رايانه وارد شد.

ساختمان پردازنده

شما بايد با ساختمان پردازنده، تعداد و انواع ثبات ها، پرچم ها و ... و كاربرد هريك از آنها آشنا باشيد. هنگام برنامه نويسي معمولا يك سري قراردادها و پيش فرض ها براي به كارگيري ثبات ها در محاسبات وجود دارد كه بدون اطلاع از آنها، برنامه نويسي به اين زبان غيرممكن خواهد بود.

منابع مورد نياز براي اجرا

به هنگام ساخت يك فايل اجرايي نيازمند يك سري اعمال و رزرو كردن منابع مورد نياز براي برنامه خود خواهيد بود. در زبان هاي سطح بالا، اين امور توسط مترجم زبان به طور خودكار انجام مي شود، اما در اسمبلي، اين كار به عهده برنامه نويس است. بايد با انواع ساختمان داده هاي قابل استفاده در حافظه و طريقه كار هر كدام آشنايي داشته باشد تا بتواند در مواقع لزوم به درستي از امكانات موجود بهره گيرد.

دستور العمل ها

هر زبان برنامه نويسي تعدادي كلمه كليدي و يك گرامر دارد. هر برنامه نويس علاوه بر اين كه بايد به اين كلمات كليدي و گرامر آشنايي كامل داشته باشد بهتر است به طريقه كار آنها نيز احاطه داشته باشد.
هر چه اين آگاهي ها بيشتر باشد، خلاقيت در برنامه نويسي بيشتر بروز مي كند و تفاوت برنامه نويس ها و برنامه هاي مختلف در همين نكات خواهد بود. به عنوان يك مثال ساده دستور mov براي عمل انتساب به كار مي رود.
اگر بخواهيم مقدار ثباتAX  را برابر با صفر قرار دهيم مي توانيم از  دستورQ، mov AX استفاده كنيم.
اين اولين چيزي است كه براي اين كار به ذهن مي رسد. اما اگر طريقه عملكرد دستورXor  را بدانيم و همچنين آگاه باشيم كه سرعت دستور Xor  بيشتر از mov  است، مي توانيم براي انتساب مقدار صفر به ثبات AX از دستور AX ،Xor AX استفاده كنيم. البته هر دوي اين دستورات در مقايسه با كارهاي ما بسيار سريع هستند و اگر قرار باشد يك بار اجرا شوند، تفاوت محسوسي در سرعت برنامه نخواهيم ديد، اما تفاوت در جايي احساس مي شود كه همين دستور در يك چرخه يا loop قرار مي گيرد و قرار است هزاران بار انجام شود. در آن زمان است كه تفاوت ها چشمگير و محسوس خواهد شد.

وقفه ها

در سيستم تعدادي وقفه وجود دارد كه هر كدام كاربرد خاصي دارند. وقفه سيگنالي از دستگاه جانبي يا برنامه در حال اجراست كه عمل خاصي را درخواست مي كند.
وقتي برنامه در حال اجرا، وقفه اي را دريافت مي كند، اجراي برنامه به تعويق مي افتد و كنترل اجراي برنامه به زيربرنامه اي مي رود تا به وقفه پاسخ دهد. هر وقفه زيربناي خاصي دارد كه به آن پاسخ مي دهد. بعد از اتمام كار وقفه، اجراي برنامه از همان نقطه كه قطع شده بود ادامه پيدا خواهد كرد. به عنوان مثال: تابع06H  از وقفه 10H براي پاك كردن محتويات نمايشگر به كار مي رود.
اطلاعات بسيار ديگري هستند كه براي برنامه نويسي سيستم بايد به آنها احاطه داشت. هر دانشي در مورد سيستم و كاركرد آن، به شما كمك خواهد كرد.
با استفاده از كتاب هاي مختلف و راهنماهاي زبان اسمبلي كه در اينترنت موجودند مي توانيد شروع خوبي براي اين زبان داشته باشيد.

هیچ نظری موجود نیست: