بنام  خدا 



آشنایی با کامپایلرهای زبان اسمبلی بخش 4  :


قبل از شروع این بحث ، اجازه دهید بگویم که  برای دانلود نسخه های جدید  فلت اسمبلر بهتر است که از سایت رسمی فلت اسمبلر که در پست قبلی آدرس اش را دادم استفاده کنید . هرچند می توانید از  وبلاگهای اسمبلر با  آدرس  http://assembler.blog.ir    و   فسمجی  با  آدرس  http://fasmg.blog.ir    نیز  تمامی نسخه های  فلت اسمبلر را دانلود نمایید  ولی بهرحال با توجه به اینکه  فلت اسمبلر ، بروزترین کامپایلر اسمبلی در دنیاست  لذا بهتر است نسخه های جدید فلت اسمبلر را از همان سایت رسمی اش دانلود کنید .


لازم به ذکر است که  نسخه ی قابل حمل فلت اسمبلر  یعنی  فسمجی (fasmg)  تقریبا هر 7 روز یک بار  به نسخه ی جدید ،  آپدیت و  آپلود می شود که این نشان می دهد که  آقای توماس ، سعی دارد تمامی تمرکزش را  روی  فسمجی قرار دهد و عملا  در آینده  بجای اینهمه نسخه ی فلت اسمبلر  ، تنها یک نسخه  و با نام  فسمجی  را  شاهد خواهید بود  . 

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

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

+

+

+

+

در ادامه ی سلسله مباحث مربوط به کامپایلرهای زبان اسمبلی قصد دارم یک اسمبلر قدیمی و معروف  را   که   شاید بسیاری از شما  انرا بشناسید  معرفی کنم .


معرفی می کنم:


نتواید اسمبلر  یا  نَسم (Nasm)


 The Netwide Assembler



آدرس   سایت رسمی   نتواید اسمبلر :


https://nasm.us/



نکته ی مهم  :  نتواید اسمبلر را فقط از آدرس بالا باید دانلود کنید . بجز آدرس بالا بقیه ی آدرسهای مشابه هیچ ربطی به  زبان اسمبلی ندارند و  موضوعات نامربوط را به شما نشان می دهند . مراقب باشید .





آدرس انجمن رسمی  نتواید اسمبلر :


https://forum.nasm.us/


در این انجمن می توانید  سوالات خود را از اعضای انجمن  بپرسید . 


البته این انجمن  رو به افول است زیرا بسیاری از کاربرانش به سمت انجمن  فلت اسمبلر مهاجرت کرده اند .



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



آدرس مربوط به دانلود  جدیدترین  نسخه های  مختلف  نتواید اسمبلر :



 https://www.nasm.us/pub/nasm/releasebuilds/2.14.03rc2/



عملا در این آدرس با نسخه های مختلف  Nasm مواجه می شوید و  اگر برنامه نویس لینوکس باشید بهتر از من می توانید تشخیص دهید که  کدام نسخه  مناسب تر است . 


صفحه ی ویکی پدیا انگلیسی برای  نتواید اسمبلر:


 https://en.wikipedia.org/wiki/Netwide_Assembler


در این صفحه اطلاعات دقیق و کامل در مورد تاریخچه  ی ساخت  نتواید اسمبلر  همراه با قابلیتهایش  نوشته شده است .


من به دلیل  اینکه نتوانسته ام هیچوقت با   نتواید اسمبلر برنامه نویسی کنم  عملا  هیچ چیز خاصی  برای گفتن ندارم . لذا   خیلی سریع  یکسری تحلیلهای شخصی  خودم را در مورد  نتواید اسمبلر می نویسم  و بحث را  جمع می کنم :



تحلیلها و تفسیرات شخصی من در مورد نتواید اسمبلر از این قرار است :


1- نتواید اسمبلر در سال 1996  ساخته شده و عملا  3 سال قدیمی تر از فلت اسمبلر و  2 سال قدیمی تر از  ریاکت اسمبلر  می باشد .  بنابراین هردوی  فلت اسمبلر و ریاکت اسمبلر براساس  نتواید اسمبلر ساخته شده اند .


به همین جهت شباهتهایی در ساختار  Fasm و  RosAsm   با  Nasm   وجود دارد .


یعنی هردوی  Fasm  و   RosAsm  سعی کرده اند در برخی موارد از روی  Nasm  الگوبرداری کنند .


مثلا  RosAsm  از لحاظ سینتاکس (گرامر) بسیار شبیه به  Nasm می باشد و همچون  Nasm   دارای دیس اسمبلر است   .


از انطرف  Fasm  از لحاظ تنوع  فایلهای خروجی و مدلهای برنامه نویسی و قابلیت حمل ، از روی  Nasm  الگوبرداری کرده است . 


بنابراین می توانیم  نتواید اسمبلر را جد مشترک  فلت اسمبلر و  ریاکت اسمبلر بدانیم . این دو اسمبلر عملا  تکمیل کننده ی  نتواید اسمبلر هستند . یعنی برخی نواقصی که در نتواید اسمبلر هنوز هم دیده می شود در این دو اسمبلر وجود ندارد . 


2-  نسم (نتواید اسمبلر)   یک دیس اسمبلر دارد که این دیس اسمبلر بعدا در  ریاکت اسمبلر  (RosAsm) بصورت کامل پیاده سازی شد .


3-  نسم  برای سیستم عاملهای داس ، ویندوز ، لینوکس ، یونیکس ، مک  نسخه های مختلف دارد.


4-  نسم  همانند  فلت اسمبلر  ،  لینکر ندارد !!!

اما درعوض ، از لینکر سیستم عامل یا از رابطها و زبانهای برنامه نویسی مثل ویژوال استودیو برای تولید نرم افزار استفاده می کند.

برهمین اساس ،  نسم  در محیط  لینوکس بطور کامل از ابزارهای خود لینوکس مثل  gcc  برای لینک کردن و تولید نرم افزار استفاده می کند .


یعنی در نسم ، شما مجبور نیستید لینکر را با دست بنویسید .


البته نسم در لینوکس شهرت بیشتری دارد تا در ویندوز .


5- نسم در مدلهای 16 بیت 32 بیت و 64  بیت  می تواند نرم افزار یا سیستم عامل بسازد .



6- نسم می تواند همچون  فلت اسمبلر ، نرم افزار ویندوزی را بصورت فشرده و تک سکشن بسازد  ( این یکی از امتیازات فلت اسمبلر بود  که   فراموش کردم در پست قبلی بنویسم و الان  اینجا  آنرا  بیان کردم )


7-  نسم  همچون فسم  توانایی تولید سیستم عامل را دارد اما  چون نسم بطور کامل با زبان برنامه نویسی  C  ساخته شده و خودمیزبان نیست عملا سرعت کمتری نسبت به فسم دارد .


سرعت در زبان اسمبلی حرف اول و اخر را می زند  .  لذا  عملا  امروزه   برای ساختن سیستم عاملهای  سریع و کوچک از فسم (فلت اسمبلر) استفاده می شود .




8- بعد از اختراع  اسمبلرهای  Fasm  و  RosAsm  عملا از تعداد کاربران   Nasm  کاسته شد و حتی سیستم عاملهایی که با  Nasm  ساخته شده بودند از اول توسط این کاربران با   Fasm  بازنویسی شدند .



9- بدلیل اینکه   فلت اسمبلر (Fasm) بطور کامل توسط زبان اسمبلی سطح پایین خالص ساخته شده و خودمیزبان است  و تمامی امتیازات  نسم (بجز دیس اسمبلر)  را دارد و بدون نیاز به زبانهای سطح بالا و تنها با کمک  ماکرو ، قابلیت حمل سخت افزاری و نرم افزاری دارد  لذا برنامه نویسان عملا  به  نسم نیاز ندارند و   عملا    جامعه ی کاربری  نسم  درحال کوچک شدن است و  برنامه نویسان حرفه ای به سمت فلت اسمبلر مهاجرت کرده اند .



10-  طراح  اصلی  نسم  در همان سالهای اولیه فوت کرد و عملا در توسعه ی این اسمبلر خلل ایجاد شد .  هم اکنون یک تیم از برنامه نویسان درحال  توسعه ی نسم هستند . 


11- بدلیل عدم  بازنویسی  سورس  نسم  با  زبان اسمبلی و اصرار شدید تیم توسعه  دهنده به  ادامه ی روند  کدنویسی سورس این اسمبلر با زبان  C  ، عملا  کاربرانی که خواستار این بودند که  نسم همچون فسم ، خودمیزبان شود  با در بسته روبرو شده و از نسم  دل کندند و به فسم  مهاجرت کردند.


عملا تنها بهانه ی تیم توسعه دهنده ی نسم در استفاده از زبان  برنامه نویسی  C  در ساختن نسخه های مختلف نسم ؛    حفظ قابلیت حمل نرم افزاری و سخت افزاری است .  


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


قابل حمل بودن  فلت اسمبلر  تنها با استفاده از  ماکرو  و براحتی امکان پذیر است و هیچ نیازی به زبانهای سطح بالا نیست  . 


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


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


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


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


اسمبلرهای  جورواجور و سلیقه ای و بعضا  غیراستاندارد   آبروی  زبان اسمبلی  و حتی زبان ماشین را  خدشه دار کرده اند و مایه ی  بی اعتباری این دو زبان  شده اند .




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

در نتیجه برنامه نویسان اسمبلی این وسط قربانی شده اند .  این اسمبلرها باعث تردید و دودلی و اتلاف وقت و انرژی برنامه نویسان شده اند .



تکرار می کنم : زبان اسمبلی باید فقط و فقط  یک  کامپایلر داشته باشد . 



بنابراین اختراع صدها کامپایلر  جورواجور و ناسازگار  برای زبان اسمبلی ، عملا  این زبان اصیل و پاک را  منزوی و بدنام کرده  است .


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




12-  طراحان نسم (Nasm) انقدر دیوانه  و بی عقل   و روانپریش   هستند که  نه فقط هیچ امکاناتی از جمله  IDE به این اسمبلر قدیمی و معروف اضافه نکرده اند بلکه حتی تعدادی از دستورات کاربردی و مفید زبان اسمبلی را از درون کامپایلر  نسم  حذف  کرده اند و درعوض از اکثر  اسمبلرهای بزرگ و  قدرتمند    ایراد می گیرند که واقعا این حرکت خیلی مضحک و احمقانه  و غیرحرفه ای  است .


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


نتواید اسمبلر  هنوز که هنوزه  IDE ندارد و در محیط ویندوز قابل استفاده نیست !!!!!

تعداد زیادی از دستورات اسمبلی را  پشتیبانی نمی کند !!!!!!


سورس اش هنوز با زبان  سی  ساخته شده و درنتیجه  این اسمبلر را روز به روز کندتر و سنگین تر کرده است  .  زبان  برنامه نویسی   C  اصلا  گزینه ی خوبی برای طراحی  اسمبلر نیست . 

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


ثالثا  طراحی اسمبلر با زبان  C  مصداق  اینست که لقمه ی غذا را  100 بار دور سرمان بچرخانیم بعد وارد دهان  بکنیم !!!!


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



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


این اسمبلر  درحال توسعه است اما  درواقع یک  حرکت بیهوده را به ما نشان می دهد . 


اگر نتواید اسمبلر بتواند  قابلیتهای  فلت اسمبلر و ریاکت اسمبلر را  بدست اورد و با اسمبلی بازنویسی شود  شاید بتواند  به بهترین کامپایلر زبان اسمبلی تبدیل شود .


اما این فقط یک آرزو   و   خیال واهی است .  



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


نتواید اسمبلر،    رایگان و اوپن سورس است و سورس و باینری اش را می توانید تحت لایسنس  BSD   بازنویسی و بازنشر کنید . 


بنابراین شاید این وسط کسی پیدا شود که از روی  Nasm  یک اسمبلر جدید و مدرن  و خودمیزبان بسازد !!



نتواید اسمبلر  عملا هنوز متوقف نشده ولی  توسعه دهندگان  اسمبلی   چندان تمایلی به  کار با این اسمبلر قدیمی را  ندارند و شاید در  سالهای آینده شاهد  توقف کامل نتواید اسمبلر باشیم .


از نظر من  (که یک نظر کاملا شخصی است ) ،  نتواید اسمبلر  در آینده  منسوخ خواهد شد زیرا حریف  فلت اسمبلر و سایر اسمبلرهای مدرن و همه منظوره   نخواهد شد . 


نتواید اسمبلر بیشتر ، توسط  برنامه نویسان  سیستم عامل لینوکس بکار می رود و در ویندوز  هیچ  کاربردی ندارد . 


عدم  وجود  هرگونه  IDE  برای  نتواید اسمبلر  خودش  عاملی است برای فراری دادن برنامه نویس  . 

همچنین حذف شدن بسیاری از دستورات مفید زبان اسمبلی از کامپایلر درونی  نتواید اسمبلر دلیل دیگری بر  افول و انقراض  این اسمبلر می باشد . 



تحلیل شخصی من اینست که  نتواید اسمبلر   منقرض خواهد شد و به تاریخ خواهد  پیوست .


اگر هم منقرض نشود  کسی به آن  توجه  و اعتنا نمی کند .  کمااینکه همین حالا هم  کمتر کسی در دنیا  به سمت  نتواید اسمبلر می رود . 


همه درحال مهاجرت به فلت اسمبلر  هستند .  این خودش  دلیلی خوب بر  انقضای تدریجی  نسم می باشد . 


من عادت ندارم نرم افزارها یا سیستم عاملهای منقرض و منسوخ را  در وبلاگهایم  آپلود کنم . 


من فقط چیزهایی را آپلود می  کنم  که   به  تداوم حیات شان و پیشرفت شان امیدوار باشم .


بنابراین   هیچ لینکی  برای  آپلود  Nasm   نمی گذارم .   اگر دوست داشتید خودتان از آدرس بالا   نسخه های  مختلف  Nasm  را  دانلود کنید . 


کلام آخر:  نتواید اسمبلر  ، منسوخ و فراموش خواهد شد. 

+

+

+



++++ پست ویرایش شد :


در پست های بعدی ،  شما را  با سایر کامپایلرهای   منسوخ شده ی زبان اسمبلی  آشنا  می کنم  . عمدا  می خواهم شما را به این نتیجه برسانم که اینهمه کامپایلر برای زبان اسمبلی در حکم یک سم  مهلک  می باشند و عملا  این زبان  اصیل و پاک را  نابود می کنند .  


پس منتظر پست های بعدی ام که  در آنها  مابقی کامپایلرهای زبان اسمبلی را آنالیز می کنم  باشید .



تا بعد .....

+


موضوعات وبلاگ وحیدمی :

من  در تمامی پستهای وبلاگ وحیدمی ، سعی می کنم لااقل یک اشاره ای به موضوعات این وبلاگ داشته باشم . به همین دلیل برای تمامی پستهای این وبلاگ ،  تمام جعبه های موضوعات  وبلاگ  شامل  Idea ،  Assembly  ،  vahidmy  ، Music  ، Binary ، OS ، Weblog ، IT   ؛  را تیک می زنم که البته در دنیای وبلاگنویسی،  این رفتار ؛   کاری مضحک  و بی معنا و غیرحرفه ای محسوب می شود  ولی من به این قواعد و استانداردهای وبلاگنویسی اهمیت نمی دهم و دوست دارم هرطور که دلم می خواهد وبلاگنویسی نمایم و آزاد باشم . لذا  همینقدر که یک اشاره ی کوچک به این موضوعات در همین پاراگراف شد ،  از نظر خودم ، کافی است !!

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

من رسومات  کهنه ی دنیای  وبلاگنویسی و مرزهای علم را جابجا می کنم !!

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


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


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


+




وحید  محمدی  -  وبلاگ  وحیدمی


https://vahidmy.blog.ir