به نام خدا 


اسمبلی ویندوز 32 بیتی 


عمده ی مباحث مربوط به برنامه نویسی اسمبلی ، به اسمبلی ویندوز 32 بیتی یا اصطلاحا  win32 Assembly    مربوط می شود . 


همانطور که از نام این کلمه مشخص است ما درواقع روی سیستم ویندوز 32 بیتی بحث می کنیم . یعنی  ویندوز 32 بیتی که شامل ویندوزهای 2000 به بعد می باشد . 


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


ضمن اینکه در مدل 16 بیتی ، برنامه ها همدیگه را می بینند و رونویسی می کنند و حتی می توانند  به سخت افزار نیز آسیب برسانند . 


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


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


منظور از فضای آدرسدهی ،  آن مقدار از حافظه ی رم می باشد که برنامه می تواند در دست بگیرد و اجرا شود. 


بنابراین برنامه های 32 بیتی هرگز برای اجرا شدن به 4 گیگابایت حافظه نیاز ندارند . این 4 گیگابایت فقط و فقط مربوط به فضای آدرسدهی می باشد و البته برنامه های 32 بیتی به میزان رم بسیار اندکی برای اجرا شدن ، نیاز دارند . 


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


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

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



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


همینقدر بدانید که برنامه نویسی در مدل وین32 یا   win32  در زبان اسمبلی ،  بدلیل اینکه حافظه بصورت فلت و یکپارچه می باشد و ثباتهای سگمنت بکار گرفته نمی شوند و نادیده گرفته می شوند بسیار آسان و راحت است . 


شما دیگه مجبور نیستید با ثباتهای سگمنت از قبیل  cs یا ds  سروکله بزنید . 


اینجا بجای سگمنت از  ثباتهای همه منظوره استفاده می نماییم . 


سیستم 32 بیتی بسیار آسانتر و ساده از سیستم 16 بیتی بوده و بی خطر می باشد . 



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


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


متاسفانه در سرتاسر وب با  عبارت win32 Assembly مواجه هستیم و کمتر با عبارت  win64 Assembly   برخورد می نماییم . 


حوزه ی 64 بیتی هنوز در ابتدای راه است و هنوز  بطور جدی روی آن کار انجام نشده است . 


البته گویا شرکت  IBM قصد دارد سیستم  128 بیتی را نیز ابداع کند  که در نتیجه شاهد ظهور سیستم عاملهای  128 بیتی  مثل لینوکس 128 بیتی یا  Win128  خواهیم بود  . 


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


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


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


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


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


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


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


+

+

+

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


https://vahidmy.blog.ir