معرفی زبان برنامهنویسی ماشین و اسمبلی
تفاوت زبان های برنامه نویسی سطح بالا و پایین
لازم است پیش از معرفی زبان برنامهنویسی ماشین و اسمبلی به دستهبندی انواع زبانهای برنامهنویسی پرداخته شود. زبانهای برنامهنویسی بطور عمده به دو بخش زبان برنامهنویسی سطح بالا High Level Programming Language و زبان برنامهنویسی سطح پایین Low Level Programming Language تقسیم میگردند.
زبان برنامهنویسی سطح پایین بطور مستقیم وظیفه انتقال اطلاعات به پردازنده سیستم را برعهده دارد. درک و استخراج اطلاعات این نوع زبان برنامهنویسی کار دشواری است که زبان برنامهنویسی ماشین Machine Programming Language از این دسته محسوب میگردد. انتقال اطلاعات به پردازنده مرکزی سیستم در زبان برنامهنویسی سطح پایین با بهکارگیری اعداد صفر و یک صورت میگیرد.
به فرمت انتقال اطلاعات در زبان برنامه نویسی سطح پایین، فرمت دودویی یا فرمت باینری میگویند که زبان مشترک درک و انتقال اطلاعات به پردازندههای کامپیوتر محسوب میگردد.
زبان برنامهنویسی سطح پایین
به منظور درک بهتر زبان برنامهنویسی سطح پایین توجه می شود که هر پردازنده متشکل از تعداد زیادی سوییچ است که خاموش و روشن شدن هر سوییچ پیغام و مفهوم خاصی را به پردازنده منتقل مینماید. در واقع مکانیزم عملکرد زبان برنامهنویسی ماشین محسوب میگردد. پیغام خاموش شدن و روشن شدن سوییچها به منظور تفهیم اطلاعات به پردازنده، به ترتیب با عدد صفر و عدد یک معادلسازی میگردد.
دشواری کدنویسی به زبان برنامهنویسی ماشین و زبان برنامهنویسی سطح پایین سبب گردید تا متخصصان اقدام به خلق زبان برنامهنویسی سطح بالا نمایند.
ویدیو پییشنهادی : آموزش رایگان یادگیری ماشین
زبان برنامهنویسی اسمبلی به دلیل نزدیک بودن به زبان ماشین به عنوان زبان سطح پایین شناخته میشود. انتقال اطلاعات با کمک زبان برنامهنویسی سطح بالا به پردازنده سیستم بسیار راحتتر از بهکارگیری زبان برنامه نویسی سطح پایین یا زبان برنامهنویسی ماشین میباشد.
پردازنده سیستم در واقع عملکردی مشابه با مغز انسان دارد، لذا برای انتقال و تفهیم اطلاعات به سایر بخشهای سیستم، تفهیم اطلاعات به پردازنده مرکزی سیستم مورد نیاز است که زبان برنامهنویسی اسمبلی ارتباط میان برنامهنویس با سایر اجزای سیستم را فراهم میآورد.
تفاوت زبان برنامهنویسی سطح بالا و زبان برنامهنویسی سطح پایین
تفاوت اصلی زبان برنامهنویسی سطح بالا و زبان برنامهنویسی سطح پایین در شیوه انتقال اطلاعات است. انتقال اطلاعات در زبان برنامهنویسی سطح پایین با بهکارگیری اعداد صفر و یک انجام میگردد که به عنوان فرمت باینری یا فرمت دودویی شناخته میشود. انتقال اطلاعات با زبان برنامهنویسی سطح بالا با بهکارگیری واسطه انجام میگیرد که در این روش نرم افزار به عنوان واسطه عمل میکند.
به عنوان توضیح بیشتر، دستورات به نرم افزار منتقل میشود سپس دستورات از طریق نرم افزار به فرمت قابل فهم برای پردازنده مرکزی سیستم تبدیل میگردد.
دلیل نامگذاری این روش به عنوان زبان برنامهنویسی سطح بالا، نزدیک بودن آن به زبان انسان است بر خلاف زبان برنامه نویسی ماشین که به راحتی توسط انسان قابل درک نمیباشد. به عنوان مثال دستورات شرطی (IF) برای حالتهای مختلف که به راحتی توسط برنامهنویس قابل درک میباشد. برای درک بهتر موضوع نرم افزار MATLAB در نظر گرفته شود.
برنامهنویس در این نرم افزار معادلات پیچیده ریاضی را به فرمت قابل فهم برای نرم افزار وارد میکند، سپس نرم افزار با تفهیم اطلاعات به پردازنده مرکزی، با به کارگیری فرمت دودویی یا باینری، اقدام به حل مسائل پیچیده ریاضی مینماید. برخی از پرکاربردترین زبانهای برنامه نویسی به عنوان زبان سطح بالا عبارتند از:
زبان برنامهنویسی ماشین چیست؟
در زبان برنامهنویسی ماشین انتقال و تفهیم اطلاعات به پردازنده مرکزی کامپیوتر (CPU) با کمک رشتهای از کدها در فرمت دودویی و یا باینری صورت میگیرد. دستورات زبان ماشین با کمک تفسیرکنندهای به نام ریزبرنامه (Micro Program) به سیگنالهای سخت افزاری قابل درک برای اجزای سیستم تفسیر میگردد.
فرمت باینری درواقع تفهیم اطلاعات به پردازنده مرکزی میباشد. دستورات در فرمت باینری به دلیل فرکانس کاری بالای پردازنده مرکزی کامپیوتر با سرعت بالایی پردازش و اجرا میگردند. به اطلاعات داده شده به پردازنده مرکزی در فرمت دودویی یا باینری زبان برنامهنویسی ماشین میگویند.
درک این نوع زبان برنامه نویسی برای انسان بسیار دشوار است. برنامهنویس بایستی برای نوشتن کدها به عملکرد ساختاری سیستم و همچنین سخت افزار کامپیوتر توجه داشته باشد.
برنامهنویسان پیش از این از زبان برنامهنویسی ماشین برای انتقال اطلاعات به CPU استفاده میکردند که امروزه به دلیل حجم بالای نوشتن رشته کدها و همچنین احتمال زیاد خطا در این پروسه، زبان برنامهنویسی ماشین بطور مستقیم استفاده نمیگردد.
به دلیل وجود مشکلات ذکر شده در زبان برنامه نویسی ماشین در فرمت دودویی، بعدها برنامه نویسان فرمت شانزده شانزدهی یا فرمت هگز را جایگزین فرمت باینری کردند که با وجود رفع برخی از مشکلات پیشین، همچنان دارای مشکلات زیادی است. لذا برنامهنویسان برای حل این مشکل روشهای جدیدی برای تفهیم اطلاعات به پردازنده مرکزی کامپیوتر را در پیش گرفتند.
معایب استفاده از زبان برنامهنویسی ماشین
زبان برنامهنویسی ماشین که امروزه اغلب بطور مستقیم کدنویسی نمیشود داری معایبی است که به مهمترین آنها در ادامه اشاره شدهاست.
- به علت حجم بالای رشته کدها برای برنامهنویس بسیار خسته کننده و ملال آور است.
- آموختن و به یاد سپردن این نوع زبان برنامهنویسی بسیار سخت و دشوار است.
- به هنگام نوشتن رشته کدها بایستی به ویژگیهای ساختاری و همچنین سخت افزار سیستم توجه ویژه داشت که بر سختی این کار میافزاید.
- عیبیابی در این نوع زبان برنامهنویسی به علت حجم بالای رشته کدها بسیار دشوار است.
زبان برنامهنویسی اسمبلی چیست؟
زبان برنامهنویسی اسمبلی نسبت به زبان برنامهنویسی ماشین از محبوبیت بیشتری برخوردار است. زبان برنامهنویسی اسمبلی برای اجرا و فراخوانی کد ماشین از کلمات اختصاری استفاده میکند به عنوان مثال LOAD BASEPAY، ADD OVERPAY و STORE GROSSPAT برخی از کلمات اختصاری مورد استفاده در کدنویسی میباشند.
بهکارگیری کلمات اختصاری نسبت به رشته کدها به مراتب بهتر و قابل فهمتر میباشد و همین امر منجر به مقبولیت گسترده این نوع زبان برنامهنویسی در میان برنامه نویسان شد. بهکارگیری زبان برنامهنویسی اسمبلی سبب کاهش تعداد خطاها و همچنین افزایش سرعت برنامهنویسی گردید که این خود مزیت بسیار مهمی محسوب میگردد.
این نوع زبان برنامهنویسی به عنوان زبان سطح پایین محسوب میگردد و مستقیماً با ساختار داخلی پردازنده مرکزی کامپیوتر (CPU) و همچنین سایر سخت افزار سیستم در ارتباط است، لذا شخص برنامهنویس علاوه بر دانستن قوانین این نوع زبان باید ارتباط میان قوانین کدنویسی با ساختار پردازنده مرکزی کامپیوتر به عنوان مثال ثبات و اندازه آنها- را نیز به خوبی بداند.
لازم به ذکر است که هر پردازنده زبان ماشین و زبان اسمبلی مخصوص به خود را دارد، لذا انتقال برنامههای اسمبلی بر روی معماریهای مختلف سخت افزار کامپیوتر به راحتی بهکارگیری برنامههای سطح بالا نمیباشد. زبان اسمبلی با کمک اسمبلر (همگذار) به کد ماشین قابل اجرا توسط پردازنده مرکزی تبدیل میگردد.
شباهت زبان ماشین با زبان اسمبلی
- زبان ماشین و زبان اسمبلی هر دو به عنوان زبان برنامهنویسی سطح پایین-Low Level Programming Language- محسوب میگردند.
- کدهای نوشته شده بر مبنای زبان برنامه نویسی ماشین و زبان برنامهنویسی اسمبلی به معماری پردازنده مرکزی کامپیوتر (CPU) وابسته هستند، با این توضیح که در صورتیکه معماری پردازنده مرکزی تغییر کند، کدهای نوشته شده نیز تغییر مییابند و کدها بایستی مجدداً نوشته شوند.
تفاوت زبان ماشین با زبان اسمبلی
- زبان برنامهنویسی ماشین نسبت به زبان برنامهنویسی اسمبلی به زبان کامپیوتر نزدیکتر است.
- در کد نویسی با زبان اسمبلی از کلمات اختصار یافته که به SYNTAX و یا MOV معروف است استفاده میگردد، حال آنکه در زبان ماشین از رشته کدهایی برای انتقال و تفهیم اطلاعات به پردازنده مرکزی بهره گرفته میشود.
- زبان اسمبلی بر خلاف زبان ماشین برای انسان قابل درک است، حال آنکه زبان ماشین برای تفهیم دستورات اجرایی به کامپیوتر مورد استفاده قرار میگیرد.
- کدهای اسمبلی ابتدا باید توسط اسمبلر (همگذار) به کدهای ماشین تبدیل شوند تا اجرا شوند، حال آنکه کدهای ماشین مستقیماً توسط خود پردازنده مرکزی کامپیوتر قابل درک و اجرا هستند.
هدف از یادگیری زبان برنامهنویسی اسمبلی
امروزه استفاده از زبان اسمبلی در کدنویسی برنامهها غیرمعمول است، چراکه آموختن و بهکارگیری زبان برنامهنویسی سطح بالا نسبت به زبان اسمبلی بسیار راحتتر است.
با توجه به نکاتی که پیش از این اشاره شد ممکن است این سوال ذهن شما را مشغول کند که چرا باید زبان برنامهنویسی اسمبلی آموخته شود؟ در ادامه به بیان پاسخ این سوال پرداخته شدهاست.
زبان برنامهنویسی اسمبلی برای یادگیری نحوه کار سخت افزار کامپیوتر، کامپایلرها، مفسرها و زبانهای سطح بالا بسیار مفید است و به درک عمیق معماری کامپیوتر، مفاهیم سیستم عامل بهکاررفته در کامپیوتر، نمایش دادهها کمک میکند.
درک اینگونه مفاهیم به برنامهنویس کمک میکند تا با نحوه عیبیابی و رفع مسائل برنامهنویسی کاملاً آشنا گردد و قادر باشد برنامههایی در سطوح بالاتر را خلق کند.
قابلیت مانوردهی در زبان برنامهنویسی اسمبلی نسبت به سایر انواع زبانهای برنامهنویسی به مراتب بیشتر است. در برخی موارد کدنویسی با زبان اسمبلی به مراتب سریعتر و کوتاهتر از نوشتن همان برنامه با زبان دیگر میباشد به عنوان مثال یک برنامه ویژوال قادر است زیر برنامههای DLL نوشته شده با زبان اسمبلی را در مواقع بحرانی بمنظور افزایش سرعت اجرای برنامه به کار گیرد.
برخی اعمال در زبانهای برنامهنویسی دیگر دشوار و یا غیر ممکن میباشد به عنوان مثال ارتباط با سیستم عامل کامپیوتر و یا دسترسی مستقیم به کنترلرها، حال آنکه با کمک زبان برنامهنویسی اسمبلی قابلیت کنترل اینگونه مسائل کاملاً وجود دارد که مزیت بسیار مهمی محسوب میگردد.
معرفی اسمبلر (همگذار)
اسمبلر یا همگذار دستورات برنامه اسمبلی نوشته شده را به رشتههای عددی قابل درک توسط پردازنده مرکزی (CPU) تبدیل میکند، به عبارت دیگر اسمبلر دستورات را برای اجرا به معادلهای عددی آنها در فرمت دودویی یا باینری تبدیل میکنند.
اسمبلرهای سطح بالا High Level Assembler ویژگیهای زبانهای برنامه نویسی سطح بالا نظیر تعریف توابع، ساختارهای کنترلی IF و خاصیت شی گرایی را نیز در خود دارد که این امر قابلیت کدنویسی با کمک زبان اسمبلی را تسهیل میکند.
فرایند تبدیل دستورات اسمبلی به کد ماشین را اسمبلینگ Assembling مینامند. فایلهای مجزا تولید شده با بهکارگیری لینکر-Linker- به یک برنامه اجرایی به عنوان مثال با فرمت .exe تبدیل میگردد.
برنامهنویس در برخی موارد نیاز دارد که عکس فرایند اسمبلینگ انجام شود، این کار با برنامهای به عنوان Disassembler صورت میپذیرد، در واقع با کمک این برنامه کد ماشین به دستورات اسمبلی تبدیل میگردد.
عملکرد کامپایلر و مفسر در ارتباط با زبان برنامهنویسی سطح بالا و پایین
زبان برنامهنویسی سطح بالا برای پردازنده مرکزی سیستم و همچنین سایز اجزاء سیتم قابل درک نیست که این موضوع اهمیت بهکارگرفتن کامپایلر-Compiler- و مفسر-Interpreter- را نشان میدهد. کامپایلر و مفسر به عنوان واسطه، زبان برنامهنویسی سطح بالا را به فرمت قابل درک توسط اجزای سیستم-زبان ماشین- تبدیل میکند به عبارت دیگر، کامپایلر وظیفه تبدیل زبان برنامهنویسی سطح بالا را به زبان برنامهنویسی ماشین دارد.
برنامهنویس با کمک کامپایلر درگیر پروسه سخت و دشوار نوشتن دستورات در فرمت باینری نمیشود که این خود مزیت بسیار مهمی محسوب میگردد.
ویدیو پییشنهادی : آموزش رایگان پایتون
تفاوت کامپایلر و مفسر
کامپایلر و مفسر که هر دو زبان برنامه نویسی سطح بالا را به زبان قابل درک توسط کامپیوتر-زبان برنامهنویسی ماشین- تبدیل میکند، دارای تفاوتی اساسی هستند.
تفاوت اساسی کامپایلر و تفسیر کننده در شیوه اجرای کد میباشد. هنگامی که کد توسط مفسر اجرا میشود، کد در همان لحظه به صورت خط به خط اجرا میگردد و به صورت خط به خط به پردازنده مرکزی کامپیوتر (CPU) جهت اجرا ارسال میگردد.
در مقابل، هنگامی که کد توسط کامپایلر اجرا میشود، کد به یکباره بر روی دیسک کامپیوتر قرار میگیرد و به شما این امکان را میدهد که در زمان دلخواهتان آن را اجرا نمایید. اجرای خط به خط کد سبب بالا رفتن منابع مورد استفاده در کامپیوتر-RAM و CPU- میگردد، حال آنکه استفاده از کامپایلر میزان استفاده از منابع کامپیوتر را بهینه مینماید و همچنین سرعت اجرای برنامه را افزایش میدهد.
اجرای خط به خط کد به برنامهنویس کمک میکند تا به راحتی عیوب ایجاد شده در روند اجرای برنامه را کشف و در نهایت حل نماید. از دیگر تفاوت های اساسی کامپایلر و مفسر میتوان به پارامتر وابستگی به سیستم عامل اشاره کرد.
مقاله ی پیشنهادی : آموزش رایگان ماشین لرنینگ با پایتون
به عنوان توضیح کد نوشته شده توسط یک زبان برنامهنویسی مفسری برای اینکه قابل اجرا باشد به وجود مفسر برروی سیستم عامل نیاز دارد و در صورت عدم وجود مفسر بر روی سیستم عامل قابل اجرا نخواهد بود.
در مقابل، کامپایلر برنامه را یکبار برای همیشه به زبان ماشین تبدیل میکند که پس از آن دیگر نیازی به وجود کامپایلر و کد اجرایی نیست. خروجی کامپایلر یک یا چند فایل میباشد که قابل اجرا بر روی هر سیستم عاملی میباشند.
ای کاش عکس مقایسه ای بین زبان ها رو نمی گذاشتید اساسا اسن مقایسه مغالطه هستش چون در ی سمت مجموعه اسلحه ها هست که فقط برای یک کار ساخته شدند و با نگاه اول اسنایپ و زبان پایتون قدرت برتر به حساب میاد در صورتی که هر زبان مورد کارکرد خاص خودش رو داره مثلا پایتون برای جایی هست که سیستم عاملی باشه در embeded systems یا حتی خود سیستم عامل و … c/c++ کاربرد دارن به دلیل ویژگی های خوبشون و اصولا مقایسه بین زبانها غیر منطقی مثلا خود فرترن هنوز هم کاربرد خودش رو داره
سلام .ممنونم از همراهی شما.
رضا جان کاملا با شما موافقم. بیشتر از این که مقایسه میشه .برای کسایی که شروع نکردن و خب پایتون واقعا زبان قوی و کاملیه .برای ماشین لزنینگ طراحی وب داده کاوی همه اینها کاربرد داره . بازم ممنون که با نظراتتون همراهیمون می کنید.
شاد و پیروز باشید
عالی من شخصه به زبان اسمبلی علاقه دارم دلیل اش کنجکاوی بیش از حد سیستم با اعداد باینری سویچ ها عملیات سخت رو انجام میده چیزی رو خلق میکنه عجیبه کارکرد خیلی دوست دارم بدونم فکر کنم زبان اسمبلی پایه همه زبان هاست اگه اسمبلی قابل حمل برای سخت افزار بود خوب میشد در کل پایه ریاضیات یکی هست یه جای از متن گفته بود بعدها اعداد هگزا امده فکر کنم اشتباه هست اعداد دودوی و اکتان دسیمال هگزا در کنار هم معنی دارن یکی از اینا نباشن معنی داره اعداد دودویی راحتر کرده برای درک بیشتر ریاضیات در منبای ده ده دی و…. بین بیت ها هست اعداد ده دهی چه جوری عمل میکنه اصول پایه ریاضی روشنتر میکنه به اعداد دودویی قابل درکه
سلام
ممنون از زحمتی که کشیدید چه خوب توضیح دادید سیوالی داشتم از خدمتتون تو مقاله بطور ضمنی به نرم افزار مترجم یا کامپایلر که واسط بین کاربر و زبان ماشین است اشاره کردید میشه لطفا توضیح بدید چرا در زبانهای خانواده C پیش پردازنده و لینکر را ایجاد کردن خوب همون مترجم بود دیگه ، این دوتا قراره چیکار کنن که فقط به کامپایلر اکتفا نکردن ؟
اگر جواب سئوال رو ایمیل کنید ممنون میشم .
مرسی از مقالتون
سلام
یعنی برنامه ای که با پردازنده خودم نوشتم روی پردازنده ای که از خانواده پردازنده من نیست اجرا نمیشه؟؟؟؟؟؟؟
اگه اینطور هست پس چطور میشه روی یه پردازنده دیگه اجرا کرد؟؟؟؟؟؟؟؟؟؟؟
سلام
ممنون میشیم اگه سوالتون رو واضح تر بیان کنید
سلام
به نظرم باید اون برنامتونو دوباره از اول و با توجه به
نوع پردازندتون بنویسید !
چون اسمبلی یه زبان خیلی سطح پایینه و برای اجرا شدن
حتما باید با توجه به نوع معماری سیستم و پردازنده
نوشته شده باشه ! 🙂
سلام چطور کاری کنیم که زبان ماشین و اسمبلی به زبان سطح بالایی که خودمان نوشتیم تبدیل کنه؟
به زبان ساده صفر و یک تبدیل به زبان برنامه نویسی مثل cpp و c و یا python کنم؟
زبان اسمبلی برای دیباگینگ و کرکینگ نرمافزار یکی از پایه های اساسی هستش
برای اینکه دقیقا بفهمیم برنامه چیکارمیکنه باید کد های اونو تبدیل به اسمبلی کنیم و ساز کارش رو زیر نظر بگیریم و اینجوریم نیست که چون زبان های سطح بالا وجود دارن این زبان به درد نمیخوره اگه با کرکینگ نرم افزار کمی اشنایی داشته باشید میفهمید
باز هم خیلی ممنون از مقاله تون