کاربرد زبان اسمبلی – زبان اسمبلی چیست و چه ویژگی هایی دارد؟


در این مطلب، به پرسش زبان اسمبلی چیست پاسخ داده میشود و کاربرد زبان اسمبلی به طور کامل از گذشته تا امروز مورد بررسی قرار میگیرد.
مقدمهای بر زبان اسمبلی
زبان اسمبلی (Assembly Language) یک زبان برنامهنویسی سطح پایین (Low-Level Programming Language) است.دستورهای زبان اسمبلی به کد ماشین و در نتیجه، به سختافزار بسیار نزدیک هستند. به همین دلیل، فراگیری زبان اسمبلی دشوار و کاربردهای آن، منحصر به برخی از زمینههای خاص است. از یادگیری زبان اسمبلی برای فراگیری ساز و کار کلیه قطعات کامپیوتر از واحد پردازش مرکزی (CPU) گرفته تا حافظه استفاده میشود. البته، زبان اسمبلی کاربردهای دیگری نیز دارد که در ادامه مطلب کاربرد زبان اسمبلی به طور کامل به آنها پرداخته شده است.
نکتهای که باید به آن توجه داشت این است که با وجود آنکه امروزه اغلب برنامهنویسها از زبانهای برنامهنویسی سطح بالا مانند پایتون، جاوا و گو برای توسعه نرمافزارهای گوناگون استفاده میکنند، اما زبان اسمبلی در رتبهبندیهایی که برای زبانهای برنامهنویسی توسط مراکز گوناگون ارائه میشود، معمولا جزو ۲۰ زبان برتر و دارای کاربرد و بازار کار در دنیا محسوب میشود. هرچند که معمولا از جهت کاربرد و بازار کار در فهرست ۱۰ زبان برنامهنویسی برتر قرار ندارد.
برای درک بهتر جایگاه زبان اسمبلی در میان دیگر زبانها از جهت نزدیکی نحو به سختافزار باید گفت که زبان اسمبلی از زبان ماشین سطح بالاتر و از زبانهایی مانند پاسکال و C/C++ سطح پایینتر است. بنابراین، کد نوشته شده به زبان اسمبلی نیز برای اجرا نیاز به آن دارد که به کد قابل اجرا توسط ماشین یا همان زبان ماشین تبدیل شود. در کامپیوترها، چیزی با عنوان اسمبلر (Assembler) وجود دارد که به تبدیل کد اسمبلی به کد قابل اجرای ماشین کمک میکند.
زبان اسمبلی اساسا به معماری سیستم شامل سختافزار و سیستمعامل نصب شده روی آن بستگی دارد. در ادامه مطلب کاربرد زبان اسمبلی به این پرسش پاسخ داده خواهد شد که زبان اسمبلی چیست، چه تفاوتی با زبان ماشین دارد و همچنین، کاربرد زبان اسمبلی به طور کامل مورد بررسی قرار گرفته است.
زبان ماشین چیست؟
زبان ماشین (Machine Language) مجموعه دستورالعملهایی است که با استفاده از آنها کدنویسی ماشین یا در واقع، کدنویسی مستقیم برای سختافزار کامپیوتر، انجام میشود. زبان ماشین، یک زبان برنامهنویسی سطح پایین است که به طور مستقیم برای کنترل واحد پردازش مرکزی کامپیوتر مورد استفاده قرار میگیرد. شایان توجه است که زبان ماشین پایینترین سطح از زبانهای برنامهنویسی و حتی از اسمبلی نیز پایینتر است. منظور از پایین بودن، نزدیکی به سختافزار و نه زبان انسان است.
هر دستوری به زبان ماشین، منجر به آن میشود که واحد پردازش مرکزی یک وظیفه خاص را انجام دهد. از جمله این وظایف میتوان به بارگذاری، ذخیرهسازی، پرش یا انجام عملیات در واحد محاسبه و منطق (Arithmetic Logic Unit) روی یک یا تعداد بیشتری واحد داده در ثبات یا حافظه اشاره کرد. زبان ماشین یک زبان صرفا «عددی» است. یعنی کدهای زبان ماشین دنبالههای از اعداد هستند که برای سختافزار معنای خاصی دارند و قطعات الکترونیکی را به انجام کار خاصی مجبور میکنند. یکی از مهمترین اهداف زبان ماشین، اجرا شدن برنامه نوشته شده در آن در سریعترین زمان ممکن است و به همین دلیل این سطح از نزدیکی به سختافزار را دارد.
زبان ماشین را میتوان پایینترین سطح ارائه برای یک برنامه کامپایل شده توسط کامپایلر زبانهای کامپایلری یا برنامه اسمبلی ترجمه شده توسط اسمبلر در نظر گرفت. در واقع، زبان ماشین زبانی کاملا سطح پایین است که به طور کامل به سختافزار وابسته است.
در صورتی که برنامهنویسی مستقیما با کد ماشین انجام شود، میتوان بیتها را به طور مستقیم مدیریت و آدرسهای عددی را محاسبه کرد. این کار علاوه بر خسته کننده و پیچیده بودن، منجر به داشتن کدی مستعد خطا میشود. به همین دلیل، برنامهها به ندرت به زبان ماشین نوشته میشوند. اما گاه با هدف عیبیابی کد در سطح پایین، وصله زدن (Patch) به برنامه (به ویژه وقتی که منبع اسمبلر موجود نیست) و دیساسمبلر (Disassembler) کردن به زبان اسمبلی، از زبان ماشین استفاده میشود. در ادامه مطلب کاربرد زبان اسمبلی به پرسش زبان اسمبلی چیست پاسخ داده شده است.
زبان اسمبلی چیست ؟
زبان اسمبلی یک زبان برنامهنویسی سطح پایین و نزدیک به سختافزار است که نسبت به زبان ماشین سطح بالاتر و از زبانهایی مانند C سطح پایینتر است. دستورات این زبان توسط اسمبلر به کد ماشین ترجمه و پس از آن، اجرا میشوند.
در این بخش از مطلب کاربرد زبان اسمبلی به پرسش زبان اسمبلی چیست پاسخ داده شده است. در برنامهنویسی کامپیوتری، زبان اسمبلی یا زبان اسمبلر که به طور خلاصه با سرنام ASM نمایش داده میشود، یک زبان برنامهنویسی سطح پایین است که ارتباط بسیار قوی بین دستورالعملهای آن و معماری کد ماشین وجود دارد. به دلیل آنکه زبان اسمبلی بستگی به دستورالعملهای کد ماشین دارد، هر زبان اسمبلی دقیقا برای یک معماری کامپیوتری مشخص طراحی شده است. به زبان اسمبلی «کد ماشین سمبلیک» (Symbolic Machine Code) نیز گفته میشود.
کد اسمبلی با بهرهگیری از یک برنامه سودمند (Utility Software) که اسمبلر نام دارد، به کد ماشین قابل اجرا تبدیل میشود. فرایند تبدیل کد اسمبلی به کد ماشین قابل اجرا را اسمبلی میگویند. زبان اسمبلی معمولا یک دستور به ازای هر دستوالعمل ماشین دارد و در واقع، رابطه یک به یک (۱:۱) بین کدهای زبان اسمبلی و کدهای به زبان ماشین برقرار است. البته، در زبان اسمبلی از نظرات (Comments)، دایرکتیوها (Directives)، ماکروها (Macros) و برچسبهای نمادین برنامه و دستورات تخصیص حافظه نیز پشتیبانی میشود.
اصطلاح اسمبلر اولین بار توسط «موریس ویلکس» (Maurice Wilkes)، «دیوید ویلر» (David Wheeler) و «استنلی گیل» (Stanley Gill) در سال ۱۹۵۱ در کتابی با عنوان «آمادهسازی برنامههایی برای یک کامپیوتر دیجیتال الکترونیکی» (The Preparation of Programs for an Electronic Digital Computer) به کار برده شد. آنها از اصطلاح اسمبلر برای اشاره به مفهوم «برنامهای که برنامه دیگری را که شامل بخشهای گوناگون است به یک برنامه به زبان ماشین مونتاژ یا اسمبل میکند» استفاده کردند.
هر زبان اسمبلی مختص یک معماری کامپیوتری خاص و گاهی نیز مختص یک سیستمعامل خاص است. اگرچه، اغلب زبانهای اسمبلی نحو اختصاصی را برای فراخوانیهای سیستم (System Calls) فراهم نمیکنند و اغلب زبانها اسمبلی را میتوان با سیستمعاملهای گوناگون به کار برد. زبان اسمبلی دسترسی به همه ظرفیتهای واقعی پردازنده را فراهم میکند که فراخوانیهای سیستم به آن تکیه دارد. در مقایسه با زبان برنامهنویسی اسمبلی، اغلب زبانهای برنامهنویسی سطح بالا عموما برای معماریهای گوناگون قابل حمل هستند؛ اما نیاز به تفسیر یا کامپایل وظایف پیچیدهتری نسبت به زمانی دارند که صرفا به مونتاژ کردن (اسمبل) میپردازند. گام محاسباتی که در آن اسمبلر یک برنامه را پردازش میکند، «زمان اسمبلی» (Assembly Time) نام دارد. در ادامه مطلب کاربرد زبان اسمبلی به تفاوتهای زبان ماشین و زبان اسمبلی پرداخته شده است، زیرا که افراد اغلب این دو را با یکدیگر اشتباه میگیرند و به اشتباه فکر میکنند که اسمبلی همان زبان ماشین است.
- برای دیدن فیلم آموزش برنامه نویسی اسمبلی + اینجا کلیک کنید.
تفاوت زبان ماشین و زبان اسمبلی چیست؟
تفاوت اساسی بین کد ماشین و زبان اسمبلی آن است که کد ماشین شامل کدهای دودویی است که میتوان آنها را به طور مستقیم توسط کامپیوتر اجرا کرد. در حالی که زبان اسمبلی نیاز به نرمافزاری به نام اسمبلر برای تبدیل به کد ماشین دارد. زبان ماشین پایینترین سطح از زبانهای برنامهنویسی و زبان اسمبلی یک زبان برنامه برنامهنویسی سطح پایین است.
در ادامه مطلب زبان اسمبلی به نحو (Syntax) زبان اسمبلی پرداخته شده است.
نحو زبان اسمبلی به چه صورت است؟
زبان اسمبلی از یادیارها (Mnemonic) برای ارائه هر دستورالعمل سطح پایین یا آپکدی (Opcode) و همچنین به طور معمول، ثبات معماری، پرچم و دیگر موارد، استفاده میکند. بسیاری از عملیات در زبان اسمبلی نیازمند یک یا تعداد بیشتر عملوند (Operand) به منظور شکل دادن یک دستورالعمل کامل هستند. اغلب اسمبلرها اجازه استفاده از ثابتهای دارای نام، ثباتها و برچسبها را برای اجرای برنامهها و تخصیص حافظه دارند و میتوانند عبارات را برای عملگرها محاسبه کنند. بنابراین، برنامهنویسها نیازی به انجام محاسبات تکراری خسته کننده ندارند و برنامههای اسمبلر، از کدهای ماشین خواناتر هستند.
بسته به معماری سختافزار و گاه سیستم عامل، این عناصر ممکن است برای دستورالعملهای خاص یا حالتهای آدرسدهی با استفاده از آفستها (Offsets) یا هر نوع دیگری از دادهها به مثابه آدرسهای ثابت ترکیب شوند. بسیاری از اسمبلرها مکانیزمهای افزودهای را برای تسهیل توسعه برنامه ارائه میکنند تا فرایند اسمبلی را کنترل و به عیبیابی (Debugging) کمک کنند. در ادامه مطلب کاربرد زبان اسمبلی به دلایل مفید بودن زبان برنامهنویسی اسمبلی پرداخته شده است.
چرا زبان اسمبلی مفید است؟
زبان اسمبلی به برنامهنویسها کمک میکند تا کدهای قابل خواندن توسط انسان را بنویسند که بیشترین شباهت را به زبان ماشین دارند. درک و خواندن زبان ماشین از این جهت دشوار است که دنبالهای از اعداد است. زبان اسمبلی به فراهم کردن کنترل کامل کلیه کارهایی کمک میکند که یک کامپیوتر انجام میدهد. مثالی از کد نوشته شده به زبان اسمبلی در ادامه آمده است.
برنامه «Hello World» به زبان اسمبلی در ویندوز
برای نوشتن برنامه «Hello World» به زبان اسمبلی در ویندوز باید گامهایی که در ادامه این بخش از مطلب کاربرد زبان اسمبلی بیان شدهاند را انجام داد.
- ابتدا باید نرمافزار ویرایشگر متنی مانند Notepad را باز کرد.
- سپس باید کد زیر را در فایل متنی موجود نوشت.
- فایل را باید با نامی مانند XYZ.asm ذخیره کرد. نام فایل اختیاری است و آنچه اهمیت دارد آن است که پسوند فایل باید حتما asm. باشد.
- فایل بالا نیاز به آن دارد که به کمک یک اسمبلر کامپایل شود که NASM (سرنامی برای Netwide Assembler) نام دارد.
- دستور nasm –f win32 XYZ.asm باید اجرا شود.
- پس از این، NASM یک شی فایل را میسازد که حاوی کد ماشین است، اما کد اجرایی نیست. نام این فایل، XYZ.obj است.
- برای ساخت فایل اجرایی برای ویندوز، از مینیمال گنو (Minimal GNU) استفاده میشود که کامپایلر GCC را فراهم میکند.
- اکنون، دستور gcc –o XYZ.exe XYZ.obj باید اجرا شود.
- در این وهله میتوان دستورهای قابل اجرا را که در اینجا XYZ نام نهاده شدهاند اجرا کرد.
- خروجی به صورت «Hello, world» نمایش داده میشود.
در بخش بعدی از مطلب کاربرد زبان اسمبلی به این پرسش مهم پاسخ داده شده است که چرا باید زبان اسمبلی را فراگرفت.
چرا باید زبان اسمبلی را یاد گرفت؟
اینکه افراد اسمبلی را بیاموزند یا خیر، بستگی به این دارد که فرد چه اهدافی را دنبال میکند. پاسخ بسیاری از توسعهدهندگان به این پرسش «نه» است زیرا آنها در حال حاضر از زبانهای برنامهنویسی سطح بالا که کار با آنها جذابتر است و البته قابلیتها، تواناییها و بازار کار بزرگتری نیز دارند استفاده میکنند. دو دلیل اساسی برای یادگیری زبان اسمبلی وجود دارد. یکی آنکه فرد قصد دارد از آن برای کار کردن به طور مستقیم با سختافزار استفاده کند و دیگری آنکه فرد قصد دارد کارکرد کامپیوتر را در سطح پایهای بیاموزد.
با وجود آنکه امروزه گرایش اغلب افراد به فراگیری زبانهای برنامهنویسی سطح بالا و توسعه برنامه با استفاده از آنها است اما یادگیری زبان اسمبلی هنوز هم موضوع مهمی برای برنامهنویسها محسوب میشود. فراگیری زبان اسمبلی به افراد کمک میکند تا کنترل کامل سیستم و منابع آن را به دست بگیرند. با یادگیری زبان اسمبلی، برنامهنویس قادر به نوشتن کد برای دسترسی به ثباتها (Registers) است و میتواند آدرس حافظه از اشارهگرها و مقادیر آنها را بازگرداند. این کار اساسا به بهینهسازی سرعت کمک میکند و بهرهوری و کارایی را افزایش میدهد.
یادگیری زبان برنامهنویسی به درک کارکرد پردازشگر و حافظه کمک میکند. در صورتی که توسعهدهنده برنامهای بنویسد که نیاز به کامپایلر دارد، باید درک خوبی از کارکرد پردازشگر و بحث زمان اجرای برنامه داشته باشد. زبان اسمبلی به یادگیری ساز و کار پردازشگر و حافظه کمک میکند. اسمبلی یک زبان رمزی و نمادین است.
زبان اسمبلی به تماس مستقیم با سختافزار کمک میکند. این زبان اساسا بر مبنای معماری کامپیوتر و نوع خاص پردازنده است و برای پردازندههای گوناگون نسخههای متفاوتی از آن وجود دارد. زبان اسمبلی در مقایسه با دیگر زبانهای سطح بالا از شفافیت زیادی در بحث عملکردها و دستورات موجود برای آن برخوردار است و تعداد کمی عملیات برای آن وجود دارد. اما این زبان برای درک الگوریتمها و دیگر جریانهای کنترلی مفید است. این مورد موجب میشود تا کدهای اسمبلی از پیچیدگی کمتری برخوردار باشند و عیبیابی آنها آسانتر باشد. البته نباید فراموش کرد که از دیدگاه کلی بسیاری از افراد، نحو زبان اسمبلی نسبت به زبانهای سطح بالا که به زبان انسانی نزدیک هستند، دشوارتر است. در ادامه مطلب کاربرد زبان اسمبلی به ویژگیهای زبان اسمبلی پرداخته شده است.
ویژگیهای زبان اسمبلی
ویژگیهای اصلی زبان اسمبلی در ادامه آمده است.
- میتوان از یادیارها به جای کد عملیاتی ریاضی استفاده کرد و اطلاعاتی را پیرامون هر خطایی در کد فراهم کرد.
- این زبان به تعیین عملوند نمادین کمک میکند و این بدین معنا است که نیازی به تعیین آدرس ماشین برای آن عملوندها ندارد. این مورد را به شکل یک نماد میتوان نمایش داد.
- دادهها را میتوان با استفاده از نشانهگذاری اعشاری نمایش داد.
در بخش بعدی از مطلب کاربرد زبان اسمبلی به دلیل اهمیتی که اسمبلر دارد به مفهوم و کارکرد آن پرداخته شده است.
اسمبلر چیست؟
اسمبلر به بیان ساده نرمافزاری است که کدهای نوشته شده به زبان اسمبلی را به کد ماشین تبدیل میکند. در واقع، نرمافزار اسمبلر کد نوشته شده به زبان اسمبلی را به یک کد هدف (Object Code) تبدیل میکند که دستوراتی به زبان ماشین (یعنی ارقام ۰ و ۱) یا یک زبان واسط مانند زبان انتقال ثبات هستند. این کار با ترجمه ترکیبهایی از یادیارها و دستورات اسمبلی برای عملیات گوناگون یا حالت آدرسدهی به معادل عددی آنها در کد ماشین یعنی ۰ و ۱ انجام میشود.
کد هدف ارائه شده توسط اسمبلر عموما شامل یک کد عملیاتی (آپ کد | Opcode | Operation Code) به مثابه دیگر بیتها و دادههای کنترلی است. اسمبلر عبارات ثابت را محاسبه و اسامی نمادین را برای تخصیص حافظه و دیگر موجودیتها فراهم میکند. استفاده از ارجاعات نمادین از ویژگیهای کلیدی اسمبلرها است که منجر به جلوگیری از محاسبات خسته کننده و بهروزرسانیهای دستی آدرس پس از ویرایشهای برنامه میشود. اغلب اسمبلرها از ماکروها برای اجرای جایگزینی متنی و برای مثال، برای تولید توالیهای کوتاه متداول از دستورات به صورت توکار به جای رویههای (Subroutines) فراخوانی شده، بهره میبرند.
ممکن است برخی از اسمبلرها قادر به اجرای انواع سادهای از بهینهسازیهای مختص مجموعه دستورالعملها باشند. یک مثال مناسب از این مورد، اسمبلرهای x86 است که توسط سازندگان مختلفی تولید میشود. اسمبلرهایی که به آنها اندازه-پرش (Jump-Sizing) گفته میشود، اغلب قادر به انجام جایگزینی دستور پرش (پرشهای طولانی به وسیله پرشهای کوتاه یا مرتبط جایگزین میشوند) در هر تعدادی از گذرها (Pass) بنا به درخواست هستند. از دیگر قابلیتهایی که ممکن است از آن بهره ببرد میتوان به بازسازماندهی ساده یا درج دستورالعملها اشاره کرد. به عنوان مثالی از این مورد میتوان به برخی از اسمبلرها برای معماریهای ریسک (RISC Architectures) اشاره کرد که میتوانند به بهینهسازی معقول زمانبندی اجرای دستورالعملها برای بهرهبرداری از پایپلاینهای واحد پردازش مرکزی (CPUI Pipelines) به طور موثری کمک کنند.
اسمبلرها از سال ۱۹۵۰ به عنوان اولین گام پس از زبان ماشین و پیش از زبانهای برنامهنویسی سطح بالا مانند «فرترن» (Fortran)، الگل (Algol)، «کوبول» (Cobol) و «لیسپ» (Lisp) در دسترس بودهاند. همچنین، کلاسهای متعددی از مترجمها و مولدهای کد شبه-خودکار با خصوصیاتی مشابه با زبانهای اسمبلی و سطح بالا وجود داشتهاند که در این میان، «اسپیدکد» (Speedcode) احتمالا شناخته شدهترین آنها باشد.
اسمبلرهای گوناگون با نحوهای متنوع برای پردازندهها یا معماریهایی سختافزاری گوناگون وجود دارند. برای مثال، دستورالعملی برای افزودن داده حافظه به ثبات در خانواده پردازندههای x86 ممکن است در نحو اصلی اینتل به صورت add eax,[ebx] باشد که این مورد با نحو AT&T که توسط اسمبلر گنو مورد استفاده قرار میگیرد، به صورت addl (%ebx),%eax نوشته میشود. علارغم ظاهرهای متفاوت، اَشکال نحوی مختلف عموما کد ماشین عددی مشابهی را فراهم میکنند. یک اسمبلر یکتا ممکن است حالات مختلفی از نحو و در عین حال تفسیر دقیقی از آنها را به منظور پشتیبانی از انواع اشکال نحوی فراهم کند که به عنوان مثالی از این مورد میتوان به نحو FASM، نحو TASM و دیگر موارد در در نوع خاصی از برنامهنویسی اسمبلی برای پردازندههای x86 اشاره کرد. در ادامه مطلب کاربرد اسمبلی برخی از انواع اسمبلر مورد بررسی قرار گرفتهاند.
برخی از انواع اسمبلر
در این بخش از مطلب کاربرد زبان اسمبلی برخی از انواع اسمبلر مورد بررسی قرار گرفتهاند.
- ماکرواسمبلر: ماکرواسمبلر شامل قابلیت کلاندستور (ماکرو | Macroinstruction) میشود؛ بنابراین متن زبان اسمبلی (پارامتری شده) با یک نام قابل ارائه است و از آن نام میتوان برای درج متن بسط یافته در کدهای دیگر استفاده کرد.
- اسمبلر متقابل: اسمبلر متقابل (Cross Assembler) یک اسمبلر است که روی کامپیوتر یا سیستمعامل (سیستم میزبان) با انواع گوناگون اجرا میشود. اسمبلی متقابل توسعه برنامهها را برای سیستمهایی تسهیل میکند که منابع کافی برای پشتیبانی از توسعه نرمافزار ندارند. از جمله این سیستمها میتوان به سیستمهای توکار (Embedded System) یا یک میکروکنترلر (Microcontroller) اشاره کرد. در چنین موردی، یک شی حاصل شده باید به یک سیستم هدف با حافظه فقط خواندنی (EROM ،ROM و دیگر موارد)، یک پروگرامر (Programmer) (هنگامی که حافظه فقط خواندنی به عنوان میکروکنترلر در دستگاه یکپارچه شد) یا پیوند داده (دیتا لینک | Data link) به صورت یک کپی دقیقا بیت به بیت از کد شی یا ارائه مبتنی بر متن از آن کد (مانند انیل هکز یا موتورولا اس-رکورد) انتقال پیدا کند.
- اسمبلر سطح بالا: اسمبلر سطح بالا (High-Level Assembler) برنامهای است که انتزاعات زبان را که معمولا مرتبط با زبانهای برنامهنویسی سطح بالا هستند، مانند ساختارهای کننترلی سطح (Do Case ،Else ،Then ،IF و دیگر موارد) و انواع داده انتزاعی سطح بالا شامل ساختارها/رکورها، اتحادها، کلاسها و مجموعهها را فراهم میکند.
- میکرواسمبلر: یک میکرواسمبلر (Microassembler) یا همگذار برنامهای است که به آمادهسازی یک ریزبرنامه (Microprogram) که به آن «سفتافزار» (Firmware) گفته میشود، برای کنترل عملیات سطح پایین از کامپیوتر، کمک میکند.
- متااسمبلر: یک متااسمبلر (Meta-Assembler) برنامهای است که توصیف نحوی (Syntactic) یا معنایی (Semantic) از یک زبان اسمبلی را امکانپذیر میسازد و یک اسمبلر برای آن زبان میسازد. اسمبلرهای متا-سمبل (Meta-Symbol) برای کامپیوترهای سری SDS 9 و SDS Sigma، متااسمبلر هستند. «کامپیوتر خودکار جهانی» (Universal Automatic Computer | UNIVAC) یک متااسمبلر برای سری UNIVAC 1100/2200 فراهم میکند.
- اسمبلر درونبرنامهای: یک «اسمبلر درونبرنامهای» (Inline Assembler) یا «اسمبلر توکار» (Embedded Assembler) یک کد اسمبلر حاوی یک زبان برنامهنویسی سطح بالا است. این اسمبلر درون برنامهای اغلب در برنامههای سیستمی مورد استفاده قرار میگیرد که نیاز به دسترسی مستقیم به سختافزار دارد.
مزایا و معایب اسمبلر
در این بخش از مطلب کاربرد زبان اسمبلی برخی از مزایا و معایب زبان اسمبلی تشریح شده است.
مزایای زبان اسمبلی
در ادامه، مزایای زبان اسمبلی بیان شده است.
- امکان انجام کارهای پیچیده را برای اجرا به صورت سادهتر فراهم میکند.
- کارایی حافظه خوبی دارد و نیاز به حافظه کمی دارد.
- سرعت بالاتری در اجرا دارد و زمان اجرای آن کمتر است.
- اساسا مبتنی بر سختافزار است.
- نیاز به دستورالعملهای کمتری برای رسیدن به نتیجه دارد.
- برای کارهای حیاتی مورد استفاده قرار میگیرد.
- برای حفظ موقعیت حافظه مورد نیاز نیست.
- یک سیستم توکار سطح پایین است.
معایب زبان اسمبلی
در ادامه، معایب زبان اسمبلی بیان شده است.
- زمان و تلاش زیادی نسبت به دیگر زبانهای برنامهنویسی برای نوشتن کدی مشابه، میطلبد.
- بسیار پیچیده و درک آن دشوار است.
- یادآوری نحو آن دشوار است.
- فقدان قابلیت حمل برنامه بین معماریهای کامپیوتری گوناگون یه ویژگی منفی مفهم است که البته در برخی از نسخههای اسمبلی این مشکل تا حدی رفع شده و سختافزارهای بیشتری را پوشش میدهند.
هدف و کاربرد زبان اسمبلی در گذشته چه بوده است؟
هدف از تولید زبان اسمبلی در واقع کاربرد زبان اسمبلی در بدو ابداع و تولد این زبان بوده است. کاربرد زبان اسمبلی در گذر زمان و نظر به پیشرفت فناوری و توسعه سختافزارها و زبانهای برنامهنویسی جدید دستخوش تغییر شده است. در این بخش از مطلب کاربرد زبان اسمبلی به هدف از تولید آن و کاربرد زبان اسمبلی در دهههای ابتدایی تولید آن پرداخته شده است.
زبان اسمبلی در هنگام معرفی کامپیوترهای دارای برنامههای ذخیره شده (Stored-Program Computer) وجود نداشت. کثلین بوث (Kathleen Booth) اولین زبان اسمبلی را بر اساس کارهای تئوری ابداع کرد که از سال ۱۹۴۷ میلادی و هنگام کار روی ARC2 در دانشگاه بیرکبک لندن (Birkbeck, University of London) آغاز کرده بود. او این پژوهشها را با مشاوره اندرو بوث (Andrew Booth)، «جان فون نویمان» (John von Neumann) ریاضیدان و «هرمان گلداستاین» (Herman Goldstine) در پژوهشگاه مطالعات پیشرفته (Institute for Advanced Study) انجام داد.
در اواخر سال ۱۹۴۸، ماشین حساب خودکار ذخیرهسازی تاخیر الکترونیکی (Electronic Delay Storage Automatic Calculator | EDSAC) اسمبلری (با نام «Initial Orders») داشت که در برنامه بوتاسترپ (Bootstap) آن یکپارچه شده بود. در این اسمبلر از یادیار (Mnemonic) تک حرفی توسعه پیدا کرده توسط «دیوید ویلر» (David Wheeler) استفاده شده بود. دیوید ویلر کسی است که توسط «جامعه کامپیوتر مؤسسه مهندسان برق و الکترونیک» (IEEE Computer Society) به عنوان سازنده اولین اسمبلر شناخته شده است و آنها کثلین بوث را به عنوان اولین سازنده زبان اسمبلی نمیدانند. گزارشهای روی EDSAC اصطلاح اسمبلر را برای پردازش فیلدهای ترکیبی در یک کلمه دستورالعمل، معرفی کردند.
برنامه اسمبلی بهینه نمادین (Symbolic Optimal Assembly Program | SOAP) یک زبان اسمبلی بود که برای کامپیوتر IBM 650 توسط استن پلی (Stan Poley) در سال ۱۹۵۵ نوشته شد. زبان اسمبلی حجم زیادی از برنامهنویسی نسل اول (برنامهنویسی سطح ماشین) را که برای کامپیوترهای اولیه لازم و بسیار مستعد خطا، خسته کننده و زمانبر بودند از میان برداشت و برنامهنویسان را از بند کارهایی مانند به خاطر داشتن محاسبات عددی و محاسبه آدرسها رها کرد.

در آن دوران، زبان اسمبلی به طور گستردهای برای انواع برنامهنویسیها مورد استفاده قرار میگرفت. اگرچه، در دهه ۱۹۸۰ (و ۱۹۹۰ روی میکروکامپیوترها) و با هدف ارتقای کارایی برنامهنویسی، زبانهای سطح بالاتری جایگزین انواع کاربرد زبان اسمبلی شدند. امروزه، زبان اسمبلی همچنان برای دستکاری مستقیم سختافزار، دسترسی به دستورالعملهای ویژه پردازنده یا پرداختن به مشکلات حیاتی مربوط به کارایی مورد استفاده قرار میگیرند. کاربران زبان اسمبلی معمولا از درایور دستگاه (Device Driver)، سیستمهای توکار سطح پایین و سیستمهای بیدرنگ استفاده میکنند.
در گذر تاریخ و به طور خاص در سالهای ابتدایی معرفی زبان اسمبلی برنامههای زیادی به طور کامل در زبان اسمبلی نوشته شدند. Burroughs MCP اولین کامپیوتری بود که سیستم عامل آن به طور کامل به زبان اسمبلی نوشته نشد. سیستمعامل این کامپیتر در زبان اسپول (Executive Systems Problem Oriented Language | ESPOL) نوشته شد که یک انشعاب از الگل (Algol) است. کاربرد زبان اسمبلی در آن دوران محدود به نوشتن سیستمعامل نبود و برنامههای تجاری زیادی نیز به زبان اسمبلی نوشته شدهاند که از این جمله میتوان به حجم زیادی از برنامههای نوشته شده برای رایانه بزرگ آیبیام (IBM Mainframe) اشاره کرد که توسط شرکتهای بزرگی نوشته شدهاند. بعدها، زبانهای کوبول، فورترن و PL/I جایگزین این تلاشها شدند. اگرچه، تعدادی از سازمانهای بزرگ همچنان تا پایان دهه ۱۹۹۰ نیز از از زبان اسمبلی استفاده میکردند.
میکروکامپیوترهای اولیه به زبان اسمبلی تکیه داشتند و برنامههای نوشته شده در آن راستا شامل بسیاری از سیستمعاملها و برنامههای کاربردی بزرگ میشود. دلیل این امر آن است که این سیستمها دارای محدودیتهای متعدد منابع، معماریهای حافظه و صفحه نمایش و سرویسهای سیستم (System Services) محدود و پر نقص هستند. البته، احتمالا از مهمترین دلایل این امر فقدان کامپایلرهای کلاس اول و سطح بالای مناسب برای میکروکامپیوترها است. یک عامل روانشناسی نیز ممکن است در این میان نقش بازی کرده باشد. نسل اول از برنامههای میکروکامپیوترها نگرش «سیم و انبردست» را حفظ کردهاند؛ بدین معنا که توسعهدهندگان ترجیح میدادند از زبانهای نزدیک به زبان ماشین و سختافزار برای توسعه برنامه استفاده کنند.
در زمینههای تجاریتر، بزرگترین دلیل برای استفاده از زبان اسمبلی، اندازه کوچکتر، سربار کمتر، سرعت بیشتر و خوانایی آن بود. به عنوان مثالهایی از برنامههای نوشته شده به زبان اسمبلی میتوان به سیستمعامل داس (DOS) برای کامپیوترهای شخصی IBM، کامپایلر توربو پاسکال (Turbo Pascal) و برنامههای کاربردی اولیه مانند برنامه صفحه گسترده لوتوس ۱-۲-۳ (Lotus 1-2-3) اشاره کرد. برای به دست آوردن بهترین کارایی در کنسول بازی ویدئویی سگا ساترن (Sega Saturn) از زبان اسمبلی برای کدنویسی آن استفاده شده است. بازی آرکید بسکتبال در سال ۱۹۹۳ مثال دیگری از برنامهای است که به طور کامل با زبان برنامهنویسی اسمبلی نوشته شده است.
زبان اسمبلی تا مدتها اولین زبان توسعه اصلی برای توسعه بسیاری از کامپیوترهای خانگی در دهه ۱۹۸۰ و ۱۹۹۰ بود که از این جمله میتوان به اماسایکس (MSX)، سینکلر (Sinclair)، زد اکس اسپکتروم (ZX Spectrum)، کمودور ۶۴ (Commodore 64)، آمیگا (Amiga)، آتاری استی (Atari ST) اشاره کرد. بخش بزرگی از بازار آن زمان در اختیار اسمبلی بود، زیرا دیالکتهای تفسیری بیسیک (BASIC) در این سیستمها سرعت اجرای نامناسبی داشتند و امکانات کافی برای استفاده کامل از سختافزار این سیستمها در آن وجود نداشت.
برخی از سیستمها در آن هنگام حتی یک محیط توسعه یکپارچه (Integrated Development Environment | IDE) با قابلیت عیبیابی پیشرفته و ماکرو داشتند. برخی از کامپایلرها برای ریدیوشک (Radio Shack)، تیآراس-۸۰ (TRS-80) و جانشینهای آنها، توانایی ترکیب منبع اسمبلی توکار را با دستورات برنامه سطح بالا داشتند. پس از تدوین، یک اسمبلر توکار یک کد ماشین توکار را از کد نوشته شده به زبان اسمبلی تولید میکرد.
کاربرد زبان اسمبلی در حال حاضر چیست؟
از نقطه نظر عملی، تنها تعداد انگشتشماری از مهندسان جهان و دانشمندان کامپیوتر از زبان اسمبلی استفاده میکنند و امروزه اکثریت برنامههای کاربردی با استفاده از زبانهای برنامهنویسی سطح بالا نوشته میشوند. این در حالی است که در سال ۲۰۱۷، شاخص تیوبی برای زبانهای برنامهنویسی، اسمبلی را در جایگاه ۱۱ و جلوتر از زبان ویژوال بیسیک (Visual Basic) قرار داد. در سال ۲۰۲۱ نیز با توجه به شاخص تیوبی، اسمبلی همچنان جزو ۲۰ زبان برنامهنویسی برتر و محبوب دنیا است.
برخی از حوزههایی که هنوز هم از زبان اسمبلی در آنها استفاده میشود در ادامه بیان شدهاند:
- سیستم عاملها
- سفتافزارها
- درایورهای دستگاه
- طراحی کامپایلر
- سیستمهای توکار
- طراحی سختافزار
- رمزنگاری پیشرفته
- علوم کامپیوتر نظری
- درک ساز و کار کامپیوترها
انواع کاربرد زبان اسمبلی که در بالا به آنها اشاره شد، در ادامه با جزئیات بیشتری مود بررسی قرار گرفتهاند و باید به این نکته توجه داشت که در برخی از موارد، شاید رقیب ویژهای هنوز هم برای زبان اسمبلی وجود نداشته باشد.
کاربرد زبان اسمبلی در درک ساز و کار کامپیوترها چیست؟
چنانکه پیشتر نیز بیان شد، یکی از دلایل یادگیری آن است که زبان اسمبلی میتواند به درک بهتر آنچه که در کامپیوتر به وقوع میپیوندد کمک شایان توجهی کند دلیل این امر آن است که زبان اسمبلی به زبان ماشین و سختافزار بسیار نزدیک است و امکان کنترل کامل روی سختافزار را به کاربر میدهد. به دلیل کاربر زبان اسمبلی در درک ساز و کار کامپیوترها است که زبان اسمبلی هنوز هم در بسیاری از برنامههای آموزشی علوم کامپیوتر و مهندسی الکترونیک در دانشگاهها و مراکز آموزشی تدریس میشود.
فراگیری و داشتن مطالعات همراه با جزئیات پیرامون مباحث بنیادینی مانند حساب دودویی، تخصیص حافظه، پردازش پشته، رمزنگاری مجموعه کاراکتر، وقفه پردازش و طراحی کامپایلر بدون داشتن درکی از ساز و کار کامپیوترها کاری دشوار است. از آنجا که رفتار کامپیوتر اساسا با مجموعه دستورالعملهای آن تعریف میشود، راهکار منطقی برای یادگیری چنین مفاهیمی مطالعه زبان اسمبلی است. متداولترین کامپیوترها دارای چندین مجموعه دستورالعمل مشابه هستند. بنابراین، مطالعه زبان اسمبلی برای یادگیری مفاهیم کلیدی، شناسایی شرایطی که در آن استفاده از زبان اسمبلی ممکن است مناسب باشد و دیدن آنکه کدهای اجرایی موثر چطور از زبانهای سطح بالا قابل ساخته شدن هستند بسیار مفید است.
کاربرد زبان اسمبلی در بهینهسازی کد چیست؟
همواره در مقایسه مفید بودن و کارایی زبان اسمبلی با زبانهای سطح بالا، بحث زیادی وجود دارد. اگرچه، زبان اسمبلی کاربردهای ویژهای در راستای تولید کد با سرعت اجرای بهینه دارد. در واقع، کد نوشته شده به زبان اسمبلی به سختافزار بسیار نزدیک است و بنابراین زمان اجرای کمتری دارد و از سوی دیگر، اسمبلر میتواند برای بهینهسازی سرعت و استفاده از حافظه مورد استفاده قرار بگیرد.
در راستای بهینهسازی سرعت، کامپایلرهای بهینهسازی مدرنی برای رندر کردن زبانهای سطح بالا به کدی معرفی شدهاند که میتواند به سرعت زبان اسمبلی دستنویس اجرا شود. با وجود نمونههای متفاوتی از این کامپایلرهای مدرن که میتوان به آنها دسترسی داشت، پیچیدگی پردازشگرهای مدرن و زیرسیستمها بهینهسازی موثر کار بهینهسازی موثر را به طور فزایندهای برای کامپایلرها دشوار میکند.
اما نباید فراموش کرد که افزایش کارایی پردازندهها موجب شده است که پردازندهها اغلب اوقات بیکار نشسته باشند و بیشتر درگیر تاخیرهای قابل پیشبینی باشند که به دلیل خطای کش (Cache Misses)، عملیات ورودی/خروجی و صفحهبندی (Memory Paging) به وقوع میپیوندد. این مورد، سرعت اجرای کد خام را دیگر به چالشی برای برنامهنویسها مبدل نمیکند.
کاربرد زبان اسمبلی در مسائل خاص شامل چه مواردی است؟
برخی از توسعهدهندگان گاهی اوقات استفاده از زبان اسمبلی را برای توسعه برنامه ترجیح میدهند. برخی از این دلایل در ادامه بیان شده است.
- نوشتن کد برای سیستمهایی با پردازشگرهای قدیمیتر که گزینههای زبانهای برنامهنویسی سطح بالاتر را محدود کردهاند. از جمله این موارد میتوان به آتاری ۲۶۰۰، کومودور ۶۴ و ماشینحسابهای ترسیم نمودار اشاره کرد.
- نوشتن کد برای مواردی که کد باید به طور مستقیم با سختافزار تعامل کند. به عنوان مثالی از این مورد میتوان به درایورهای دستگاه و کنترل کننده وقفه اشاره کرد.
- نوشتن کد برای یک پردازشگر توکار یا پردازشگر سیگنال دیجیتال (Digital Signal Processor | DSP) که در آن وقفههای با تکرار زیاد نیاز به کوتاهترین چرخه در هر وقفه دارند؛ مانند وقفهای که ۱۰۰۰ یا ۱۰۰۰۰ بار در ثانیه به وقوع میپیوندد.
- نوشتن برنامههایی که نیاز به استفاده از دستورالعملهای اختصاصی پردازنده دارند که در کامپایلر پیادهسازی نشده است. یک مثال متداول، دستور «شیفت دوری» (Bitwise Rotation) در هسته بسیاری از الگوریتمهای رمزنگاری است.
- هنگامی که یک برنامه مستقل بسیار فشرده مورد نیاز است که باید بدون منابع در مولفههای زمان اجرا یا کتابخانههای مرتبط با زبانهای سطح بالا اجرا شود. مثالهایی از این مورد سفتافزار (Firmware) برای تلفنها، سوخت اتومبیل و سیستم احتراق، سیستمهای کنترل تهویه هوا، سیستمهای امنیتی و حسگرها میشوند.
- برنامههایی با حلقههای داخلی حساسیت آفرین برای کارایی، که در آنها زبان اسمبلی موقعیتهای بهینهسازی را فراهم میکند که کسب آنها در زبانهای سطح بالا دشوار است. انجام جبر خطی با BLAS یا تبدیل کسینوس گسسته (Discrete Cosine Transformation) و یا اسمبلی نسخه یک دستور چند داده یا Single Instruction, Multiple Data (SIMD) از x264) از جمله این موارد هستند.
- نوشتن برنامههایی که توابع برداری را برای برنامهها در زبانهای سطح بالایی مانند C میسازند. در زبانهای سطح بالاتر این مورد گاهی به کمک توابع ذاتی (Intrinsic Functions) کامپایلر انجام میشود که به طور مستقیم به یادیارهای SIMD نگاشت میشوند، اما با این اوصاف، منجر به تبدیل اسمبلی ویژه برای یک پردازنده بردار داده شده میشود.
- نوشتن برنامههای بیدرنگ مانند شبیهسازی، سیستم ناوبری پرواز و تجهیزات پزشکی از دیگر موارد کاربرد ویژه زبان اسمبلی هستند. برای مثال، در یک سیستم هدایت پرواز برقی، تلهمتری باید در بازه محدود زمانی تفسیر و اجرا شود. چنین سیستمهایی باید منبع تاخیرهای غیرقابل پیشبینی که ممکن است به وسیله برخی از زبانهای مفسری اتفاق بیفتند را حذف کنند که از این موارد میتوان به بازیافت حافظه (Garbage Collection)، عملیات صفحهبندی (مربوط به حافظه) یا قبضه کردن چند وظیفهای (Preemptive Multitasking) اشاره کرد. باید توجه داشت که برخی از زبانهای سطح بالا مولفههای زمان اجرا و رابط سیستم عامل را برای عملکردهای بیان شده به کار میگیرند که میتواند منجر به تاخیرهایی شود. انتخاب زبان اسمبلی به جای زبانهای سطح بالا برای چنین سیستمهایی به برنامهنویسان بینش و کنترل وسیعتری را حول محور جزئیات پردازش میدهد.
- برای نوشتن الگوریتمهای رمزنگاری که باید برای جوگیری از حملات زمانبندی (Timing Attacks) موکدا زمان اجرای مشابهی را در هر اجرا داشته باشند.
- به منظور ویرایش و بسط کدهای میراثی نوشته شده برای بزرگرایانههای آیبیام (IBM Mainframe Computers) باید از زبان اسمبلی استفاده کرد.
- با هدف نوشتن برنامه برای موقعیتهایی که در آن کنترل کامل بر محیط مورد نیاز است و در موقعیتهای فوق العاده امنیتی که وجود هیچ درپشتی پذیرفته نیست از اسمبلی استفاده میشود.
- ویروسهای کامپیوتری، بارگذار راهانداز (بارگذاری بوت | بوت لودر | Bootloader)، درایورهای دستگاههای خاص یا دیگر اقلامی که بسیار به سختافزار نزدیک هستند و یا برای نوشتن سیستمعاملها از اسمبلی استفاده میشود.
- نوشتن شبیهسازهای مجموعه دستورات برای نظارت، ردیابی، عیبیابی که در آن سربار اضافی به صورت کمینه حفظ میشود.
- موقعیتهایی که هیچ زبان سطح بالایی وجود ندارد، روی یک پردازشگر جدید یا ویژه که هیچ کامپایلر متقابلی برای آنها وجود ندارد از اسمبلی بهره برده میشود.
- برای مهندسی معکوس و ویرایش فایلهای برنامه مانند:
- دودوییهای موجود که ممکن است در اصل به یک زبان برنامهنویسی سطح بالا نوشته شده باشند. برای مثال، هنگام بازسازی برنامهها برای آنکه کد منبع آن وجود ندارد و یا گم شده است، یا کرک کردن نسخه دارای محافظت از کپی یک نرمافزار مالکیتی
- ویرایش ایمیج رام یا فایل فایل بازیهای ویدئوی (که به آن هک کردن رام نیز گفته میشود)، به وسیله روشهای گوناگون با زابن اسمبلی امکانپذیر است. روشی که به طور گستردهای در این راستا به کار گرفته میشود، جایگزینی کد برنامه در سطح زبان برنامهنویسی اسمبل است.
کاربرد زبان اسمبلی به طور متداول چیست؟
در ادامه، برخی از موار متداول کاربرد زبان اسمبلی در حال حاضر، بیان شدهاند.
- زبان اسمبلی به طور متداول در کد بوت سیستم مورد استفاده قرار میگیرد. کد بوت سیستم کد سطح پایینی است که مقداردهی اولیه سطح پایین و تست سختافزار سیستم را پیش از بوت سیستمعامل انجام میشود و معمولا در ROM نگهداری میشوند (BIOS در کامپیوترهای خانگی با سیستمهای کامپیوتری PC سازگار است و مثالی از این مورد CP/M است).
- زبان اسمبلی معمولا برای کدنویسیهای سطح پایین مورد استفاده قرار میگیرد. برای مثال، برای کدنویسی کرنل سیستمعامل مورد استفاده قرار میگیرد که نمیتوان به فراخوانیهای سیستم از پیش موجود تکیه کرد و باید در واقع آن را برای معماری پردازنده مشخصی که سیستم روی آن اجرا میشود پیادهسازی کرد.
- برخی از کامپایلرها زبانهای برنامهنویسی سطح بالا را پیش از کامپایل کامل کد به کد زبان اسمبلی تفسیر میکنند که این امکان را فراهم میکند که کد اسمبلی برای اهداف عیبیابی و بهینهسازی مورد بررسی قرار بگیرد.
- برخی از کامپایلرها برای زبانهای نسبتا سطح پایین مانند پاسکال یا C، این امکان را برای برنامهنویس فراهم میکنند که زبان اسمبلی را به طور مستقیم در کد منبع توکار کنند (که به آن اسمبلر درون برنامهای گفته میشود). برنامهها با استفاده از چنین تسهیلاتی میتوانند انتزاعات گوناگون را با استفاده از زبان اسمبلی روی هر پلتفرم سختافزاری استفاده میکنند. کد قابل حمل سیستم میتواند این مولفه ویژه پردازنده را از طریق رابط واحد استفاده کند.
- زبان اسمبلی در مهندسی معکوس مفید است. برنامههای زیادی تنها در کد ماشین توزیع شده است که در آن ترجمه به یک زبان اسمبلی به وسیله یک دیساسمبلر (Disassembler) انجام میشود، اما ترجمه به زبان سطح بالا از طریق یک دیکامپایلر (Decompiler) کار دشوارتری است. ابزارهایی مانند «دیساسمبلر تعاملی» (Interactive Disassembler) استفاده گستردهای از دیساسمبلی برای چنین هدفی میکنند. این روش به وسیله هکرها برای کرک کردن نرمافزارهای تجاری مورد استفاده قرار میگیرد و رقبا برای تولید نرمافزار با نتایج مشابه شرکتهای رقیب از آن بهره میبرند.
- زبان اسمبلی برای بهبود سرعت اجرا، به ویژه در کامپیوترهای شخصی اولیه با محدودیت قدرت پردازش و حافظه با دسترسی تصادفی (Random-Access Memory | RAM) مورد استفاده قرار میگرفت و هنوز نیز برای کار با سیستمهای قدیمی و میراثی استفاده میشود.
- اسمبلرها برای تولید بلوکهای دادهها بدون هیچ سربار زبان سطح بالایی (کد منبع قالببندی شده و کد منبع دارای توضیحات) مورد استفاده قرار میگیرند.
معرفی فیلم های آموزش زبان اسمبلی فرادرس
در ادامه، فیلمهای آموزش زبان اسمبلی به زبان فارسی و همراه با مثالهای عملی فرادرس معرفی شدهاند.
فیلم آموزش زبان برنامه نویسی اسمبلی
مدت زمان فیلم آموزش آموزش برنامه نویسی اسمبلی برابر با ده ساعت و مدرس آن مهندس فرشید شیرافکن است. فیلم آموزش برنامه نویسی اسمبلی که در این بخش از مطلب کاربرد اسمبلی معرفی شده برای افرادی مناسب است که قصد دارند ساز و کار کامپیوتر را از پایه بیاموزند و یا نیاز به فراگیری زبان اسمبلی از پایه دارند. در فیلم آموزش برنامه نویسی اسمبلی مبانی، اعداد BCD، وقفهها، اعداد علامتدار، رشتهها، ماکروها و پروسیجرها، برنامهنویسی ۳۲ بیتی همراه با ارائه مثال عملی و دیگر موارد مورد بررسی قرار میگیرند.
- برای دیدن فیلم آموزش زبان برنامه نویسی اسمبلی + اینجا کلیک کنید.
فیلم آموزش محافظت از کدهای نرم افزاری با SmartAssembly (اسمارت اسمبلی)
مدت زمان فیلم آموزش محافظت از کدهای نرم افزاری با SmartAssembly (اسمارت اسمبلی) برابر با هجده ساعت و مدرس آن مهدس عبداله اسکندری است. فیلم آموزش محافظت از کدهای نرم افزاری با SmartAssembly (اسمارت اسمبلی) که در این بخش از مطلب کاربرد اسمبلی معرفی شده است برای افرادی مناسب است که قصد دارند مبهمسازی کدهای نرمافزاری به منظور دشوارتر ساختن کرک آنها را فرابگیرند. در فیلم آموزش محافظت از کدهای نرم افزاری با SmartAssembly (اسمارت اسمبلی) ضمن بیان مبانی محافظت از کدهای نرمافزاری با نرمافزار SmartAssembly، مراحل انجام این کار به طور کامل و به صورت عملی آموزش داده شدهاند.
- برای دیدن فیلم آموزش محافظت از کدهای نرم افزاری با SmartAssembly (اسمارت اسمبلی) + اینجا کلیک کنید.
فیلم آموزش طراحی سیستم های ریزپردازنده ای با EMU8086 و CodeVisionAVR
مدت زمان فیلم آموزش طراحی سیستم های ریزپردازنده ای با EMU8086 و CodeVisionAVR برابر با چهار ساعت و چهارده دقیقه و مدرس آن مهندس مهدی اکبری جعفرآبادی است. فیلم آموزش طراحی سیستم های ریزپردازنده ای با EMU8086 و CodeVisionAVR که در این بخش از مطلب کاربرد اسمبلی معرفی شده برای افرادی مناسب است که قصد دارند به برنامهنویسی ریزپردازنده قوی و پرکاربرد ۸۰۸۶ با استفاده از زبان برنامهنویسی اسمبلی بپردازند. در فیلم آموزش طراحی سیستم های ریزپردازنده ای با EMU8086 و CodeVisionAVR به ساختار و اجزای ریزپردازندهها، ریزپردازنده ۸۰۸۶ و پنتیوم، برنامه نویسی اسمبلی ۸۰۸۶ و نرم افزار EMU8086، طراحی پردازشگر مرکزی ۸۰۸۶، رجیسترهای USART در میکروکنترلر AVR و دیگر موارد مورد بررسی قرار میگیرند.
- برای دیدن فیلم آموزش طراحی سیستم های ریزپردازنده ای با EMU8086 و CodeVisionAVR + اینجا کلیک کنید.
سلام. برای یادگیری اسمبلی نیاز به یک کامپیوتر یا یک کتاب خاص است؟
نیاز به سخت افزار خاصی است؟