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

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


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

به جای سوئیچ کردن فیزیکی یا روشن و خاموش کردن آنها، زبان ماشین به شما اجازه می دهد که با استفاده از دو شماره یک پردازنده (Processor) را خاموش و روشن کنید: 1 (یک) و 0 (صفر) که در آن شماره یک به معنی "روشن کردن یک سوئیچ" و شماره صفر به معنی "خاموش کردن یک سوئیچ" است. بنابراین دستورالعمل زبان ماشین به صورت معمولی ممکن شبیه به این باشد:

1011 0000 0110 0001

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

استفاده از 1 و 0 یعنی حساب باینری. از آنجا که خواندن و درک حساب باینری می تواند بسیار سخت باشد، برنامه نویس اعداد باینری را در هگزادسیمال (دستگاه اعداد پایه 16) نشان می دهد. در جایی که حساب دودویی استفاده می شود، هگزادسیمال از شانزده عدد یعنی (از 0 تا 9 و از A تا F) استفاده می کند. بنابراین این شماره باینری که در بالا ذکر شد را می توان به صورت زیر در هگزاد سیمال نشان داد:

B061

زبان مادری به عنوان زبان مادری CPU (پردازنده ها) در نظر گرفته می شود، امّا تقریبا هیچکس یک برنامه را در زبان ماشین ننوشته است زیرا بسیار خسته کننده و گیج کننده است. یک اشتباه در یک عدد 0 یا 1 به طور تصادفی می تواند کل دستورالعمل های شما را به صورت اشتباه به CPU منتقل کند. از آنجا که نوشتن دستورالعمل در زبان ماشین می تواند بسیار مشکل و مستعد خطا باشد، دانشمندان کامپیوتر زبان ماشین را با استفاده از زبان اسمبلی تا حدودی ساده تر کرده اند.

زبان اسمبلی

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

کل هدف از بان اسمبلی (مونتاژ)، برنامه نویسی ساده تر از زبان ماشین است. اساسا زبان اسمبلی می تواند زمان چندین دستوری که در زبان ماشین طی ماه نوشته شده است را به 10 دقیقه کاهش دهد. بنابراین به جای نوشتن ده دستور زبان ماشین (و ریسک ایجاد اشتباه در تمام ده فرمان)، زبان اسمبلی به شما اجازه می دهد یک فرمان بنویسد که کار ده فرمان (یا بیشتر) را در مقایسه با فرمان های زبان ماشین انجام دهد.

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

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

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

پردازشگر کامپیوتر مانند مغز انیشتین در یک شیشه است، تنها در صورتی قادر است که کاری انجام دهد که بتواند با جهان خارج ارتباط برقرار کند. پردازنده با بخش های دیگر کامپیوتری از طریق یک سری سیم ها به نام bus ارتباط برقرار می کند.

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

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

بنابراین برنامه نویسی کامپیوتر با بازنگری مجدد سیم ها و سوئیچ ها به صورت فیزیکی (در ENIAC)، و تغییر دادن سوئیچ ها با استفاده از 0 و 1 (در زبان ماشین) بهبود یافت و سرانجام که به کامپیوتر گفته می شود که کدام داده ها ثبت و کدام از داده ها ویرایش شوند (در زبان اسمبلی).

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

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

با دستور (mov) پردازنده شماره هگزادسیمال 061h را به یک ریجستر مخصوص که al نامیده می شود هدایت می کند. یا به عنوام مثال، دیگر دستورها در زبان اسمبلی ممکن است به پردازنده بگوید که یک مقدار از عدد ذخیره شده در یک ریجستر مخصوص اضافه (add) یا کم (sub) شود.

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

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

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

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

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

هرپردازنده تنها زبان اسمبلی مخصوص به خود را درک می کند. بنابراین یک پردازنده Intel Core 8 زبان اسمبلی یک پردازنده PowerPC را درک نمیکند و بالعکس. با این وجود، برخی از شرکت ها پردازنده هایی را تولید می کنند که به طور مشابه با پردازنده های دیگر کار می کند. به عنوان مثال شرکتی به نام دستگاه های میکرو پیشرفته (AMD) پردازنده هایی را تولید می کند که درست هماننده پردازنده های اینتل کار می کند، بنابراین برنامه ی زبان مونتاژ برای پردازنده Intel برروی یک پردازنده AMD نیز کار می کند.

جلسه قبل | جلسه بعد

تبلیغات در پایین ادامه ی مطلب

نظرات شما


    نام
    ایمیل (منتشر نمی‌شود) (لازم)
    وبسایت
    :) :( ;) :D ;)) :X :? :P :* =(( :O @};- :B /:) :S
    نظر خصوصی
    مشخصات شما ذخیره شود ؟ [حذف مشخصات] [شکلک ها]
    کد امنیتیرفرش کد امنیتی