প্রোগ্রাম ও ভাষার বিবর্তন: মেশিন ও অ্যাসেম্বলি ভাষা
এইচএসসি আইসিটি অধ্যায় ৫: প্রোগ্রামিং ভাষার ধারণা, মেশিন ভাষা ও অ্যাসেম্বলি ভাষার বিস্তারিত আলোচনা, সুবিধা-অসুবিধা ও পার্থক্য।
প্রোগ্রাম ও ভাষার বিবর্তন: মেশিন ও অ্যাসেম্বলি ভাষা
- প্রোগ্রাম ও ভাষার বিবর্তন: মেশিন ও অ্যাসেম্বলি ভাষা
- কম্পিউটারের গোপন ভাষা!
- প্রোগ্রাম কী? (What is a Program?)
- প্রোগ্রামিং ভাষার প্রজন্ম (Generations)
- মেশিন ভাষা (Machine Language)
- মেশিন ভাষার সুবিধা ও অসুবিধা
- অ্যাসেম্বলি ভাষা (Assembly Language)
- অ্যাসেম্বলি ভাষার গঠন ও অনুবাদক
- অ্যাসেম্বলি ভাষার সুবিধা ও অসুবিধা
- অ্যাসেম্বলি ভাষা কোথায় ব্যবহার হয়?
- তুলনা: মেশিন ভাষা vs অ্যাসেম্বলি ভাষা
- নিজেকে যাচাই করি (Self Check)
- উপসংহার ও পরবর্তী ক্লাস
প্রোগ্রাম ও ভাষার বিবর্তন: মেশিন ও অ্যাসেম্বলি ভাষা
মানুষ এবং যন্ত্রের মধ্যে যোগাযোগের প্রধান বাধা হলো ভাষা। মানুষ কথা বলে বাংলা, ইংরেজি বা অন্য কোনো প্রাকৃতিক ভাষায়, কিন্তু কম্পিউটার একটি ইলেকট্রনিক যন্ত্র হওয়ায় সে কেবল বিদ্যুতের উপস্থিতি (ON বা 1) এবং অনুপস্থিতি (OFF বা 0) বুঝতে পারে। মানুষের মনের ভাব বা নির্দেশ এই যান্ত্রিক ভাষায় রূপান্তর করার প্রক্রিয়াই হলো প্রোগ্রামিং।
এই অধ্যায়ে আমরা দেখব কীভাবে ১৯৪৫ সালের কঠিন মেশিন ভাষা থেকে ১৯৫০ সালের অ্যাসেম্বলি ভাষায় উত্তরণ ঘটেছে এবং কেন এগুলোকে 'লো-লেভেল ল্যাঙ্গুয়েজ' বলা হয়।
প্রোগ্রাম ও প্রোগ্রামিং ভাষার মৌলিক ধারণা
কম্পিউটার নিজে থেকে কোনো কাজ করতে পারে না। তাকে দিয়ে কোনো কাজ করিয়ে নিতে হলে সুনির্দিষ্ট নির্দেশ দিতে হয়। রান্নার সময় যেমন ধাপে ধাপে রেসিপি অনুসরণ করতে হয়, তেমনি কম্পিউটারকেও সমস্যা সমাধানের জন্য ধাপে ধাপে নির্দেশ দিতে হয়।
সংজ্ঞা (Definition):
- প্রোগ্রাম (Program): কম্পিউটার দিয়ে কোনো নির্দিষ্ট সমস্যা সমাধানের জন্য ধারাবাহিকভাবে সাজানো নির্দেশমালার সমষ্টিকে প্রোগ্রাম বলে।
- প্রোগ্রামিং (Programming): কম্পিউটারের বোধগম্য ভাষায় নির্দেশ বা প্রোগ্রাম রচনার পদ্ধতি বা কৌশলকে প্রোগ্রামিং বলে।
- প্রোগ্রামার (Programmer): যিনি বা যারা কম্পিউটারের জন্য প্রোগ্রাম রচনা করেন, তাদের প্রোগ্রামার বলা হয়।
প্রোগ্রামিং ভাষার ক্রমবিবর্তনকে ৫টি প্রজন্মে ভাগ করা যায়:
১. প্রথম প্রজন্ম (First Generation): মেশিন ভাষা (Machine Language) - ১৯৪৫
২. দ্বিতীয় প্রজন্ম (Second Generation): অ্যাসেম্বলি ভাষা (Assembly Language) - ১৯৫০
৩. তৃতীয় প্রজন্ম (Third Generation): উচ্চস্তরের ভাষা (High Level Language) - ১৯৬০
৪. চতুর্থ প্রজন্ম (Fourth Generation): অতি উচ্চস্তরের ভাষা (Very High Level Language) - ১৯৭০
৫. পঞ্চম প্রজন্ম (Fifth Generation): স্বাভাবিক ভাষা (Natural Language) - ১৯৮০
গুরুত্বপূর্ণ (Important):
পরীক্ষার জন্য মনে রাখবে: মেশিন ভাষা (১ম প্রজন্ম) এবং অ্যাসেম্বলি ভাষা (২য় প্রজন্ম)—উভয়ই 'লো-লেভেল ল্যাঙ্গুয়েজ' বা নিম্নস্তরের ভাষা। কারণ এগুলোর মাধ্যমে হার্ডওয়্যারকে সরাসরি নিয়ন্ত্রণ করা যায় এবং এগুলো মেশিনের আর্কিটেকচারের ওপর নির্ভরশীল।
মেশিন ভাষা (Machine Language): প্রথম প্রজন্ম
কম্পিউটার আবিষ্কারের শুরুর দিকে (১৯৪৫ সাল) প্রোগ্রাম লেখার জন্য যে ভাষা ব্যবহার করা হতো, তাই মেশিন ভাষা। এটি কম্পিউটারের নিজস্ব ভাষা বা মৌলিক ভাষা।
সংজ্ঞা (Definition): মেশিন ভাষা হলো সেই ভাষা, যা কোনো অনুবাদক প্রোগ্রামের সাহায্য ছাড়াই কম্পিউটার সরাসরি বুঝতে পারে এবং যা শুধুমাত্র বাইনারি ডিজিট ০ এবং ১ দিয়ে গঠিত।
মেশিন ভাষায় প্রতিটি নির্দেশ বা ইনস্ট্রাকশন দুটি অংশে বিভক্ত থাকে:
১. অপারেশন কোড (Opcode): কী কাজ করতে হবে (যেমন: যোগ, বিয়োগ)।
২. অপারেন্ড (Operand): কার ওপর কাজ হবে (মেমোরি অ্যাড্রেস বা ডেটা)।
মেশিন ভাষার বৈশিষ্ট্য ও যন্ত্র নির্ভরতা
মেশিন ভাষাকে "যন্ত্র নির্ভর" (Machine Dependent) ভাষা বলা হয়। এর কারণ হলো প্রতিটি কম্পিউটারের অভ্যন্তরীণ গঠন বা আর্কিটেকচার ভিন্ন। এক ধরণের প্রসেসর (যেমন: Intel) এর জন্য লেখা মেশিন কোড (০ ও ১ এর বিন্যাস) অন্য ভিন্ন আর্কিটেকচারের প্রসেসর (যেমন: Motorola) বুঝতে পারে না। তাই এক কম্পিউটারের জন্য লেখা প্রোগ্রাম অন্য কম্পিউটারে চলে না।
পরীক্ষার টিপস (Exam Tip):
অনুধাবনমূলক প্রশ্ন (খ-বিভাগ): "মেশিন ভাষাকে কেন যন্ত্রনির্ভর ভাষা বলা হয়?"
উত্তরে লিখবে: কারণ প্রতিটি কম্পিউটারের সিপিইউ (CPU) বা প্রসেসরের অভ্যন্তরীণ সার্কিট ডিজাইন আলাদা। ফলে এক ধরণের প্রসেসরের জন্য তৈরি ০ ও ১ এর সংকেত অন্য প্রসেসরের কাছে অর্থহীন বা ভিন্ন অর্থ বহন করে। এ কারণেই মেশিন ভাষা পোর্টেবল নয় এবং যন্ত্রনির্ভর।
সুবিধা ও অসুবিধা
| সুবিধা | অসুবিধা |
|---|---|
| ১. কম্পিউটার সরাসরি বুঝতে পারে, তাই অনুবাদক লাগে না। | ১. শুধুমাত্র ০ এবং ১ ব্যবহার করায় প্রোগ্রাম লেখা খুবই কঠিন ও ক্লান্তিকর। |
| ২. প্রোগ্রাম নির্বাহের গতি (Execution Speed) সবচেয়ে বেশি। | ২. ডিবাগিং (ভুল সংশোধন) করা দুঃসাধ্য। একটি ০ এর বদলে ১ হলে পুরো প্রোগ্রাম অকেজো হতে পারে। |
| ৩. হার্ডওয়্যার বা মেমোরি সরাসরি নিয়ন্ত্রণ করা যায়। | ৩. এক মেশিনের প্রোগ্রাম অন্য মেশিনে চলে না (লো-লেভেল)। |
অ্যাসেম্বলি ভাষা (Assembly Language): দ্বিতীয় প্রজন্ম
মেশিন ভাষার জটিলতা দূর করার জন্য ১৯৫০ সালের দিকে অ্যাসেম্বলি ভাষার উদ্ভাবন হয়। এখানে দীর্ঘ বাইনারি সংখ্যার পরিবর্তে মানুষের বোধগম্য কিছু সংকেত বা শব্দ ব্যবহার করা শুরু হয়।
সংজ্ঞা (Definition): যে প্রোগ্রামিং ভাষায় মেশিন ভাষার বাইনারি সংকেতের (০ ও ১) পরিবর্তে মানুষের বোধগম্য বিভিন্ন সংকেত বা নেমোনিক (Mnemonic) ব্যবহার করে প্রোগ্রাম লেখা হয়, তাকে অ্যাসেম্বলি ভাষা বলে।
নেমোনিক (Mnemonic) কী?
'Mnemonic' শব্দটি গ্রিক শব্দ থেকে এসেছে যার অর্থ 'স্মৃতি সহায়ক'। বড় বাইনারি সংখ্যার চেয়ে ছোট ইংরেজি শব্দ মনে রাখা সহজ। যেমন:
- যোগ করার জন্য বাইনারি ১০১১০১ এর বদলে ADD
- বিয়োগ করার জন্য SUB
- গুণ করার জন্য MUL
- ভাগ করার জন্য DIV
অ্যাসেম্বলি নির্দেশের গঠন (Structure of Instruction)
অ্যাসেম্বলি ভাষার প্রতিটি নির্দেশ সাধারণত ৪টি অংশে বিভক্ত থাকে। নিচে একটি উদাহরণের সাহায্যে দেখানো হলো:

উদাহরণ (Example):
ধরি, একটি নির্দেশ হলো: START: MOV AX, 5 ; Load 5 into AX
এখানে ৪টি অংশ হলো:
১. লেবেল (Label): START: — এটি প্রোগ্রামের একটি নির্দিষ্ট ধাপ বা ঠিকানা নির্দেশ করে। এটি ঐচ্ছিক।
২. অপ-কোড (Op-Code): MOV — এটি অপারেশন কোড, অর্থাৎ কম্পিউটারকে কী করতে হবে তা বলে দেয় (এখানে ডেটা মুভ বা সরানো বোঝাচ্ছে)।
৩. অপারেন্ড (Operand): AX, 5 — যার ওপর কাজ করা হবে। এখানে AX একটি রেজিস্টার এবং 5 হলো ডেটা।
৪. মন্তব্য (Comment): ; Load 5 into AX — সেমিক্লোন (;) এর পর যা লেখা হয় তা কম্পিউটার পড়ে না, এটি প্রোগ্রামারের বোঝার সুবিধার জন্য লেখা হয়।
অনুবাদক ও কোড রূপান্তর: সোর্স কোড থেকে অবজেক্ট কোড
কম্পিউটার তো কেবল ০ আর ১ বোঝে। তাহলে সে ADD বা MOV এর মতো ইংরেজি শব্দ বোঝে কীভাবে? আসলে সে বোঝে না। এই ইংরেজি শব্দগুলোকে মেশিনের ভাষায় অনুবাদ করে দিতে হয়।
সংজ্ঞা (Definition):
- সোর্স কোড (Source Code): প্রোগ্রামার যে ভাষায় প্রোগ্রাম লেখে (যেমন: অ্যাসেম্বলি বা সি ভাষা), তাকে সোর্স কোড বা উৎস প্রোগ্রাম বলে। এটি মানুষ বুঝতে পারে।
- অবজেক্ট কোড (Object Code): সোর্স কোডকে অনুবাদক প্রোগ্রামের মাধ্যমে মেশিনের ভাষায় (০ ও ১) রূপান্তর করার পর যা পাওয়া যায়, তাকে অবজেক্ট কোড বা বস্তু প্রোগ্রাম বলে। এটি কেবল কম্পিউটার বুঝতে পারে।
- অ্যাসেম্বলার (Assembler): যে অনুবাদক সফটওয়্যার অ্যাসেম্বলি ভাষায় লেখা সোর্স কোডকে মেশিন ভাষায় বা অবজেক্ট কোডে রূপান্তর করে, তাকে অ্যাসেম্বলার বলে।
রূপান্তর প্রক্রিয়া:
$$ \text{Source Code (Assembly)} \xrightarrow{\text{Assembler}} \text{Object Code (Machine)} \xrightarrow{\text{CPU}} \text{Execution} $$
তুলনামূলক আলোচনা: মেশিন বনাম অ্যাসেম্বলি ভাষা
পরীক্ষায় প্রায়ই এই দুটি ভাষার পার্থক্য জানতে চাওয়া হয়। নিচের ছকটি ভালোভাবে আয়ত্ত করো:
| বৈশিষ্ট্য | মেশিন ভাষা (১ম প্রজন্ম) | অ্যাসেম্বলি ভাষা (২য় প্রজন্ম) |
|---|---|---|
| গঠন | শুধুমাত্র ০ এবং ১ (বাইনারি) দিয়ে গঠিত। | নেমোনিক বা সংকেত (ADD, SUB) ও বর্ণমালা দিয়ে গঠিত। |
| বোধ্যগম্যতা | মানুষের জন্য বোঝা ও মনে রাখা খুবই কঠিন। | মেশিন ভাষার চেয়ে সহজ এবং মনে রাখা সুবিধাজনক। |
| অনুবাদক | কোনো অনুবাদক প্রোগ্রামের প্রয়োজন হয় না। | 'অ্যাসেম্বলার' নামক অনুবাদক প্রয়োজন হয়। |
| গতি | নির্বাহের গতি সবচেয়ে বেশি (দ্রুততম)। | অনুবাদের প্রয়োজন হয় বলে মেশিন ভাষার চেয়ে কিছুটা ধীর। |
| ডিবাগিং | প্রোগ্রামের ভুল ত্রুটি খুঁজে বের করা দুঃসাধ্য। | ভুল বের করা এবং সংশোধন করা তুলনামূলক সহজ। |
| ধরণ | এটি লো-লেভেল ল্যাঙ্গুয়েজ। | এটিও লো-লেভেল ল্যাঙ্গুয়েজ। |
সংক্ষিপ্ত সারাংশ (Quick Revision):
- প্রোগ্রাম: সমস্যা সমাধানের নির্দেশমালা।
- মেশিন ভাষা: ১৯৪৫ সালের ভাষা, যা ০ ও ১ দিয়ে গঠিত। এটি দ্রুত কিন্তু কঠিন এবং মেশিন-ডিপেন্ডেন্ট।
- অ্যাসেম্বলি ভাষা: ১৯৫০ সালের ভাষা, যা নেমোনিক (ADD, SUB) ব্যবহার করে। এটিও লো-লেভেল এবং মেশিন-ডিপেন্ডেন্ট।
- অ্যাসেম্বলার: অ্যাসেম্বলি ভাষাকে মেশিন ভাষায় রূপান্তর করে।
শব্দকোষ (Terminology Glossary)
| শব্দ | অর্থ |
|---|---|
| Binary | দ্বিমিক সংখ্যা পদ্ধতি (০ এবং ১)। |
| Opcode | অপারেশন কোড (কী কাজ করতে হবে)। |
| Operand | যার ওপর কাজ করা হবে (ডেটা বা মেমোরি)। |
| Mnemonic | স্মৃতি সহায়ক সংকেত (যেমন: ADD)। |
| Register | সিপিইউ-এর অভ্যন্তরে থাকা দ্রুতগতির ক্ষুদ্র মেমোরি। |
| Debug | প্রোগ্রামের ভুল (Bug) খুঁজে বের করে সমাধান করা। |