دنیای رایانه با وجود سختافزار و نرمافزار در کنار هم، خلق میشود و این دو مکمل یکدیگرند. هیچ رایانهای بدون سخت افزار یا بدون نرم افزار قابل راه اندازی نیست. برای اینکه نرم افزار بتواند با سخت افزار رایانه ارتباط برقرار کرده و دستورات کاربر را اجرا نماید، لازم است با زبانهای برنامه نویسی که توانایی دسترسی به سخت افزار را دارند، این امکان را فراهم کنیم. به این زبانها، زبان برنامه نویسی سختافزاری میگویند. در این مقاله سعی کردهایم در حد وسع خود شما را اندکی با زبانهای سخت افزاری آشنا کنیم.
برنامه نویسی در رایانه در دو سطح متفاوت صورت میگیرد. یکی با زبانهای سطح پایین و یکی با زبانهای سطح بالا. حالا منظور از این نام گذاریها چیست؟ چرا به یکی سطح پایین به یکی سطح بالا میگویند؟
زبانهای سطح پایین به صورت مستقیم با پردازنده رایانه ارتباط دارند و با استفاده از آنها میتوان دستورات پایه ای برنامه نویسی را اجرا کرد. مانند زبان ماشین (Machine Languages) و زبان اسمبلی (Assembly Languages).
زبانهای سطح بالا برای انسان قابل فهمتر هستند چون از دستوراتی شبیه کلمات انگلیسی برای دستورالعملهای خود استفاده میکنند. منطق اصلی طراحی زبانهای سطح بالا، راحتتر کردن فرایند برنامه نویسی برای برنامه نویسان بوده است. مانند زبانهای سی، سی پلاس پلاس، جاوا ، پایتون و غیره.
اگر با مفاهیم ابتدایی برنامه نویسی آشنا نیستید پیشنهاد میکنیم در دوره الفبای برنامه نویسی سون لرن شرکت کنید .
در زمان طراحی سخت افزار رایانه، زبانی منحصر به فرد و مختص همان رایانه تعریف میشود، که به آن زبان ماشین میگویند. زبان ماشین شامل دستورالعملهایی است، که به طور مستقیم توسط رایانه قابل اجرا هستند. این زبان عموما شامل رشته ای از اعداد است که موجب میشود، رایانه عملیات اصلی که در ارتباط با خود است را در هر بار راه اندازی اجرا نماید.
هر رایانه، به طور مستقیم فقط زبان ماشین خود را درک میکند. درک زبان ماشین برای انسان خسته کننده و بسیار مشکل است زیرا شباهت زیادی به نمادریاضی معمولی یا زبان انسانی ندارد و کدهای آن از یک رایانه به رایانه دیگر متفاوت است. به همین دلیل کد ماشین تقریبا هیچگاه برای نوشتن برنامهها مورد استفاده قرار نمیگیرد. برای مثال کدی به زبان ماشین در زیر میآوریم توجه کنید: این برنامه اضافه کار کارمندی را با حقوق جمع و محاسبه میکند و نتیجه بدست آمده را در grosspay ذخیره میکند.
+1300042774
+1400593419
+1200274027
حقیقتا درک کردن این کد برای انسان خیلی سخت و مشکل است. در ادامه بررسی میکنیم اصلا چرا چنین کدی نوشته میشود و کاربرد آن چیست.
در زبان ماشین به جای استفاده از دستورات انگلیسی، از اعداد صفر و یک و یا رقمهای باینری، برای نوشتن دستورات در آن استفاده شده است. که اغلب برای مشاهده و اصلاح انسان به صورت دستگاه شانزدهشانزدهی (hexadecimal) تبدیل میشوند.
سوال اینجاست که کاربرد زبان ماشین چیست؟ اگر بطور خلاصه جواب دهیم، کاربرد زبان ماشین، برنامه ریزی پردازنده است. اما چگونه؟
یک پردازنده از میلیونها سوییچ بسیار کوچک تشکیل شده است که میتوانند خاموش و روشن شوند. اگر برخی از این سوییچهای خاص را خاموش و روش کنیم، میتوانیم از پردازنده بخواهیم تا کار مورد نظر ما را انجام دهد.
به این صورت که به جای خاموش و روشن این سوییچها به روش دستی، زبان ماشین با صفر و یک این امکان را به ما میدهد که سوییچها را خاموش و روشن کنیم. (صفر به معنی خاموش و یک به معنی روشن است.) و به این طریق فرمان خود را به پردازنده دیکته کنیم.
با توجه به اینکه برنامه نویسی زبان ماشین برای بسیاری از برنامه نویسان خسته کننده و طاقت فرسا بود و از سوی دیگر احتمال بروز اشتباه هم در آن زیاد است، برنامه نویسان زبانی به نام اسمبلی را طراحی کردند. زبان اسمبلی یک سطح بالاتر از زبان ماشین است. اسمبلی از کدهای کوتاه (mnemonic) برای دستورالعملها استفاده میکند. بسیاری از برنامه نویسان از زبان اسمبلی در جاهایی که نیاز به سرعت و اثر بخشی بالا دارد، استفاده میکنند.
اسمبلی برای در دستورات خود با رجیسترهای پردازنده کار میکند. برای اینکه با کد اسمبلی آشنا شوید، کد زبان ماشین که در بالا مثال زدیم، در زبان اسمبلی اینگونه نوشته میشود.
LOAD BASEPAY
ADD OVERPAY
STORE GROSSPAY
اگر چه این کد برای انسان از وضوح بیشتری برخوردار است، اما برای کامپیوتر تا زمانی که به زبان ماشین ترجمه نشود معنی ندارد. اسمبلر (Assembler) برنامه هایی که با زبان اسمبلی نوشته شده است، را به زبان ماشین ترجمه میکند. اسمبلرها از سال 1950 مورد استفاده گرفتند.
درمورد شباهتهای زبان ماشین و زبان اسمبلی میتوان گفت هر دو جزو زبانهای سطح پایین برنامه نویسی هستند. ضمنا هر دو به معماری پردازنده بستگی دارند یعنی هر خانواده پردازنده، زبان ماشین و اسمبلی خاص خودش را دارد.
بنابراین یک پردازنده intel زبان ماشین و اسمبلی پردازنده powerPc را نمیفهمند و بالعکس. اما برخی از پردازندهها هم هستند که با سایر پردازندهها تعامل خوبی دارند، مثل پردازندههای AMD که با پردازندههای اینتل سازگارند.
به رغم شباهتهایی که هر دو زبان با هم دارند، دارای تفاوت هایی هم هستند که میتوان به این موارد اشاره کرد:
زبان اسمبلی باعث افزایش سرعت برنامه نویسی شد اما پیچیدگی و سردرگمی کار با رجیسترها در آن، باعث شد برنامه نویسان زبانهای برنامه نویسی سطح بالا را طراحی کنند.
زبانهای سطح بالا این امکان را به برنامه نویس میدهند که دستورات مورد نیاز خود را تقریبا مانند کلمات انگلیسی و عملیات ریاضی را به صورت روزمره بنویسند. در این زبانها با استفاده از یک عبارت میتوانند وظایف و اعمال وسیعتری را انجام دهند. برای مثال کد قبلی اینگونه نوشته میشود:
grossPay = basePay + overTimePay
بدیهی است زبانهای سطح بالا از محبوبیت بیشتری به نسبت زبان ماشین و اسمبلی در بین برنامه نویسیان برخوردارند.
به برنامههای مترجمی که وظیفه تبدیل زبانهای سطح بالا به زبان ماشین را بر عهده دارند، کامپایلر گفته میشود. کامپایلرها، خود بحث مفصلی دارند که در این مقاله نمیگنجد و به همین تعریف بسنده میکنیم.
با روی کار آمدن زبانهای سطح بالا مانند فورتران (FORTRAN)، بیسیک (basic)، کوبول (cobol) و پاسکال (pascal) باعث شد که برنامه نویسان وارد جزییات برنامه نویسی و نحوه کار پردازندهها نشوند. دور بودن از این جزییات منجر شد در برخی جاها دست برنامه نویسان باز نباشد. به همین دلیل زبانی طراحی شد که به رابط بین زبانهای سطح بالا و زبان سطح پایین اسمبلی باشد. زبانی که تحت عنوان زبان برنامه نویسی C نامگذاری شد.
زبان سی برای برنامه نویسی سیستم عامل ایجاد شد. زبانی که از یک نماد جمع و جور استفاده میکند و به برنامه نویس امکان میدهد تا با آدرس دادهها و همچنین با مقادیر آنها کار کند. این توانایی در برنامه نویسی سیستمها مهم است و C با زبان اسمبلی قدرت بهره برداری از تمام ویژگیهای معماری داخلی رایانه را به اشتراک میگذارد.
زبان سی پلاس پلاس از خانواده زبان سی است. یک زبان برنامهنویسی رایانهای همهمنظوره که از قابلیت شی گرایی استفاده میکند. زبان ++C همانند زبان C، یک زبان سطح میانی در نظر گرفته میشود. این زبان دارای قابلیت زبانهای سطح بالا و پایین بهصورت همزمان است.
++C توسط بییارنه استراستروپ ریاضیدان دانمارکی در سال ۱۹۷۹ در آزمایشگاههای بل (Bell Labs)، برای بهبود زبان سی و بر مبنای آن ساخته شد و آن را «C با کلاس» (C With Classes) نامگذاری نمود. در سال ۱۹۸۳ به ++C تغییر نام داد.
زبان توصیف سختافزار (HDL)، یک زبان رایانه ای تخصصی است که برای برنامه ریزی مدارهای منطق الکترونیکی و دیجیتال استفاده میشود. ساختار، بهره برداری و طراحی مدارها با استفاده از زبان توصیف سختافزار قابل برنامه ریزی هستند.
یک زبان توصیف سختافزار بسیار شبیه به زبان برنامهنویسی میباشد، مثل زبان سی که یک توصیف متنی شامل عبارت، بیانیهها و ساختارهای کنترل است. یکی از مهمترین تفاوتها بین اکثر زبانهای برنامهنویسی و زبانهای توصیف سخت افزار دقیقاً شامل مفهوم زمان است. ویاچدیال (VHDL) و وریلاگ (VERILOG)، دو زبان عمده توصیف سختافزار هستند.
ویاچدیال (VHDL)، یک زبان توصیف سخت افزار برای بیان مشخصات سخت افزار است. زبان VHDL نخستین بار توسط وزارت دفاع آمریکا به منظور طراحی و توصیف مدارهای مجتمع سرعت بالا طراحی شد و مورد استفاده قرار گرفت.
زبان وریلاگ (Verilog)، یک زبان توصیف سخت افزاری است که برای مدل سازی و شبیه سازی سیستمهای دیجیتالی استفاده میشود. وریلاگ در لایههای چندگانه ای از انتزاع، در قالبهای متنی استاندارد، برای گونههای مختلفی از ابزارهای (IEEE95) به طور موثر و قابل درک و به سهولت قابل طراحی است.
مباحث مربوط به برنامه نویسی سخت افزار، از پیچیدگی خاصی بهره میبرد که با یک صفحه مقاله قابل بیان نیست. اما تلاش کردیم تا مفاهیم ابتدایی زبانهای سخت افزاری را برای شما بازگو کنیم. ابتدا با زبانهای سطح پایین مانند زبان ماشین و اسمبلی و حوزه کاربردی شان آشنا شدید. اسمبلر و تفاوتها و شباهتهای دو زبان ماشین و اسمبلی را شناختید. سپس زبانهای سطح بالا و کامپایلر را تعریف کردیم و مختصری از زبانهای C و C++ گفتیم. در آخر اشاره ای به زبانهای توصیف سخت افزار مانند وریلاگ و VHDL داشتیم. امیدوارم از خواندن این مطالب استفاده لازم را برده باشید. اکنون به عقیده شما اگر قرار بود با همان زبان ماشین و اسمبلی برای رایانه برنامه مینوشتیم، سرعت پیشرفت تکنولوژی چقدر بود؟
ممنون بابت وقتی که گذاشتید