دیکودر

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

دیکودر

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

اینجانب علی صمدی برنامه نویس زبان اسمبلی و مدیر وبلاگهای (فلت اسمبلر) و (گلاسری) و (دیکودر) می باشم
وبلاگ گلاسری: http://glossary.blog.ir
وبلاگ فلت اسمبلر: http://flatassembler.blog.ir
وبلاگ دیکودر: http://decoder.blog.ir
شهریور 1397 . ایران .



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

بنام  خدا

 

اگر با یک  hex editor  محتوای درون یک نرم افزار ویندوزی را نگاه کنید در بخشهای ابتدایی به جایی می رسیم که در ستون کاراکترها یعنی ستون سمت راست برنامه ی  hex editor    شاهد کاراکترهای نامفهومی خواهیم بود .

شاید این سوال در ذهن شما ایجاد شده باشد که این کاراکترهای نامفهوم در ستون سمت راست  hex editor   چه بخشهایی از یک نرم افزار ویندوزی را  تشکیل می دهند و معنایشان چیست .

+

در پاسخ به این سوال که در ذهن خیلی از کاربران ویندوز ممکن است ایجاد شده باشد باید بگویم که این ستون کاراکترهای نامفهوم  در اکثر موارد همان  سورس کد نرم افزار ویندوزی است که شما انرا در بخش سمت راست برنامه ی hex editor به شکل کاراکترهای نامفهوم می بینید . 

+

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

+

خب حالا در همین قسمت  ، یک نگاهی به ستون وسط برنامه ی hex editor  بیاندازید تا شاهد کدهای هگزادسیمال زبان ماشین باشید .

بله در اصل ،  ما با ستون وسط  برنامه ی hex editor کار داریم زیرا سورس برنامه و ریسورس و سایر اجزای نرم افزارهای ویندوزی به زبان ماشین تبدیل شده و ما این سورس نهایی را  به زبان ماشین  و در ستون وسط  می بینیم .

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

 

 

558BEC 

 

سوال : کد  55 دقیقا جه معنایی دارد و کاربردش چیست ؟؟

 

جواب:  کد 55  ، کد زبان ماشین بر مبنای هگزادسیمال است و برابر با دستور زیر می باشد که یک دستور زبان اسمبلی است :

 

push ebp

 

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

رجیستر  ebp  یک رجیستر  بیس و پایه  می باشد و درواقع قاب اولیه ی پشته را تشکیل می دهد . این رجیستر  کاملا  32 بیتی می باشد .

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

اما این دستور چرا در نرم افزارهای ویندوزی که اکثرا  با زبانهای سطح بالا تولید شده اند دیده می شود ؟؟؟

پاسخ:  چون این دستور بخش ابتدایی روال برنامه ای  است که با زبان سطح بالا مثل بیسیک یا پاسکال یا سی یا  سی پلاس پلاس  ساخته شده است .

+

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

دستور بعدی که انرا  بررسی می کنیم اینست :

 

mov ebp , esp

 

 

عملا  دستور  بالا   به کد هگز 8BEC     ترجمه می شود .

 

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

 

push ebp

mov ebp , esp

 

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

 

558BEC

دستور  mov ebp,esp  عملا بخش دوم از قاب اولیه ی پشته را تشکیل می دهد .

+

ببنید  مثلا فرض کنید که شما در زبان بیسیک چنین روالی را در اختیار دارید:

 

private  sub  form1.load ()

.....

.....

.....

end sub

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

یعنی عبارت  private  sub  form1.Load  ابتدا به دستورات  push ebp | mov ebp, esp در زبان اسمبلی ترجمه شده سپس این دستورات اسمبلی به کدهای هگزادسیمال زبان ماشین یعنی   558BEC   ترجمه می شود  و شما با چشم می توانید  این کد هگز  558BEC را  با کمک  هر  HEX EDITOR  دلخواهی  مستقیما  مشاهده کنید .

+

عملا عبارت  end sub  نیز  به دستورات  mov esp,ebp    و  سپس به کد  هگز  BC00000000  ترجمه می شود که شما می توانید این کد هگز را در  HEX EDITOR   با چشم  ببینید .

 

 عبارت  end sub  به ترتیب به کدهای زیر ترجمه می شود . اول به اسمبلی و  سپس به زبان ماشین:

Assembly:

 

mov esp ,ebp

pop ebp

 

-------

Machine Code:

 

8C00000000

5D

 

+

همانطور که می بینید ترتیب و جهت دستورات اسمبلی  در بخش پایانی  روال  دقیقا معکوس همان دستورات بخش  آغازین روال می باشد .  یعنی در دستور اولی  که مربوط به بخش  پایانی روال می باشد جای رجیسترهای  ESP  و  EBP   عوض می شود و سپس  بجای دستور  PUSH از دستور  POP  استفاده می شود .

این بدان دلیل است که پشته در حافظه ی Ram  کامپیوتر  شبیه به یک جوراب رفتار می کند .  همه  می دانیم که یک جوراب سالم همیشه فقط یک ورودی و خروجی دارد  و انتهای ان بسته است .

مثلا اگر شما 5 عدد توپ  پینگ پونگ را در درون یک جوراب فرو کنید . برای خارح کردن انها باید بصورت معکوس رفتار کنید . یعنی  ابتدا باید اخرین توپ (توپ پنجم)  را بیرون بکشید بعد توپی که یکی مانده به اخر است ( یعنی توپ چهارم)  تا اینکه به اولین توپ برسید .

پشته در حافظه  Ram  کامپیوتر دقیقا مثل یک جوراب سالم رفتار می کند . یعنی باید ابتدا  اخرین پارامتر را با دستور  POP  بیرون بکشید . بعد پارامتری را که یکی مانده به اخر است و بعد پارامترهای بعدی تا اینکه در اخر کار ، بتوانید اولین پارامتر را بیرون بکشید  .

+

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

+

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

+

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

+

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

+

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

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

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

+

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

+

+

+

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

اجازه دهید تا یک کد دیگر را نیز برایتان رمزگشایی کنم :

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

 

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

+

اما اگر شما توابع  API ویندوز یا هر تابعی که در خارج از برنامه ی اصلی قرار دارد  را احضار کنید  آنوقت  دستور  Call  به   کد هگز FF15  تبدیل می شود.

اگر با کمک یک  hex editor  در درون بخش کد  نرم افزارهای ویندوزی با کد هگز  FF15 برخورد کردید شک نکنید که این یعنی احضار یک تابع  ویندوزی یا هر تابعی که در خارج از  نرم افزار اصلی می باشد .

اما اگر با کد E8 روبرو شدید این یعنی احضار  یک تابع یا  روتین داخلی که دقیقا در داخل خود برنامه ی اصلی فرار دارد .

+

+

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

+

 

علی صمدی -  1397  ه . ش

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

موافقین ۲ مخالفین ۰ ۱۸ شهریور ۹۷ ، ۱۷:۰۲
علی صمدی

بنام خدا

decoder1

xor eax , eax

33C0 

دستور  xor eax,eax یک دستور زبان اسمبلی می باشد که بعد از اسمبل شدن به کدهای زبان ماشین ترجمه می شود.  کدهای  33C0   که در بالا مشاهده می کنید عملا  همان کدهایی هستند که در فرایند اسمبل شدن دستور  xor eax , eax   توسط اسمبلر بطور  اتوماتیک تولید می شوند .

حال دستور   xor eax, ecx  را  اسمبل می کنیم. نتیجه  این می شود:

33C1

حالا دستور    xor eax ,4  را اسمبل می کنیم  :

 83F004

چه  اتفاقی افتاد؟؟؟؟

چرا کد  33  دیگه تولید نشد و بجایش کد   83F0  تولید شد ؟؟؟  مگر نباید  عبارت  xor eax  همیشه  به کد  33  تبدیل شود؟؟؟؟!!!!

پاسخ:

این مربوط به اسمبلر می شود . ببینید  قاعده ی چندان مشخصی ندارد بجز اینکه بگوییم اگر هردو عملوند  از جنس رجیستر بودند مثلا  eax   یا  ecx  آنوقت  عبارت  xor eax   قاعدتا  باید به کد  33   تبدیل شود که معمولا  تبدیل می شود . اما اگر عملوند سمت راست ، از جنس عدد بود انوقت  خود عدد  مستقیما  بدون تغییر  اسمبل شده ولی عبارت  xor eax  تغییر ماهیت می دهد و به کد  83F0  تبدیل می شود . شاید بخاطر انکه عملگر سمت راست دیگه یک رجیستر نیست بلکه یک عدد است و عملا اسمبلر شیوه ی کدگذاری را تغییر می دهد .

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

++++++++

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

+

سوال: خب اگر اسمبلی کار ما را آسان می کند پس چرا  ما  وارد بحث  رمزگشایی شده ایم ؟؟؟

+

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

ضمنا این مبحث باعث می شود که ما بفهمیم چطوری کد اسمبلی را بهینه کنیم .

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

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

+

عملا با وجود زبانهای قدرتمند و انعطاف پذیر و بی همتایی همچون ماشین و اسمبلی چه نیازی به زبانهای سطح بالا داریم ؟؟؟

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

ادمی مثل من عملا هیچ نیازی به زبانهای سطح بالا ندارد .

اگر بحث بهینه سازی کد  در میان باشد هیچ زبانی مناسبتر از اسمبلی نیست و زبانهای سطح بالا هرچقدر هم که باهوش و مدرن باشند بازهم نمی توانند کد ما را بصورت میلی متری   بهینه کنند .

+

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

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

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

+

این افراد با  نوشتن کتابها و مقالات زرد  تحت عناوینی همچون (مزایای اسمبلی )  یا  ( مضرات اسمبلی)  سعی دارند مرتبا به مخاطب بگویند که اسمبلی اصلا به درد نمی خورد و شما به اسمبلی نیاز ندارید و باید با زبانهای سطح بالا برنامه نویسی کنید زیرا این بهینه سازی کد را در زبانهای سطح بالا نیز می توان انجام داد !!!!!

+

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

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

+

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

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

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

+

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

+

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

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

+

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

+

مقالات زرد و بی ارزش خارجی  تحت عنوان  Assembly advantage  یا حتی بدتر از  ان  ،   Assembly DisAdvantages  عملا مثل بمب اتمی می توانند ویرانگر  و مخرب باشند . هرگز چنین مقالات احمقانه ی خارجی را نخوانید و چرندیات این افراد را باور نکنید .  

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

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

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

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

+

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

مگر زبان سطح بالا هیچ درکی از زبان ماشین دارد که بخواهیم در ان کدمان را  طبق قوانین زبان ماشین  و پردازنده  ، بهینه سازی کنیم ؟؟؟

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

+

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

+

 

علی صمدی - مدیر وبلاگ  دیکودر 

۱ نظر موافقین ۲ مخالفین ۰ ۱۰ شهریور ۹۷ ، ۲۳:۴۲
علی صمدی

بنام خدا

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

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

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

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

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

++++

علی صمدی :  مدیر وبلاگهای  گلوساری ، فلت اسمبلر ،  دیکودر 

وبلاگ گلوساری:   http://glossary.blog.ir

وبلاگ فلت اسمبلر:   http://flatassembler.blog.ir

وبلاگ  دیکودر :   http://decoder.blog.ir 

موافقین ۲ مخالفین ۰ ۱۰ شهریور ۹۷ ، ۲۳:۴۲
علی صمدی