Assembly and Binary
به نام خدا
اسمبلی و باینری (زبان ماشین):
سلام دوستان . من هم اکنون در حال ترجمه ی منابع آموزشی مربوط به معماری نرم افزارهای ویندوز و سایر مباحث مربوطه از قبیل آموزش زبان اسمبلی و ... هستم . ولی چون اینکار ماهها وقت لازم دارد تا تمام شود لذا تصمیم گرفتم در خلال ترجمه ، به انتشار پست در این وبلاگ و سایر وبلاگهای تخصصی ام در زمینه ی برنامه نویسی با زبانهای ماشین و اسمبلی ادامه دهم .
چون نمی خواستم ماهها شما را منتظر نگه دارم لذا تا زمان اماده شدن منابع فارسی که تدوین کردن شان شاید یکسال یا بیشتر طول بکشد کماکان به انتشار پستهای تخصصی در تمامی وبلاگهایم ادامه می دهم .
+
من در این وبلاگ فارغ از نوع و سینتاکس اسمبلرهای جورواجور ، فقط از اسمبلی عمومی و کلی استفاده می کنم تا شما در وبلاگهای تخصصی ام که اکثرا با نام Fasm یا Fasmg یا RosAsm یا Spasm یا Assembler شناخته می شوند بعدا بتوانید با هر کامپایلر زبان اسمبلی براحتی برنامه نویسی کنید .
+
قبل از اینکه شما بتوانید بر معماری نرم افزارهای ویندوز مسلط شوید باید ابتدا زبان برنامه نویسی اسمبلی را یاد بگیرید . زیرا بدون یادگیری زبان اسمبلی هرگز نمی توانید زبان ماشین را درک کنید .
+
برنامه نویسی با هگز ادیتور به چند فاکتور مهم نیازمند است:
1- تسلط کامل بر زبان اسمبلی
2- تسلط کامل بر زبان ماشین
3- تسلط کامل با عناصر سازنده ی سیستم عامل ویندوز از قبیل توابع و ثابتهای ویندوز
4- تسلط کامل بر معماری نرم افزارهای ویندوز
5- روش استفاده از هگز ادیتور
6- توانایی برنامه نویسی و هک با کمک زبانهای ماشین و اسمبلی از درون هگز ادیتور
همه ی اینها باید به ترتیب و به مرور زمان بدست آید . پس نباید عجله کنید .
خب با این تفاسیر ، ابتدا زبان اسمبلی عمومی و کلی پردازنده ی اینتل را آموزش می دهم .
این زبان درواقع زبان اسمبلی استاندارد جهانی است که سلیقه ی هیچ شخصی در آن دخیل نمی باشد و یک گرامر استاندارد بین المللی می باشد .
در تمامی مباحث آموزش زبان اسمبلی ، منظور من از باینری ، همان زبان ماشین می باشد که ممکن است در مبنای باینری یا هگزادسیمال یا حتی دسیمال باشد .
+
من تمام سعی ام را می نمایم که زبانهای ماشین و اسمبلی را به زبانی ساده و قابل فهم آموزش دهم تا از برنامه نویسی با این دو زبان لذت ببرید .
+
+
شروع آموزش زبان برنامه نویسی اسمبلی
همانطور که قبلا نیز گفتم زبان برنامه نویسی اسمبلی نخستین بار بصورت یک زبان کاملا دستی توسط آلن تورینگ و در اوایل دهه ی 50 میلادی ابداع شد و جایگزین زبان ماشین گردید ( زبان ماشین نخستین بار توسط کنراد زوس دانشمند آلمانی در سال 1935 میلادی بر روی کامپیوتر Z1 پیاده سازی شد و بدین ترتیب قدیمی ترین کامپیوتر الکتریکی قابل برنامه نویسی در جهان با کمک زبان ماشین ساخته شد و سپس زبان ماشین تا سال 1950 میلادی رسما بعنوان تنها زبان برنامه نویسی بکار رفت . البته الان نیز می توانیم زبان ماشین را بکار گیریم . هیچ مشکلی در این مورد وجود ندارد. ) . بعدها زبان اسمبلی توسط سایر دانشمندان بعنوان جایگزینی بجای زبان ماشین بکار گرفته شد تا اینکه اوایل دهه ی 60 میلادی شرکت آی بی ام اولین کامپایلر را برای زبان اسمبلی ساخت و رسما روی مین فریمهای خودش پیاده سازی کرد . از آن زمان تا به امروز زبان اسمبلی به یک زبان برنامه نویسی اتوماتیک تبدیل شده و دیگه دستی نیست . لذا فرایند برنامه نویسی در آن بسیار آسانتر شده است .
+
همانطور که می دانید هر دستور زبان اسمبلی دقیقا و مستقیما به یک دستور زبان ماشین ترجمه می شود . لذا زبان اسمبلی نزدیکترین زبان به زبان ماشین و سطح پایین ترین و قدرتمندترین و کاملترین زبان برنامه نویسی اتوماتیک جهان می باشد .
به دستورات زبان ماشین اصطلاحا آپکد Opcode یعنی کد عملیاتی و به دستورات زبان اسمبلی اصطلاحا اینستراکشن Instruction یعنی دستورالعمل گفته می شود .
دستورات زبان اسمبلی برای اینکه براحتی به ذهن سپرده شده و فراموش نشوند اصطلاحا امنمونیک Mnemonic ( کد یادمان . کدی که براحتی به خاطر سپرده می شود ) نامیده می شوند .
این نامگذاری به این علت بود که چندین کد زبان ماشین با یک کد زبان اسمبلی رمزگذاری شدند و یکسری کلمات برای بخاطر سپردن آسان و سریع هر دستور اسمبلی تحت عنوان امنمونیک یا نمونیک طراحی و ساخته شدند .
مثلا چندین کد مختلف زبان ماشین در شرایط مختلف تحت نام کلی mov نامگذاری شدند . زیرا تقریبا همه ی این کدهای زبان ماشین فرایند جابجایی و کپی کردن را انجام می دهند . لذا استفاده از mov کار را برای ما راحتتر می کند . mov در اینجا مخفف move و به معنای جابجایی و کپی کردن و مقداردهی به متغیرها می باشد . mov یک یادمان یا امنمونیک است و بخشی از اینستراکشن یا همان دستورالعمل زبان اسمبلی را تشکیل می دهد .
مثال:
mov eax , 01 ; B801
در اینجا عبارت mov eax یک یادمان است که پس از اسمبل شدن به کد B8 که یک کد زبان ماشین در مبنای هگزادسیمال است تبدیل می شود که شما می توانید این کد زبان ماشین را از طریق یک هگز ادیتور براحتی مشاهده و حتی ویرایش کنید . عدد 01 مستقیما و بدون تغییر به کد 01 زبان ماشین در مبنای هگزادسیمال تبدیل می شود . لازم به ذکر است که اعداد بین 0 تا 9 بدون تغییر به اعداد مشابه ترجمه می شوند . لذا این دسته از اعداد را می توانید بصورت دسیمال یا هگزادسیمال بنویسید . مشکلی ایجاد نمی شود .
دستورالعمل بالا که یک اینستراکشن زبان اسمبلی می باشد موجب می شود که عدد 01 به درون رجیستر eax که یک رجیستر 32 بیتی در پردازنده ی اینتل می باشد کپی شود . همانطور که می بینید دستورالعمل mov eax که یک دستور زبان اسمبلی می باشد مستقیما با کد B8 که یک کد زبان ماشین است مطابقت دارد و رابطه ای نظیر به نظیر دارد . اینجاست که می گوییم هر دستور زبان اسمبلی دقیقا با یک دستور زبان ماشین مطابقت دارد و اینست که اسمبلی را بسیار سریع و قدرتمند و انعطاف پذیر و کارآمد می نماید . فراموش نکنید که هرچه زبان برنامه نویسی سطح پایین تر باشد قدرتمندتر و سریعتر و هوشمندتر و کارامدتر است . زیرا به سخت افزار نزدیکتر می باشد .
+
خب برای جلوگیری از اطاله ی کلام . این درس را همینجا به پایان می رسانم . ادامه ی این درس را در پست بعدی و بدون مقدمه چینی می نویسم .
وحید محمدی . وبلاگ وحیدمی
+
+
بروزرسانی:
براثر حملات سایبری به وبلاگ وحیدمی ؛ تمام کامنت های کاربرها و پاسخ های من به کاربرها ؛ حذف شدند .
لعنت خدا و نفرین ملائکه بر هکرها و اتکرها و مجرمان سایبری .
تاریخ بروزرسانی
یکشنبه مورخ 29 مرداد 1402 خورشیدی
نکته :
آدرسهای آخرین پست وبلاگ وحیدمی را در زیر مشاهده می فرمایید .
در پناه خداوند متعال عظیم الشان باشید
ِ
الهم عجل لولیک الفرج .
امضای همیشگی اینجانب در جهت تایید صحت و درستی مطالب وبلاگهایم :
وحید محمدی . وبلاگ وحیدمی
https://vahidmy.blog.ir/archive
https://vahidmy.blog.ir/post/764
- ۹۹/۱۲/۰۱