اسمبلي - كوتاه از اسمبلي مادر همه زبانها
اين زبان مادرهمه زبانها
اگر قصد داريد كه برنامهنويسي با زبان اسمبلي را آغاز كنيد و روشهاي قديمي و نزديك به زبان ماشين را براي رسيدن به هدفهاي برنامهسازي خود در پيش بگيريد، لازم است در زمينههاي مختلفي، اطلاعات كسب كنيد كه در ادامه به مهمترين آنها اشارهاي اجمالي خواهيم داشت.
سيستم اعداد
با اينكه با ورود به دنياي اسمبلي، از زبان ماشين و كدهاي عددي مربوط به آن فاصله گرفتهايم، اما نبايد فراموش كرد كه اسمبلي يك زبان نزديك به زبان ماشين است و زبان ماشين نيز چيزي نيست جز عدد و رقم و صفر و يك.
در واقع اگر ميخواهيم در سيستم اعداد قابل فهم رايانه محاسبات و عمليات منطقي خود را انجام دهيم بايد با روشها و قوانين سيستم اعداد در مبناي 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براي پاك كردن محتويات نمايشگر به كار ميرود.
اطلاعات بسيار ديگري هستند كه براي برنامهنويسي سيستم بايد به آنها احاطه داشت. هر دانشي در مورد سيستم و كاركرد آن، به شما كمك خواهد كرد.
با استفاده از كتابهاي مختلف و راهنماهاي زبان اسمبلي كه در اينترنت موجودند ميتوانيد شروع خوبي براي اين زبان داشته باشيد.
روزنامه جام جم ضميمه كليك