You can edit almost every page by Creating an account. Otherwise, see the FAQ.

High Level Assembly

از EverybodyWiki Bios & Wiki
پرش به:ناوبری، جستجو

خطای اسکریپتی: پودمان «AfC submission catcheck» وجود ندارد. اسمبلی سطح بالا ( HLA ) یک زبان اسمبلی سطح بالا است که توسط Randall Hyde توسعه یافته است. این زبان امکان استفاده از ساختارهای زبانی سطح بالاتری را برای کمک به توسعه دهندگان اسمبلی مبتدی و پیشرفته فراهم می کند. این زبان به طور کامل از انواع دادههای پیشرفته و برنامه نویسی شی گرا پشتیبانی میکند . این زبان از نوعی از نحو استفاده می کند که به طور آزاد بر اساس چندین زبان برنامه نویسی سطح بالا (HLL) مانند Pascal ، Ada ، Modula-2 و C++ است تا امکان ایجاد برنامه های زبان اسمبلی خوانا را فراهم کند و به برنامه نویسان HLL اجازه دهد تا HLA را در کمترین زمان ممکن یاد بگیرند.

خاستگاه ها و اهداف[ویرایش]

HLA در ابتدا به عنوان ابزاری برای آموزش برنامه نویسی زبان اسمبلی در سطح کالج-دانشگاه در نظر گرفته شده بود. هدف این است که سطح دانش برنامه نویسی موجود دانش آموزان در هنگام یادگیری مورد بررسی قرار گیرد و از ان در هنگام یادگیری استفاده شود تا پیشرفت انها در زبان اسمبلیمور در سریع ترین زمان ممکن صورت گیرد. اکثر دانشجویانی که دوره برنامه نویسی زبان اسمبلی را می گذرانند قبلاً با ساختارهای جریان کنترل سطح بالا مانند IF، WHILE، FOR و غیره آشنا شده اند. HLA به دانش‌آموزان این امکان را می‌دهد که بلافاصله از آن دانش برنامه‌نویسی که اموخته اند برای کدنویسی زبان اسمبلی در اوایل دوره خود استفاده کنند و به آن‌ها اجازه می‌دهد تا قبل از یادگیری نحوه کدنویسی فرم‌های سطح پایین این ساختارهای کنترلی، به سایر موضوعات پیش‌نیاز در اسمبلی تسلط پیدا کنند. کتاب هنر برنامه نویسی زبان اسمبلی اثر Randall Hyde به این منظور است که از HLA استفاده کرده است. [۱]

مونتاژ کننده سطح بالا در مقابل سطح پایین[ویرایش]

اسمبلر HLA v2.x از دستورالعمل های دستگاه سطح پایین مشابه یک اسمبلر معمولی و سطح پایین پشتیبانی می کند. تفاوت در این است که اسمبلرهای سطح بالا، مانند HLA، Microsoft Macro Assembler (MASM) یا Turbo Assembler (TASM)، در خانواده پردازنده های X86 ، از عبارات مشابه زبان سطح بالا مانند IF، WHILE و غیره، و دستورالعمل‌های اعلان داده‌های جذاب‌تر، مانند ساختارها - رکوردها ، اتحادیه‌ها و حتی کلاس‌ها نیز پشتیبانی می کنند.

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

HLA از تمام دستورالعمل‌های دستگاه سطح پایین مانند سایر اسمبلرهای x86 پشتیبانی می‌کند. علاوه بر این، ساختارهای کنترل سطح بالای HLA بر اساس ساختارهایی هستند که در MASM و TASM یافت می‌شوند، که ویژگی‌های HLL مانند آن‌ها چندین سال قبل از ورود HLA وجود داشت. در HLA، کد اسمبلی سطح پایین را می توان به آسانی مانند هر اسمبلر دیگری با صرف نظر از ساختارهای کنترل HLL نوشت. برخلاف HLL هایی مانند پاسکال و C(++)، HLA به دستورات asm درون خطی نیاز ندارد. در HLA،به نظر می‌رسد که ویژگی‌های مانند HLL با هموارسازی منحنی یادگیری، کمک آموزشی برای برنامه‌نویسان اسمبلی تازه کار فراهم می‌کنند، با این فرض که پس از تسلط بر مجموعه دستورالعمل‌های سطح پایین، استفاده از آن عبارات را متوقف خواهند کرد. در عمل، بسیاری از برنامه نویسان با تجربه، مدت ها پس از تسلط بر مجموعه دستورالعمل های سطح پایین، به استفاده از دستورات HLL مانند در HLA، MASM و TASM ادامه می دهند، اما این کار معمولاً برای بهبود خوانایی انجام می شود.

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

ویژگی های متمایز[ویرایش]

دو ویژگی HLA آن را از سایر اسمبلرهای x86 متمایز می کند: سیستم قدرتمند ماکرو (زبان زمان کامپایل) و کتابخانه استاندارد HLA.

سیستم ماکرو[ویرایش]

زبان زمان کامپایل HLA اجازه می دهد تا زبان را به راحتی گسترش دهید، حتی برای ساخت زبان های دامنه خاصکوچک با هدف کمک به حل آسان مشکلات برنامه نویسی رایج. ماکرو stdout.put که قبلا به اختصار توضیح داده شد، نمونه خوبی از یک ماکرو پیچیده است که می تواند برنامه نویسی را ساده کند. فراخوانی زیر آن ماکرو را در نظر بگیرید:

stdout.put( "I=", i, " s=", s, " u=", u, " r=", r:10:2, nl );

ماکرو stdout.put هر یک از آرگومان ها را برای تعیین نوع آرگومان پردازش می کند و سپس رویه مناسبی را در کتابخانه استاندارد HLA فراخوانی می کند تا خروجی هر یک از این عملوندها را مدیریت کند.

اکثر اسمبلرها انواع مختلفی از قابلیت های اینچنینی را اِرائه میدهند اما مزیتی که HLA نسبت به اسمبلرهای دیگر ارائه می دهد این است که می تواند آرگومان های ماکرو مانند r:10:2 با استفاده از توابع رشته زمان کامپایل گسترده HLA پردازش کند و امکانات ماکرو HLA می تواند انواع متغیرها را استنتاج کند. از آن اطلاعات برای هدایت گسترش کلان استفاده کنید.

زبان ماکرو HLA یک تسهیلات ماکرو بدون زمینه ویژه را فراهم می کند. این ویژگی اجازه می دهد تا به راحتی ماکروهایی بنویسید که بخش های دیگر کد را از طریق یک جفت ماکرو شروع و خاتمه (همراه با فراخوانی های ماکرو میانی اختیاری که فقط بین ماکروهای شروع تا پایان در دسترس هستند) بنویسید. برای مثال، می‌توان با استفاده از این تسهیلات کلان، یک دستور SWITCH–CASE–DEFAULT–ENDSWITCH کاملاً بازگشتی نوشت.

به دلیل طراحی بدون بافت امکانات ماکرو HLA، این دستورات switch..case..default.endswitchرا می‌توان به صورت تودرتو استفاده کرد، و کد ارسالی دستورات تودرتو با عبارات بیرونی تضاد نخواهد داشت.

زبان کامپایل-زمان[ویرایش]

سیستم ماکرو HLA در واقع زیرمجموعه ای از یک ویژگی بزرگتر است که به نام زبان زمان کامپایل HLA (CTL) شناخته می شود. HLA CTL یک زبان تفسیر شده است که در فایل منبع برنامه HLA موجود است. یک مفسر دستورات HLA CTL را در حین کامپایل کردن یک فایل منبع HLA اجرا می کند. از این رو به زبان compile-time نامیده می شود.

HLA CTL شامل بسیاری از دستورات کنترلی مانند #IF، #WHILE، #FOR، #PRINT، یک دستور انتساب و غیره است. همچنین می‌توان متغیرها و ثابت‌های زمان کامپایل (از جمله انواع داده‌های ساختاریافته مانند رکوردها و اتحادیه‌ها) را ایجاد کرد. HLA CTL همچنین صدها عملکرد داخلی (از جمله مجموعه بسیار غنی از توابع تطبیق رشته و الگو) را ارائه می دهد. HLA CTL به برنامه نویسان اجازه می دهد تا برنامه های CTL ایجاد کنند که رشته ها را اسکن و تجزیه می کند و به برنامه نویسان این امکان را می دهد که زبان های خاص دامنه تعبیه شده را ایجاد کنند (EDSLها که به آنها مینی زبان نیز گفته می شود). stdout.put که قبل از این دیدیم نمونه ای از چنین EDSL هایی است. ماکرو put (در فضای نام stdout، از این رو نام stdout .put) لیست پارامترهای ماکرو خود را تجزیه می کند و کدی را منتشر می کند که عملوندهای آن را چاپ می کند.

کتابخانه استاندارد[ویرایش]

کتابخانه استاندارد HLA مجموعه گسترده‌ای از روال‌ها و ماکروهای از پیش نوشته شده است (مانند ماکرو stdout.put که در بالا توضیح داده شد) که زندگی برنامه‌نویسان را آسان‌تر می‌کند و آنها را از اختراع مجدد چرخ هر بار که برنامه‌ای جدید می‌نویسند نجات می‌دهد. کتابخانه استاندارد HLA به برنامه نویسان اجازه می دهد تا برنامه های قابل حملی را بنویسند که تحت ویندوز یا لینوکس اجرا می شوند و چیزی بیشتر از کامپایل مجدد کد منبع ندارند و این شاید به همان اندازه مهم باشد. مانند کتابخانه استاندارد C برای زبان برنامه نویسی C ، کتابخانه استاندارد HLA امکان انتزاع تماس هایی که سیستم عامل سطح پایین (OS) میگیرد را فراهم می کند، بنابراین مجموعه یکسانی از رابط های برنامه نویسی برنامه کاربردی سیستم عامل (API) می تواند برای همه سیستم عامل هایی که HLA پشتیبانی می کند استفاده شود. در حالی که یک زبان اسمبلی امکان برقراری هرگونه تماس سیستم عامل مورد نیاز را فراهم می کند، انگاه نوشتن برنامه های قابل حمل با سیستم عامل در جایی که برنامه ها از مجموعه API کتابخانه استاندارد HLA استفاده می کنند، آسان است.

کتابخانه استاندارد HLA هزاران تابع، رویه و ماکرو را ارائه می دهد. در حالی که لیست در طول زمان تغییر می کند، از اواسط سال 2010 برای HLA نسخه 2.12، شامل توابع در این دسته بندی ها می شود:

  • پردازش آرگومان خط فرمان
  • اعلان و دستکاری آرایه (دینامیک).
  • دستکاری بیت
  • دستکاری لکه (ابژه بزرگ باینری).
  • دستکاری شخصیت
  • تبدیل ها
  • دستکاری مجموعه کاراکترها
  • توابع تاریخ و زمان
  • ورودی/خروجی فایل شی گرا
  • ورودی/خروجی فایل استاندارد
  • توابع دستکاری سیستم فایل، به عنوان مثال، حذف، تغییر نام، تغییر دایرکتوری
  • اعلامیه ها و عملکردهای مرتبط با HLA
  • HLA Object Windows Library: چارچوب شی گرا برای برنامه نویسی Win32
  • دستکاری لیست پیوندی
  • توابع ریاضی
  • تخصیص و مدیریت حافظه
  • API های مخصوص FreeBSD
  • API های مخصوص لینوکس
  • APIهای مخصوص MacOS
  • API های مخصوص Win32
  • توابع کنسول متنی
  • پشتیبانی کوروتین
  • پشتیبانی از متغیرهای محیطی
  • پشتیبانی جابجایی استثنایی
  • پشتیبانی از فایل های نگاشت حافظه
  • پشتیبانی از سوکت ها و شیء مشتری-سرور
  • پشتیبانی از موضوع و همگام سازی
  • عملکردهای تایمر
  • پشتیبانی از تطبیق الگو برای عبارات منظم و زبان های بدون زمینه
  • مولد اعداد تصادفی
  • پشتیبانی تماس روش از راه دور
  • توابع خروجی خطای استاندارد
  • توابع خروجی استاندارد
  • توابع ورودی استاندارد
  • توابع رشته
  • میز (تشریکی) پشتیبانی
  • توابع رشته ای با پایانه صفر

طراحی[ویرایش]

سیستم زبان HLA v2.x یک ابزار مبتنی بر خط فرمان است که شامل چندین مؤلفه است، از جمله یک برنامه پوسته (به عنوان مثال، hla.exe تحت ویندوز)، کامپایلر زبان HLA (به عنوان مثال، hlaparse.exe)، یک مترجم سطح پایین (مانند HLABE یا HLA Back Engine)،یک پیوند دهنده (link.exe در ویندوز، ld در لینوکس)، و ابزارهای دیگر مانند کامپایلر منبع برای ویندوز. نسخه‌های قبل از 2.0 به یک اسمبلر خارجی متکی بودند. نسخه‌های 2.x و نسخه‌های بعدی HLA از HLABE داخلی به‌عنوان شکل دهنده کد شی در بک‌اند استفاده می‌کنند.

برنامه پوسته HLA پارامترهای خط فرمان را پردازش می کند و فایل های مناسب را به هر یک از برنامه هایی که سیستم HLA را تشکیل می دهند هدایت می کند. این زبان به عنوان ورودی فایل های .hla (فایل های منبع HLA)، .asm (فایل های منبع برای MASM، TASM، FASM، NASM یا اسمبلر Gas)،فایل های .obj به عنوان ورودی برای لینکر، وفایل های .rc (برای استفاده توسط یک کامپایلر منبع).

ترجمه کد منبع[ویرایش]

در اصل، ابزار HLA v1.x کد منبع خود را در یک فایل منبع میانی کامپایل میکند که یک اسمبلر پشتیبان مانند MASM، TASM، اسمبلر مسطح ( FASM )، اسمبلر Netwide (NASM)، یا اسمبلر گنو (Gas) را به کد یک شی سطح پایین ترجمه میکند. از نسخه 2.0، HLA شامل موتور HLA Back خود (HLABE) بود که ترجمه کد شی سطح پایین را ارائه می کرد. با این حال، از طریق پارامترهای مختلف در خط فرمان، HLA v2.x همچنان توانایی ترجمه فایل منبع HLA را به فایل منبعی را دارد که با یکی دیگر از این اسمبلرها سازگار است.

موتور پشتی HLA[ویرایش]

HLA Back Engine (HLABE) یک کامپایلر بک اند است که یک زبان میانی داخلی را به فایل اجرایی قابل حمل سطح پایین (PE)، فرمت فایل شی معمولی ( COFF )، فرمت اجرایی و پیوند پذیر (ELF) یا کد شی Mach-O .ترجمه میکند . یک برنامه HLABE بیشتر شامل اطلاعاتی مانند بیانیه های انتشار داده (بایت)، بیانیه های آدرس قابل جابجایی 32 بیتی، دستورالعمل های انتقال کنترل x86 و دستورالعمل های مختلف است. علاوه بر ترجمه بایت ها و بیانیه های آدرس قابل جابجایی به قالب کد شی سطح پایین، HLABE همچنان از بهینه سازی جابجایی شاخه (انتخاب کوتاه ترین شکل ممکن دستورالعمل شاخه) استفاده میکند.

اگرچه HLABE در کامپایلر HLA v2.x گنجانده شده است، اما در واقع یک محصول جداگانه است. این دامنه عمومی و منبع باز است (با میزبانی SourceForge.net ).

همچنین ببینید[ویرایش]

یادداشت[ویرایش]

 

  1. "The Art of Assembly Language Programming". Archived from the original on 2018-03-29. Retrieved 2010-02-12.

منابع[ویرایش]

  • Richard Blum, Professional assembly language, Wiley, 2005, ISBN 0-7645-7901-0, p. 42
  • Randall Hyde, Write Great Code: Understanding the machine, No Starch Press, 2004, ISBN 1-59327-003-8, pp. 14–15 and used throughout the book
  • Randall Hyde, The Art of Assembly Language, 2nd Edition, No Starch Press, 2010, ISBN 1-59327-207-3, used throughout the book

خواندن بیشتر[ویرایش]

لینک های خارجی[ویرایش]

رده:زبان‌های برنامه‌نویسی سطح بالا رده:نرم‌افزارهای در مالکیت عمومی رده:زبان‌های اسمبلی رده:اسمبلرها



This article "High Level Assembly" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:High Level Assembly. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.

  1. "The Art of Assembly Language Programming". Archived from the original on 2018-03-29. Retrieved 2010-02-12.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.


Read or create/edit this page in another language[ویرایش]