Slide
Slide

آشنایی مقدماتی با برنامه نویسی اسمبلی
نویسنده: مسئول فنی در
۱۴ بهمن ۱۳۹۵
[ آخرین به روزرسانی در ۱۷ بهمن ۱۳۹۵ ]

در حال تکمیل شدن
 

برنامه همان کلمه آشنا برای همه ما است، در واقع برنامه مشخص کننده انجام یکسری از کارها با ترتیب معین برای رسیدن به هدف مشخص است. "برنامه نویسی" نیز نوشتن این برنامه است. در واقع تمام افراد که دنبال رسیدن به هدف مشخص هستند "برنامه" دارند و در واقع  "برنامه نویس" هستند.
"برنامه نویسی" کامپیوتر نیز فرق چندانی با برنامه نویسی زندگی نمی کند. در اینجا نیز شما به دنبال حل یک مسئله هستید، که برای رسیدن به جواب باید روال خاصی را دنبال کنید.
برنامه کامپیوتر ممکن است یک مسئله ساده مانند حل یک فرمول ریاضی، جستجوی یک داده و یا یک مسئله متوسط مانند کنترل دمای یک اتاق، بدست آوردن هارمونیک های سیگنال مغز، پیش بینی رفتار ترافیک شهری و یا پیداکردن یک شیی در یک تصویر باشد.
ویرایشگرها، پایگاه داده، بازی ها، پخش صدا و نمایش فیلم همه برنامه هستند.
در هر حالت شما روی یک سری داده، محاسبات ریاضی و یا تصمیم گیری های خاصی را به ترتیب دقیق انجام می دهید.
"برنامه نویسی" ترتیب دقیقی از "دستورالعمل" هاست که به کامپیوتر می گوید، به ترتیب چکار کند. برای یاد گرفتن برنامه نویسی تنها کافی است، شما "دستورالعمل" ها را یاد بگیرید. نوشتن "دستورالعمل" با ترتیب مناسب بستگی به آشنایی شما با حل مسئله مورد نظر و قدرت تجزیه و تحلیل شما دارد.
متاسفانه به دلیل سیستم آموزشی غلط، اغلب دانشجویان روش حل مسئله را نمی دانند و از قدرت استنتاج  پایینی برخوردارند. ( سیستم آموزش بیشتر بر اساس روش استقرایی است.)
لذا توصیه می شود، دانشجویان درس های ریاضی، سیگنال و سیستم، کنترل و... را جدی بگیرند. البته پشتکار و تمرین نیز نقش زیادی در برنامه نویسی دارد، معمولاً آدم های کم حوصله برنامه نویس خوبی نمی شوند. نکته آخر اینکه حل پیچیده ترین مسائل، به کمک محاسبات ساده ریاضی مانند جمع،تفریق،ضرب، تقسیم، مقایسه و... میسر است.

آشنایی با دستورالعمل ها : 
هر زبان برنامه نویسی، دستورالعمل های خاص خودش را دارد، تعداد این دستورالعمل ها کم است و براحتی می توان با آن آشنا شد. اگر شما با دستورالعمل های یک میکروپروسسور یا میکروکنترلر آشنا باشید، براحتی می توانید با یک میکروپروسسور و یا میکروکنترلر دیگر آشنا شوید، چون نقاط مشترک زیادی دارند.
دستورالعمل ها در زبان اسمبلی یکسری عملیات ساده ریاضی، منطقی، انتقال داده، مقایسه، پرش شرطی و... هستند، که قبل از برنامه نویسی لازم است با آن ها آشنا شویم. ( یادگیری دقیق و حفظ کردن آن ها لازم نیست و کافی است بدانیم چه دستورالعملی وجود دارد.)
برای شروع دستورالعمل ADD را معرفی می کنیم. بله همانطور که حدس زدید، می خواهم دستورالعمل جمع را برایتان بگویم.
دستورالعمل دارای یک Syntax یا نحوه نگارش است، در Syntax یک دستورالعمل، عمل (Operation) و عملوندها (operands) مشخص می شوند. هرچند ممکن است در بعضی دستورالعمل ها عملوندها به صورت ضمنی باشند و در دستورالعمل نیایند.
دستورالعمل ADD به شکل زیر نشان داده می شود، ابتدا عمل ADD و به دنبال آن عملوندها آمده اند. نحوه اجرای دستورالعمل ADD در سمت راست آمده است. همانطور که می بینید در این دستورالعمل دو عملوند ( رجیستر )  Rd و Rr  با هم جمع و حاصل در Rd به عنوان رجیستر مقصد قرار می گیرد ( در غالب میکرو ها مشابه AVR نتیجه محاسبات، در رجیستر اول ( سمت چپ ) قرار داده می شود.)

Add Operation

نکته مهم : در برنامه نویسی باید Syntax یا نحوه نگارش یک دستورالعمل را کاملاً رعایت کنید، در غیر اینصورت اسمبلر از شما خطای Syntax Error می گیرد. برای مثال شما نمی توانید، فاصله بین ADD و Rd  را رعایت نکنید و یا بین دو عملوند Rd  و Rr به جای علامت , علامت دیگری بگذارید.
به فرم نمایش خلاصه شده دستورالعمل سمبل یا (Mnemonic) می گویند. در اینجا ADD ، سمبل دستورالعمل جمع است. هرچند هر سازنده میکروپروسسور یا میکروکنترلر برای خودش یک مجموعه دستورالعمل و سمبل های خاص دارد، اما غالب آن ها مشابه هستند. در میکروکنترلر LPC1768 امکانات دستورالعمل ها بیشتر است و از انعطاف پذیری بیشتری برخوردارند. بیایید دستورالعمل ADD در ARM را ببینیم:      op{S}{cond} {Rd,} Rn, Operand2

در اینجا OP همان عمل یا Operation است، که در اینجا ADD   ،  SUB  یا ...  می تواند باشد.
{S} یک پسوند اختیاری است و مبین اینست که آیا فلگ ها پس از انجام عمل بروز شوند. اگر پسوند {s} را قرار ندهیم، اجرای این دستورالعمل روی فلگ های پروسسور اثری نخواهد داشت.
{Cond} یک پسوند اختیاری دیگر است و شرط اجرای دستورالعمل است، و فقط در صورت برقراری شرط دستورالعمل اجرا می شود. شرط ها می توانند EQ,NE,MI,HI,LT,... باشند.
Rd رجیستر مقصد است و اگر نیاید Rn رجیستر مقصد خواهد بود.
Rn عملوند اول را در خود دارد.
Operand2 عملوند دوم است و در فرم های مختلف ظاهر می شود.
Instruction Syntax
چند مثال:

ADD R2, R1, R3 ; R2=R1+R3
SUBS R8, R6, #240 ; R8=R6-240 & Sets the flags on the result
RSB R4, R4, #1280 ; R4=1280-R4 , Reverse Subtract (Subtracts contents of R4 from 1280)
ADCHI R11, R0, R3 ; Only executed if C flag set and Z flag clear

نظرات کاربران
نظری ارسال نشده است.
نظر بدهید

ایمیل شما پنهان می ماند.