زبان اسمبلی

زبان اسمبلی ، که معمولاً به اسم اسمبلی (Assembly) گفته می شود ، یک شکل زبان ماشین قابل خواندن برای مردم است. هر معماری رایانه از زبان اسمبلی خود استفاده می کند ، بنابراین پردازنده هایی که از معماری مبتنی بر x86 ، PowerPC یا TI DSP استفاده می کنند ، هر یک از زبان خود استفاده می کنند. زبان ماشین الگوی بیت های کد کننده عملیات پردازنده است. اسمبلی آن بیت های خام را با نمادهای خوانا تر که مونمونیک نامیده می شود جایگزین می کند. (برای آشنایی بیشتر با ریزپردازنده ها به این لینک رجوع کنید)

به عنوان مثال ، کد زیر یک عملیات واحد در زبان ماشین است. 0001110010000110 به دلایل عملی ، برنامه نویس ترجیح می دهد از نمای اسمبلی معادل برای عملیات قبلی استفاده کند.

ADD R6,R2,R6 ;    Add $R2 to $R6 store in $R6  این یک خط اسمبلی معمولی است. کد op ADD به پردازنده دستور می دهد که عملوندهای R2 و R6 را که محتویات  R2 هستند به R6 اضافه کند و نتایج را در رجیستر R6 ذخیره کند. “؛” نشان می دهد که همه چیز بعد از آن یک نظر است و توسط سیستم استفاده نمی شود.

اسمبلی دارای نگاشت یک به یک به زبان ماشین است. بنابراین ، هر خط مونتاژ مربوط به عملیاتی است که توسط پردازنده قابل انجام است. این امر در مورد زبان های سطح بالا صدق نمی کند. مونتاژ کننده مسئول ترجمه از زبان اسمبلی به ماشین است. عملیات معکوس توسط دستگاه جدا کننده تکمیل می شود.

دستورالعملهای مونتاژ برخلاف زبانهای سطح بالا بسیار ساده است. اغلب آنها فقط یک عملیات واحد را انجام می دهند. توابع پیچیده تر باید از توابع کوچکتر ساخته شوند.

موارد زیر انواع متداول دستورالعمل ها هستند:

  • حرکت می کند:
    یک ثبات، را روی یک مقدار ثابت ثابت تنظیم کنید
    انتقال داده ها از مکان حافظه به ثبت یا انتقال داده از ثبات به مکان حافظه . قبل از انجام محاسبات ، همه داده ها باید از حافظه خارج شوند. به طور مشابه ، نتایج باید پس از محاسبه نتایج در حافظه ذخیره شوند.
    خواندن و نوشتن داده ها از دستگاه های سخت افزاری و لوازم جانبی

 

  • محاسبه:
    جمع ، تفریق ، ضرب یا تقسیم. به طور معمول ، مقادیر دو ثبات به عنوان پارامتر استفاده می شود و نتایج در یک ثبات ثبت می شود
    انجام عملیات بیتی conjunction/disjunction ، (پیوند/جدا) شدن ( or / and) بیت های مربوطه در یک جفت رجیستر ، یا نفی (not) هر بیت در یک ثبت
    مقایسه دو مقدار در رجیسترها (> ، <،> = ، یا <=)

 

  • جریان کنترل:
    به مکان دیگری در برنامه بروید و دستورالعمل ها را در آنجا اجرا کنید
    در صورت وجود شرایط خاص ، به مکان دیگری بروید (branch)
    به مکان دیگری بروید ، اما مکان دستورالعمل بعدی را به عنوان نقطه ای برای بازگشت به آن ذخیره کنید

 

مزایای اسمبلی

بزرگترین مزیت برنامه نویسی اسمبلی سرعت خام است. یک برنامه نویس کوشا باید بتواند یک قطعه کد را با حداقل تعداد عملیات مورد نیاز بهینه کند. ضایعات کمتری با دستورالعمل های اضافی تولید می شود. با این حال ، در بیشتر موارد ، برای تولید کد بهتر از نویسنده کامپایلر ، نیاز به اطلاعات عمیق از دستورالعمل پردازنده دارد. کامپایلرها به منظور بهینه سازی هرچه بیشتر کد شما نوشته می شوند و به طور کلی ، نوشتن کد کارآمدتر از آن دشوار است.

برنامه نویسی سطح پایین به سادگی با اسمبلی انجام می شود. برخی از وظایف وابسته به سیستم که توسط سیستم عامل ها انجام می شوند به سادگی نمی توانند به زبانهای سطح بالا بیان شوند. اسمبلی اغلب در نوشتن درایورهای دستگاه استفاده می شود ، کد سطح پایین که مسئول تعامل بین سیستم عامل و سخت افزار است.

پردازنده های موجود در فضای تعبیه شده ، مانند ez430 ، بیشترین پتانسیل را در استفاده از اسمبلی دارند. این سیستم ها منابع محاسباتی بسیار محدودی دارند و اسمبلی حداکثر عملکرد این پردازنده ها را امکان پذیر می کند. با این حال ، با پیشرفت تکنولوژی ، حتی کمترین قدرت میکروکنترلر با همان هزینه کم می تواند قوی تر شود.