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