vahidmy

وبلاگ شخصی وحید محمدی

vahidmy

وبلاگ شخصی وحید محمدی

وحیدمی

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


آدرس وبلاگ وحیدمی :

Home Page


https://vahidmy.blog.ir

+


Archive

آرشیو و بایگانی وبلاگ وحیدمی

https://vahidmy.blog.ir/archive

+


نقشه وبلاگ وحیدمی:

Sitemap

https://vahidmy.blog.ir/sitemap.xml

+

خوراکخوان وبلاگ وحیدمی

Feed

RSS

https://vahidmy.blog.ir/rss

+

آدرس مورد استفاده خزنده ها روباتها و موتورهای جستجوگر

Robot

https://vahidmy.blog.ir/robots.txt


+

مشخصات وبلاگ وحیدمی:


ساعات انتشار پست جدید وبلاگ :

بیست و چهار ساعته

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


نام مدیر : وحید محمدی

گونه : وبلاگ شخصی با آدرس اختصاصی و محتوای عمومی

ژانر : تمام ژانرها

کاربرد : همه منظوره

هدف وبلاگ : به اشتراک گذاشتن دانش و تجربه با مردم و پرداخت زکات علم

مقصد مدیر وبلاگ : کسب رضای خداوند .

جنس وبلاگ : وبلاگ شخصی

تاریخ تاسیس : تیر 1398 خورشیدی



موضوعات وبلاگ : تمام علوم و فنون و مسائل مختلف در تمام زمینه


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

بروزرسانی:

وبلاگ وحیدمی منحصرا توسط سایت بلاگ دات آی آر به آدرس blog.ir میزبانی می شود . بنابراین بجز دامنه vahidmy.blog.ir سایر دامنه ها جعلی و فیک و خطرناک هستند .
برای مشاهده نکات جدید و ترفندهای امنیتی لطفا به آدرس زیر مراجعه فرمایید:

https://vahidmy.blog.ir/post/1



آدرس وبلاگهای تخصصی :

https://spasm.blog.ir

https://fasmy.blog.ir

https://binasm.blog.ir

طبقه بندی موضوعی
مطالب پربحث‌تر
  • ۰۱/۰۴/۱۱
    adc
نویسندگان
پیوندها

لذت اسمبلی

جمعه, ۲۸ تیر ۱۳۹۸، ۰۷:۳۲ ب.ظ






بنام  خدا



آدرس جدید پست براساس شماره ترتیبی :


https://vahidmy.blog.ir/post/19



عنوان پست :



لذت اسمبلی :


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

چون تنها دلیل من برای بازگشت به  دنیای وبلاگنویسی ، احیای زبان برنامه نویسی اسمبلی است و هیچ دلیل دیگری ندارم .


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


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



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

زبان اسمبلی زبان پردازنده است .  مهمترین و رایج ترین پردازنده در دنیا پردازنده ی اینتل است .

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

 

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


پردازنده ی اینتل  دارای تعدادی رجیستر ( ثبت کننده )  می باشد که  بصورت فیزیکی  در درون اش  جای دارند .


این رجیسترها  به  این صورت هستند :


eax


ebx


ecx


edx



ebp


esp


eip



یکسری  رجیستر هم  در  پردازنده ی اینتل داریم  که   بعنوان رجیستر پرچم  نامیده می شوند و کارشان اینست که   حالت  0 و 1 زبان ماشین را  در عمل  به ما  نشان می دهند و اینها مبنای کار  زبان اسمبلی هستند .


0  یعنی  خاموش


1  یعنی روشن



رجیسترهای پرچم عبارتند از :


af


cf


zf


of



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


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



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



مثلا  می خواهیم  وضعیت یک متغیر را  بعنوان وضعیت  "غلط "  به اسمبلر  معرفی کنیم :

( یعنی بگوییم فلان چیز ، غلط و اشتباه است )

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


mov  eax ,   False        ;   eax =  False   .   False


در زبان اسمبلی    ، عباراتی که در سمت راست   کاراکتر  ;  قرار می گیرند بعنوان  کامنت ( توضیح . تفسیر)  محسوب شده و  کامپایلر زبان اسمبلی این عبارات را نادیده گرفته و از کنارشان  بی تفاوت  رد می شود و به سراغ دستورات  بعدی  می رود . 

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


معمولا  کدهای زبان اسمبلی بصورت  یک ستون از دستورات (یعنی بصورت عمودی ) نوشته می شود  :


مثال:

xor   eax  , eax       ;  eax  =  0

xor   ebx  ,  ebx       ;  ebx  =0

xor   ecx , ecx         ; ecx =0

xor  edx  ,  edx        ;  edx = 0


نکته: قطعه  کد بالا  عملا به شما نشان می دهد که  هر برنامه ی اسمبلی  بصورت یک ستون عمودی نوشته می شود . همانطور که  در بالا گفتم  هر عبارتی که   در سمت راست  کاراکتر ;  نوشته شود  کامنت است و  کامپایل نمی شود . مثل عبارت  eax=0  .  عملا  در زبان اسمبلی   از   کاراکتر تساوی  ( یعنی  = )    استفاده نمی کنیم  چون این کاراکترهای ریاضی توسط  زبان اسمبلی قابل درک نیست .  .  بجایش از دستور  mov  یا   xor   استفاده می کنیم .


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


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


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


نکته:  شما می توانید همیشه برای همه ی کارها  منحصرا از رجیستر  eax  استفاده نمایید .


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



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


mov eax , 0


یا

mov  eax , eax


این دو دستور  سرعت کمتری نسبت به  دستور  xor eax , eax   دارند اما درعوض تعداد سیکلهای کمتری در پردازنده ی اینتل ایجاد می کنند و عملا  پردازنده  در زمان کمتر ، کار بیشتری انجام می دهد و این به نفع  پردازنده است  .



نکته ی مهم:


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


این حرف را اینطوری  پاسخ می دهم:


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

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


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


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


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


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


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



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


لذت اسمبلی در  حرف زدن با سخت افزار است !!


آیا دوست ندارید کنترل پردازنده ی کامپیوترتان را شخصا به دست گیرید و به او دستور بدهید ؟؟؟؟؟


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




تا بعد .....

+



+




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


https://vahidmy.blog.ir



https://vahidmy.blog.ir/robots.txt



https://vahidmy.blog.ir/sitemap.xml






بروزرسانی

براثر حملات سایبری به وبلاگ وحیدمی ؛ تمام کامنت های کاربرها و پاسخ های من به کاربرها  ؛ حذف شدند 


لعنت خدا و نفرین ملائکه بر هکرها و اتکرها و مجرمان سایبری . 


تاریخ بروزرسانی 


یکشنبه مورخ  29 مرداد 1402 خورشیدی 


نکته : 

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




در پناه خداوند متعال عظیم الشان باشید 

ِ

الهم  عجل  لولیک الفرج . 



امضای همیشگی اینجانب  در جهت تایید صحت و درستی مطالب وبلاگهایم   : 


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


https://vahidmy.blog.ir





https://vahidmy.blog.ir/archive


https://vahidmy.blog.ir/post/764