প্রোগ্রাম ও ভাষার বিবর্তন: মেশিন ও অ্যাসেম্বলি ভাষা

এইচএসসি আইসিটি অধ্যায় ৫: প্রোগ্রামিং ভাষার ধারণা, মেশিন ভাষা ও অ্যাসেম্বলি ভাষার বিস্তারিত আলোচনা, সুবিধা-অসুবিধা ও পার্থক্য।

শেখা শুরু করুন

প্রোগ্রাম ও ভাষার বিবর্তন: মেশিন ও অ্যাসেম্বলি ভাষা

  1. প্রোগ্রাম ও ভাষার বিবর্তন: মেশিন ও অ্যাসেম্বলি ভাষা
  2. কম্পিউটারের গোপন ভাষা!
  3. প্রোগ্রাম কী? (What is a Program?)
  4. প্রোগ্রামিং ভাষার প্রজন্ম (Generations)
  5. মেশিন ভাষা (Machine Language)
  6. মেশিন ভাষার সুবিধা ও অসুবিধা
  7. অ্যাসেম্বলি ভাষা (Assembly Language)
  8. অ্যাসেম্বলি ভাষার গঠন ও অনুবাদক
  9. অ্যাসেম্বলি ভাষার সুবিধা ও অসুবিধা
  10. অ্যাসেম্বলি ভাষা কোথায় ব্যবহার হয়?
  11. তুলনা: মেশিন ভাষা vs অ্যাসেম্বলি ভাষা
  12. নিজেকে যাচাই করি (Self Check)
  13. উপসংহার ও পরবর্তী ক্লাস

প্রোগ্রাম ও ভাষার বিবর্তন: মেশিন ও অ্যাসেম্বলি ভাষা

এই লেকচার শেষে আমরা-

১। প্রোগ্রাম ও প্রোগ্রামিং ভাষার ধারণা ব্যাখ্যা করতে পারব।
২। বিভিন্ন প্রজন্মের প্রোগ্রামিং ভাষার শ্রেণিবিভাগ করতে পারব।
৩। মেশিন ভাষার বৈশিষ্ট্য, সুবিধা ও অসুবিধা বর্ণনা করতে পারব।
৪। অ্যাসেম্বলি ভাষার গঠন ও ব্যবহার ব্যাখ্যা করতে পারব।
৫। মেশিন ও অ্যাসেম্বলি ভাষার মধ্যে পার্থক্য নির্ণয় করতে পারব।

হ্যালো এভরিওয়ান! কেমন আছো তোমরা সবাই? এইচএসসি আইসিটি কোর্সের পঞ্চম অধ্যায়ে তোমাদের স্বাগতম। এই অধ্যায়টি হলো প্রোগ্রামিং ভাষা নিয়ে। অনেকেই মনে করে প্রোগ্রামিং খুব কঠিন, কিন্তু বিশ্বাস করো, এটা লজিক আর ক্রিয়েটিভিটির একটা চমৎকার খেলা। আজ আমরা একদম শুরু থেকে শুরু করব। আমরা দেখব কম্পিউটার কীভাবে আমাদের কথা বোঝে এবং কীভাবে প্রোগ্রামিং ভাষার জন্ম হলো। আজকের লেকচারে আমরা মেশিন ল্যাঙ্গুয়েজ এবং অ্যাসেম্বলি ল্যাঙ্গুয়েজ নিয়ে বিস্তারিত জানব। চলো তাহলে শুরু করা যাক!

কম্পিউটারের গোপন ভাষা!

ছবিতে কী দেখছ?
* কেবল ০ এবং ১ এর স্রোত
* কম্পিউটারের নিজস্ব ভাষা

প্রশ্ন:
কম্পিউটার কি বাংলা বা ইংরেজি বোঝে?
নাকি তার বোঝার জন্য বিশেষ কোনো সংকেত লাগে?

তোমরা কি বিখ্যাত মুভি 'দ্য ম্যাট্রিক্স' দেখেছ? সেখানে দেখবে স্ক্রিনে বৃষ্টির মতো সবুজ রঙের সব সংখ্যা ঝরে পড়ছে। ভালো করে খেয়াল করলে দেখবে সেগুলো শুধুই শূন্য আর এক। আসলে কম্পিউটারের জগতটা ঠিক এরকমই। আমরা স্ক্রিনে যত সুন্দর ছবি বা ভিডিও দেখি না কেন, এর পেছনে কম্পিউটার চিনে শুধু দুটো অবস্থা—অন আর অফ, বা জিরো আর ওয়ান। তুমি যদি কম্পিউটারকে বাংলায় বলো 'গান বাজাও', সে কিচ্ছু বুঝবে না। তাকে তার ভাষায়, অর্থাৎ এই বাইনারি সংকেতে বোঝাতে হবে।

প্রোগ্রাম কী? (What is a Program?)

সংজ্ঞা: কম্পিউটারকে দিয়ে কোনো কাজ করানোর জন্য যে নির্দেশ বা নির্দেশাবলি (Instructions) দেওয়া হয়, তাকে প্রোগ্রাম বলে।

বাস্তব উদাহরণ (অ্যানালজি):
* রান্নার রেসিপি = প্রোগ্রাম (Program)
* রাধুনী = কম্পিউটার (Computer)
* তৈরি খাবার = আউটপুট (Output)

প্রোগ্রামিং: প্রোগ্রাম লেখার পদ্ধতি বা কৌশলকে প্রোগ্রামিং বলা হয়।

প্রোগ্রাম জিনিসটা আসলে কী? খুব সহজ একটা উদাহরণ দেই। ধরো, তুমি রান্না করতে চাও। তোমার সামনে একটা রান্নার বই বা রেসিপি আছে। সেখানে ধাপে ধাপে বলা আছে—প্রথমে পেঁয়াজ কাটো, তারপর তেল গরম করো, তারপর মসলা দাও। তুমি যদি হুবহু সেই নির্দেশগুলো মেনে চলো, তাহলেই সুস্বাদু খাবার তৈরি হবে। এখানে ওই রেসিপিটাই হলো 'প্রোগ্রাম', আর তুমি, যে রান্না করছ, তুমি হলে 'কম্পিউটার'। কম্পিউটার বোকার মতো শুধু ধাপে ধাপে নির্দেশ পালন করে। আর এই নির্দেশগুলো বা রেসিপিটা যে লিখেছে, সেই প্রক্রিয়াটাই হলো 'প্রোগ্রামিং' বা 'কোডিং' ।

প্রোগ্রামিং ভাষার প্রজন্ম (Generations)

ভাষার বিবর্তনকে ৫টি প্রজন্মে ভাগ করা যায়:

  1. প্রথম প্রজন্ম (1945): মেশিন ভাষা (Machine Language) - [আজকের আলোচ্য বিষয়]
  2. দ্বিতীয় প্রজন্ম (1950): অ্যাসেম্বলি ভাষা (Assembly Language) - [আজকের আলোচ্য বিষয়]
  3. তৃতীয় প্রজন্ম (1960): উচ্চস্তরের ভাষা (High Level)
  4. চতুর্থ প্রজন্ম (1970): অতি উচ্চস্তরের ভাষা (Very High Level)
  5. পঞ্চম প্রজন্ম (1980-ভবিষ্যৎ): স্বাভাবিক ভাষা (Natural Language)

মানুষের ভাষা যেমন হাজার বছর ধরে বিবর্তিত হয়েছে, কম্পিউটারের ভাষাও তেমনি ধাপে ধাপে উন্নত হয়েছে। ১৯৪৫ সাল থেকে আজ পর্যন্ত এই বিবর্তনকে আমরা ৫টি প্রজন্মে ভাগ করি। একদম শুরুতে ছিল ফার্স্ট জেনারেশন বা মেশিন ল্যাঙ্গুয়েজ, যেটা দিয়ে কাজ করা ছিল অত্যন্ত কঠিন। এরপর এলো সেকেন্ড জেনারেশন বা অ্যাসেম্বলি ল্যাঙ্গুয়েজ। আজ আমরা মূলত এই প্রথম ও দ্বিতীয় প্রজন্ম নিয়েই কথা বলব, কারণ এগুলোই হলো প্রোগ্রামিংয়ের ভিত্তি বা লো-লেভেল ল্যাঙ্গুয়েজ।

মেশিন ভাষা (Machine Language)

সংজ্ঞা: কম্পিউটারের নিজস্ব ভাষা, যা বাইনারি সংখ্যা (0 এবং 1) দিয়ে গঠিত, তাকে মেশিন ভাষা বলে।

বৈশিষ্ট্য:
* এটি কম্পিউটারের মৌলিক ভাষা (Native Language)।
* কম্পিউটার সরাসরি বুঝতে পারে (কোনো অনুবাদক লাগে না)।
* এটি হার্ডওয়্যার নির্ভর (Machine Dependent)

প্রথমে আসি মেশিন ভাষায়। নাম শুনেই বুঝতে পারছ, এটা মেশিনের নিজস্ব ভাষা। মানুষের ভাষা নয়। কম্পিউটার হার্ডওয়্যার কেবল বিদ্যুতের উপস্থিতি (১) আর অনুপস্থিতি (০) বুঝতে পারে। তাই এই ভাষায় সব নির্দেশ কেবল ০ আর ১ দিয়ে লিখতে হয়। এর সবচেয়ে বড় বৈশিষ্ট্য হলো, কম্পিউটার এটা সরাসরি বোঝে, মাঝখানে কোনো দোভাষী বা অনুবাদকের দরকার হয় না। কিন্তু সমস্যা হলো, এই ভাষা 'মেশিন ডিপেন্ডেন্ট'। অর্থাৎ, এক কোম্পানির কম্পিউটারের জন্য লেখা কোড অন্য কোম্পানির কম্পিউটারে কাজ নাও করতে পারে।

মেশিন ভাষার সুবিধা ও অসুবিধা

সুবিধা:
* সবচেয়ে দ্রুত নির্বাহ হয় (Fast Execution)।
* সরাসরি হার্ডওয়্যার নিয়ন্ত্রণ করা যায়।
* কোনো অনুবাদক প্রোগ্রামের প্রয়োজন নেই।
* মেমোরি কম ব্যবহার হয়।

মেশিন ভাষার কিছু দারুণ সুবিধা আছে। যেহেতু কম্পিউটার এটা সরাসরি বোঝে, তাই এই প্রোগ্রাম সবচেয়ে দ্রুত কাজ করে। অনেকটা তোমার মাতৃভাষার মতো, কেউ বাংলায় কথা বললে তোমাকে যেমন অনুবাদ করতে হয় না, সাথে সাথে বোঝো। কিন্তু অসুবিধাগুলো চিন্তা করো একবার! পুরো একটা প্রোগ্রাম লিখতে হবে শুধু ০ আর ১ দিয়ে। হাজার হাজার ০ আর ১ এর মধ্যে যদি একটা ০ ভুলে ১ হয়ে যায়, পুরো প্রোগ্রাম ক্র্যাশ করবে! আর সেই ভুল খুঁজে বের করা খড়ের গাদায় সুঁচ খোঁজার মতো কঠিন।

অ্যাসেম্বলি ভাষা (Assembly Language)

সংজ্ঞা: যে ভাষায় বিভিন্ন সংকেত বা নেমোনিক (Mnemonic) ব্যবহার করে প্রোগ্রাম লেখা হয়, তাকে অ্যাসেম্বলি ভাষা বলে।

নেমোনিক (Mnemonic) কী?
বড় কোনো সংখ্যা বা কোড মনে রাখার সুবিধার্থে ব্যবহৃত সংক্ষিপ্ত সংকেত।

উদাহরণ:
* মেশিন ভাষা: ১০১০১০০০ (বোঝা কঠিন)
* অ্যাসেম্বলি ভাষা: ADD B (সহজ: B এর মান যোগ করো)

মেশিন ভাষার এই জটিলতা দূর করতেই ১৯৫০-এর দশকে এলো অ্যাসেম্বলি ভাষা। বিজ্ঞানীরা ভাবলেন, '১০১০১০০০' মনে রাখা খুব কঠিন। এর বদলে যদি আমরা ছোট ছোট ইংরেজি শব্দ ব্যবহার করি? যেমন যোগ করার জন্য 'ADD', বিয়োগের জন্য 'SUB', গুণ করার জন্য 'MUL'। এই ছোট শব্দগুলোকে বলা হয় 'নেমোনিক'। স্ক্রিনে দেখো, বাম পাশের ওই বিদঘুটে বাইনারি কোডের চেয়ে ডান পাশের 'ADD A, B' লেখাটা কত সহজ, তাই না? এটাই অ্যাসেম্বলি ভাষার ম্যাজিক।

অ্যাসেম্বলি ভাষার গঠন ও অনুবাদক

গঠন:
প্রতিটি নির্দেশের চারটি অংশ থাকতে পারে: লেবেল, অপকোড (Opcode), অপারেন্ড (Operand), কমেন্ট।

অনুবাদক (Assembler):
কম্পিউটার 'ADD' বা 'SUB' বোঝে না। তাই অ্যাসেম্বলার দিয়ে এটিকে মেশিন ভাষায় রূপান্তর করতে হয়।

সোর্স কোড (Source Code) -> অ্যাসেম্বলার -> অবজেক্ট কোড (Object Code)

কিন্তু এখানে একটা ছোট্ট সমস্যা আছে। আমরা তো 'ADD' বা 'SUB' লিখলাম, কিন্তু কম্পিউটার তো এখনো সেই বোকা বাক্সই আছে! সে তো ইংরেজি বোঝে না, সে বোঝে শুধু ০ আর ১। তাহলে উপায়? এখানেই দরকার হয় একজন অনুবাদকের, যার নাম 'অ্যাসেম্বলার'। এই ছবিটা খেয়াল করো। আমরা যে অ্যাসেম্বলি কোড লিখি, সেটাকে বলে 'সোর্স কোড'। অ্যাসেম্বলার সেটাকে অনুবাদ করে ০-১ এর 'অবজেক্ট কোড'-এ পরিণত করে, যা কম্পিউটার বুঝতে পারে।

অ্যাসেম্বলি ভাষার সুবিধা ও অসুবিধা

সুবিধা:
* নেমোনিক ব্যবহারের ফলে প্রোগ্রাম লেখা ও বোঝা মেশিন ভাষার চেয়ে সহজ।
* ভুল নির্ণয় করা (Debugging) তুলনামূলক সহজ।
* হার্ডওয়্যার নিয়ন্ত্রণে অত্যন্ত দক্ষ।

অ্যাসেম্বলি ভাষার সুবিধা হলো, এটা মানুষের পক্ষে পড়া ও বোঝা অনেক সহজ হয়ে গেল। ভুল হলেও চট করে ধরা যায়। কিন্তু মনে রাখবে, এটাও কিন্তু 'মেশিন ডিপেন্ডেন্ট'। অর্থাৎ, ইন্টেল প্রসেসরের জন্য লেখা অ্যাসেম্বলি কোড, অ্যাপল বা অন্য প্রসেসরে কাজ করবে না। আর যেহেতু মাঝখানে অনুবাদক বা অ্যাসেম্বলার কাজ করে, তাই মেশিন ভাষার চেয়ে এটা কাজ করতে সামান্য একটু বেশি সময় নেয়, যদিও সেই পার্থক্যটা আমরা বুঝতেই পারি না।

অ্যাসেম্বলি ভাষা কোথায় ব্যবহার হয়?

আধুনিক যুগে ব্যবহার:
১। হার্ডওয়্যার ড্রাইভার তৈরি করতে।
২। এমবেডেড সিস্টেম (যেমন: মাইক্রোওয়েভ, ওয়াশিং মেশিনের চিপ) প্রোগ্রামিংয়ে।
৩। ভাইরাস বা অ্যান্টিভাইরাস সফটওয়্যার তৈরিতে।
৪। অপারেটিং সিস্টেমের কার্নেল (Kernel) লিখতে।

অনেকে প্রশ্ন করো, 'স্যার, এখন তো পাইথন বা জাভার মতো সহজ ভাষা আছে, তাহলে এত কঠিন অ্যাসেম্বলি ভাষা শিখে লাভ কী?' লাভ আছে! যখন আমাদের হার্ডওয়্যারের খুব গভীরে গিয়ে কাজ করতে হয়, তখন অ্যাসেম্বলিই সেরা। যেমন তোমার বাসার ওয়াশিং মেশিন বা মাইক্রোওয়েভ ওভেনের ভেতরে যে ছোট চিপটা আছে, সেটা প্রোগ্রাম করতে অ্যাসেম্বলি ব্যবহার করা হয়। এমনকি কম্পিউটারের অপারেটিং সিস্টেমের মূল অংশ বা কার্নেল লিখতেও এর জুড়ি নেই।

তুলনা: মেশিন ভাষা vs অ্যাসেম্বলি ভাষা

বৈশিষ্ট্য মেশিন ভাষা (Machine Language) অ্যাসেম্বলি ভাষা (Assembly Language)
লেখার মাধ্যম বাইনারি (0, 1) নেমোনিক (ADD, SUB)
অনুধাবন মানুষের জন্য অত্যন্ত কঠিন তুলনামূলক সহজ
অনুবাদক প্রয়োজন নেই (সরাসরি চলে) অ্যাসেম্বলার প্রয়োজন
গতি সবচেয়ে দ্রুত অনুবাদের কারণে কিছুটা ধীর
পোর্টেবিলিটি মেশিন নির্ভর (Portable নয়) মেশিন নির্ভর (Portable নয়)

চলো, এক নজরে দেখে নিই দুই ভাষার মূল পার্থক্যগুলো। এই চার্টটা খুব ভালো করে খেয়াল করো। মেশিন ভাষা হলো ০ আর ১, আর অ্যাসেম্বলি হলো নেমোনিক বা সংকেত। মেশিন ভাষায় অনুবাদক লাগে না, কিন্তু অ্যাসেম্বলিতে অ্যাসেম্বলার লাগে। কিন্তু একটা জায়গায় দুজনেই এক—দুটোই মেশিন নির্ভর বা হার্ডওয়্যার ডিপেন্ডেন্ট। অর্থাৎ, কোনোটিই পোর্টেবল নয়। এই টেবিলটা মনে রাখলে তোমাদের অনেক কনসেপ্ট ক্লিয়ার থাকবে।

নিজেকে যাচাই করি (Self Check)

নিচের কোনটি মেশিন ভাষার বৈশিষ্ট্য?

ক) অনুবাদক লাগে
খ) নেমোনিক ব্যবহার হয়
গ) সরাসরি হার্ডওয়্যার নিয়ন্ত্রণ করে
ঘ) মানুষের বোঝা সহজ

(ভিডিও পজ করে একটু চিন্তা করো এবং উত্তর দাও)

এতক্ষণ যা শিখলাম, তা একটু যাচাই করা যাক। স্ক্রিনে একটা প্রশ্ন দেখতে পাচ্ছ। ভিডিওটা ৫ সেকেন্ডের জন্য পজ করো এবং সঠিক উত্তরটা ভাবো। ... ভেবেছ? সঠিক উত্তর হলো 'গ'। মেশিন ভাষা সরাসরি হার্ডওয়্যার নিয়ন্ত্রণ করে। 'ক' ভুল কারণ মেশিন ভাষায় অনুবাদক লাগে না। 'খ' ভুল কারণ নেমোনিক অ্যাসেম্বলিতে থাকে। আর 'ঘ' তো পুরোপুরিই ভুল, কারণ মেশিন ভাষা মানুষের বোঝা খুবই কঠিন!

উপসংহার ও পরবর্তী ক্লাস

আজকের সারসংক্ষেপ:
* প্রোগ্রাম হলো কম্পিউটারের প্রতি নির্দেশের সমষ্টি।
* মেশিন ভাষা (0,1) কম্পিউটারের নিজস্ব ভাষা কিন্তু মানুষের জন্য কঠিন।
* অ্যাসেম্বলি ভাষায় নেমোনিক (ADD, SUB) ব্যবহার করায় তা সহজ, কিন্তু অনুবাদক (Assembler) লাগে।

পরবর্তী ক্লাসে:
আমরা 'মধ্যম ও উচ্চস্তরের ভাষা' (C, Java, Python) নিয়ে আলোচনা করব যা মানুষের ভাষার মতোই সহজ!

আজকের ক্লাস শেষে আমরা যা যা শিখলাম—প্রোগ্রাম কী, মেশিন ভাষা কেন কম্পিউটারের জন্য সহজ কিন্তু আমাদের জন্য কঠিন, এবং অ্যাসেম্বলি ভাষা কীভাবে সেই কঠিন কাজটাকে একটু সহজ করেছে। কিন্তু এগুলো সবই ছিল 'লো-লেভেল'। এর পরের ক্লাসে আমরা দেখব প্রোগ্রামিংয়ের আসল মজা—হাই লেভেল ল্যাঙ্গুয়েজ! যেখানে আমরা মানুষের ভাষার মতোই সহজে কোড লিখতে পারব। সি, জাভা, পাইথন নিয়ে কথা হবে। সেই পর্যন্ত সবাই ভালো থেকো, দেখা হবে পরের ক্লাসে!

প্রোগ্রাম ও ভাষার বিবর্তন: মেশিন ও অ্যাসেম্বলি ভাষা

পড়তে প্রায় 5 মিনিট

মানুষ এবং যন্ত্রের মধ্যে যোগাযোগের প্রধান বাধা হলো ভাষা। মানুষ কথা বলে বাংলা, ইংরেজি বা অন্য কোনো প্রাকৃতিক ভাষায়, কিন্তু কম্পিউটার একটি ইলেকট্রনিক যন্ত্র হওয়ায় সে কেবল বিদ্যুতের উপস্থিতি (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) খুঁজে বের করে সমাধান করা।

অনুশীলনের প্রশ্ন

সৃজনশীল প্রশ্ন

সৃজনশীল প্রশ্ন ১

আইসিটি ক্লাসে শিক্ষক প্রোগ্রামিং ভাষার ইতিহাস আলোচনা করছিলেন। তিনি বললেন, "শুরুর দিকে কম্পিউটার বিজ্ঞানীরা এমন একটি ভাষা ব্যবহার করতেন যা শুধুমাত্র '০' ও '১' দিয়ে গঠিত এবং কম্পিউটার সরাসরি বুঝতে পারত। পরবর্তীতে কাজের গতি ও সুবিধা বাড়াতে ইংরেজি শব্দের সংক্ষিপ্ত রূপ (যেমন: ADD, SUB) ব্যবহার করে নতুন একটি ভাষা তৈরি করা হয়, তবে এই ভাষাটি ব্যবহার করতে বিশেষ অনুবাদক প্রোগ্রামের প্রয়োজন হয়।"

ক) মেশিন ভাষা কী?
খ) "মেশিন ভাষায় রচিত প্রোগ্রাম দ্রুত নির্বাহ হয়"—ব্যাখ্যা কর।
গ) উদ্দীপকে উল্লিখিত প্রথম ভাষাটির বৈশিষ্ট্য ব্যাখ্যা কর।
ঘ) উদ্দীপকে নির্দেশিত দ্বিতীয় ভাষাটি প্রথম ভাষার চেয়ে সুবিধাজনক হলেও সম্পূর্ণ সমস্যাউন্মুক্ত নয়—উক্তিটি বিশ্লেষণ কর।

উত্তর

(ক) মেশিন ভাষা হলো কম্পিউটারের নিজস্ব ভাষা, যা শুধুমাত্র ০ এবং ১ ব্যবহার করে তৈরি এবং কম্পিউটার কোনো প্রকার অনুবাদক প্রোগ্রাম ছাড়াই সরাসরি বুঝতে পারে।

(খ) মেশিন ভাষায় লেখা প্রোগ্রাম সরাসরি বাইনারি কোডে (০ ও ১) থাকে, যা কম্পিউটারের সিপিইউ (CPU) সরাসরি বুঝতে ও প্রক্রিয়াজাত করতে পারে। অন্য ভাষায় লেখা প্রোগ্রামের মতো এতে কোনো অনুবাদক প্রোগ্রামের (যেমন—কম্পাইলার বা ইন্টারপ্রেটার) প্রয়োজন হয় না, ফলে অনুবাদ করার সময় বাঁচে এবং প্রোগ্রাম অত্যন্ত দ্রুত নির্বাহ হয়।

(গ) উদ্দীপকে উল্লিখিত প্রথম ভাষাটি হলো মেশিন ভাষা। নিচে এর বৈশিষ্ট্য ব্যাখ্যা করা হলো:
১. সরাসরি বোধগম্য: এই ভাষায় নির্দেশ দেওয়ার জন্য শুধুমাত্র ০ এবং ১ ব্যবহৃত হয়, যা কম্পিউটার সরাসরি বুঝতে পারে।
২. হার্ডওয়্যার নির্ভরতা: এক ধরনের কম্পিউটারের জন্য লেখা মেশিন কোড অন্য ধরনের কম্পিউটারে চলে না; অর্থাৎ এটি সম্পূর্ণ হার্ডওয়্যার নির্ভর।
৩. দ্রুত নির্বাহ: কোনো অনুবাদকের প্রয়োজন না হওয়ায় এই ভাষায় রচিত প্রোগ্রাম সবচেয়ে দ্রুত কাজ করে।
৪. জটিলতা: অসংখ্য ০ ও ১ মনে রাখা এবং ব্যবহার করা মানুষের জন্য অত্যন্ত কঠিন ও ভুলপ্রবণ।

(ঘ) উদ্দীপকে নির্দেশিত দ্বিতীয় ভাষাটি হলো অ্যাসেম্বলি ভাষা এবং প্রথমটি মেশিন ভাষা। উক্তিটি যথার্থ, কারণ অ্যাসেম্বলি ভাষা মেশিন ভাষার চেয়ে সুবিধাজনক হলেও এর কিছু সীমাবদ্ধতা রয়েছে।

সুবিধাসমূহ:
১. কোড বোঝা সহজ: মেশিন ভাষায় হাজার হাজার ০ ও ১-এর পরিবর্তে অ্যাসেম্বলি ভাষায় নেমোনিক (Mnemonic) বা সংক্ষিপ্ত শব্দ (যেমন ADD, SUB) ব্যবহার করা হয়, যা মনে রাখা ও ব্যবহার করা তুলনামূলক সহজ।
২. ডিবাগিং সুবিধা: ভুলের অবস্থান নির্ণয় করা এবং তা সংশোধন করা মেশিন ভাষার চেয়ে অনেক সহজ।

সীমাবদ্ধতা (সমস্যাউন্মুক্ত নয়):
১. অনুবাদক প্রয়োজন: কম্পিউটার অ্যাসেম্বলি ভাষা সরাসরি বুঝতে পারে না, তাই একে মেশিন ভাষায় রূপান্তর করতে 'অ্যাসেম্বলার' নামক অনুবাদক প্রোগ্রামের প্রয়োজন হয়, যা বাড়তি সময় ও মেমোরি নেয়।
২. হার্ডওয়্যার নির্ভরতা: মেশিন ভাষার মতোই অ্যাসেম্বলি ভাষাও হার্ডওয়্যার নির্ভর। অর্থাৎ, এক মডেলের কম্পিউটারের জন্য লেখা প্রোগ্রাম অন্য মডেলে চলে না। প্রোগ্রামারকে কম্পিউটারের অভ্যন্তরীণ সংগঠন সম্পর্কে বিস্তারিত জানতে হয়।

সুতরাং, ব্যবহারিক সুবিধা বাড়লেও অ্যাসেম্বলি ভাষা মেশিন ভাষার মতোই হার্ডওয়্যার নির্ভরতার সীমাবদ্ধতা থেকে মুক্ত নয়।


সৃজনশীল প্রশ্ন ২

রনি ও জনি দুই বন্ধু প্রোগ্রামিং শিখছে। রনি এমন একটি ভাষায় কোড লিখছে যেখানে তাকে মেমোরি অ্যাড্রেস ও ডেটা সরাসরি বাইনারি বিট আকারে দিতে হচ্ছে। অন্যদিকে জনি 'LDA', 'STA', 'JMP' ইত্যাদি সংকেত ব্যবহার করে প্রোগ্রাম লিখছে। জনি রনিকে বলল, "তোমার পদ্ধতিতে প্রোগ্রাম লেখা খুব কষ্টের, আমার পদ্ধতিতে ভুল কম হয় কিন্তু কম্পিউটারকে বোঝাতে আলাদা ব্যবস্থা নিতে হয়।"

ক) অবজেক্ট কোড কী?
খ) নেমোনিক কোড বলতে কী বোঝায়?
গ) রনির ব্যবহৃত ভাষাটির অসুবিধাগুলো বর্ণনা কর।
ঘ) জনির ব্যবহৃত ভাষাটি কি উচ্চস্তরের ভাষা? উদ্দীপকের আলোকে যুক্তি দাও।

উত্তর

(ক) অবজেক্ট কোড হলো সোর্স কোডকে অনুবাদক প্রোগ্রামের মাধ্যমে মেশিন ভাষায় (০ ও ১) রূপান্তর করার পর প্রাপ্ত কোড, যা কম্পিউটার সরাসরি নির্বাহ করতে পারে।

(খ) নেমোনিক (Mnemonic) কোড হলো অ্যাসেম্বলি ভাষায় ব্যবহৃত বিশেষ সংক্ষিপ্ত শব্দ বা সংকেত। বড় বড় বাইনারি নির্দেশ মনে রাখার পরিবর্তে কাজের ধরণ অনুযায়ী ইংরেজি শব্দের অংশবিশেষ ব্যবহার করা হয়। যেমন—যোগ করার জন্য 'ADD', বিয়োগের জন্য 'SUB', ডেটা মুভ করার জন্য 'MOV' ইত্যাদি। এটি প্রোগ্রাম রচনাকে মেশিন ভাষার তুলনায় সহজ করে।

(গ) উদ্দীপকে রনি সরাসরি বাইনারি বিট (০ ও ১) ব্যবহার করছে, যা নির্দেশ করে সে মেশিন ভাষা ব্যবহার করছে। মেশিন ভাষার অসুবিধাগুলো নিম্নরূপ:
১. লেখা ও মনে রাখা কঠিন: শুধুমাত্র ০ ও ১ ব্যবহার করে প্রোগ্রাম লেখা অত্যন্ত ক্লান্তিকর এবং প্রতিটি নির্দেশের কোড মনে রাখা মানুষের পক্ষে প্রায় অসম্ভব।
২. ভুল সংশোধন জটিল: হাজার হাজার ০ ও ১-এর মধ্যে একটি বিট ভুল হলে তা খুঁজে বের করা (Debugging) এবং সংশোধন করা খুব কঠিন।
৩. দক্ষ প্রোগ্রামার প্রয়োজন: এই ভাষায় প্রোগ্রাম লিখতে হলে কম্পিউটারের অভ্যন্তরীণ গঠন ও মেমোরি অ্যাড্রেস সম্পর্কে গভীর জ্ঞান থাকতে হয়।
৪. পোর্টেবিলিটির অভাব: এক কম্পিউটারের জন্য লেখা মেশিন কোড অন্য কম্পিউটারে চলে না।

(ঘ) না, জনির ব্যবহৃত ভাষাটি উচ্চস্তরের ভাষা নয়; এটি অ্যাসেম্বলি ভাষা

যুক্তি:
১. নেমোনিক ব্যবহার: উদ্দীপকে বলা হয়েছে জনি 'LDA', 'STA' ইত্যাদি সংকেত ব্যবহার করছে। এই ধরনের নেমোনিক কোড অ্যাসেম্বলি ভাষার প্রধান বৈশিষ্ট্য, যা দ্বিতীয় প্রজন্মের ভাষা। উচ্চস্তরের ভাষায় (যেমন C, Python) মানুষের বোধগম্য ইংরেজি বাক্য বা গাণিতিক সংকেত ব্যবহৃত হয়।
২. হার্ডওয়্যার নির্ভরতা: জনি উল্লেখ করেছে যে তার ভাষাতেও কম্পিউটারকে বোঝাতে আলাদা ব্যবস্থা (অ্যাসেম্বলার) লাগে এবং এটি হার্ডওয়্যার ও মেমোরি অ্যাড্রেস নিয়ে কাজ করে। উচ্চস্তরের ভাষা সম্পূর্ণ হার্ডওয়্যার স্বাধীন, কিন্তু অ্যাসেম্বলি ভাষা হার্ডওয়্যার নির্ভর।
৩. লো-লেভেল প্রকৃতি: অ্যাসেম্বলি ভাষাকে 'লো-লেভেল ল্যাঙ্গুয়েজ' বলা হয় কারণ এটি মেশিনের খুব কাছাকাছি থাকে। উচ্চস্তরের ভাষা মানুষের ভাষার কাছাকাছি।

সুতরাং, জনির ভাষাটি মেশিন ভাষার চেয়ে উন্নত হলেও এটি উচ্চস্তরের ভাষা নয়, এটি অ্যাসেম্বলি ভাষা।

এমসিকিউ

১। কম্পিউটারের নিজস্ব ভাষা কোনটি?

ক) অ্যাসেম্বলি ভাষা
খ) মেশিন ভাষা
গ) হাই লেভেল ভাষা
ঘ) অবজেক্ট ওরিয়েন্টেড ভাষা

সঠিক উত্তর: খ) মেশিন ভাষা

ব্যাখ্যা: মেশিন ভাষা হলো কম্পিউটারের মৌলিক ভাষা যা শুধুমাত্র ০ এবং ১ ব্যবহার করে গঠিত হয় এবং কম্পিউটার সরাসরি বুঝতে পারে।


২। যান্ত্রিক ভাষায় নির্দেশ দেওয়ার জন্য কী ব্যবহার করা হয়?

ক) ০ এবং ১
খ) ইংরেজি শব্দ
গ) বিশেষ চিহ্ন
ঘ) গাণিতিক সংকেত

সঠিক উত্তর: ক) ০ এবং ১

ব্যাখ্যা: মেশিন ভাষায় প্রতিটি নির্দেশ বা ডেটা বাইনারি সংখ্যা (০ এবং ১) ব্যবহার করে উপস্থাপন করা হয়।


৩। মেশিন ভাষায় লেখা প্রোগ্রামকে কী বলা হয়?

ক) সোর্স কোড
খ) অবজেক্ট কোড
গ) অ্যাসেম্বলি কোড
ঘ) নেমোনিক কোড

সঠিক উত্তর: খ) অবজেক্ট কোড

ব্যাখ্যা: মেশিন ভাষায় লেখা বা অনূদিত কোডকে অবজেক্ট কোড বলা হয়, যা কম্পিউটার সরাসরি নির্বাহ করতে পারে।


৪। কোন ভাষায় লেখা প্রোগ্রাম নির্বাহের জন্য কোনো অনুবাদক প্রোগ্রামের প্রয়োজন হয় না?

ক) অ্যাসেম্বলি ভাষা
খ) মেশিন ভাষা
গ) হাই লেভেল ভাষা
ঘ) চতুর্থ প্রজন্মের ভাষা

সঠিক উত্তর: খ) মেশিন ভাষা

ব্যাখ্যা: মেশিন ভাষা কম্পিউটারের নিজস্ব ভাষা হওয়ায় এটি বুঝতে কোনো অনুবাদক বা কম্পাইলারের প্রয়োজন হয় না।


৫। অ্যাসেম্বলি ভাষা কোন প্রজন্মের ভাষা?

ক) প্রথম প্রজন্ম
খ) দ্বিতীয় প্রজন্ম
গ) তৃতীয় প্রজন্ম
ঘ) চতুর্থ প্রজন্ম

সঠিক উত্তর: খ) দ্বিতীয় প্রজন্ম

ব্যাখ্যা: অ্যাসেম্বলি ভাষাকে দ্বিতীয় প্রজন্মের ভাষা (2GL) বলা হয়, যা ১৯৫০-এর দশকে উদ্ভাবিত হয়েছিল।


৬। 'ADD', 'SUB', 'MUL' ইত্যাদি সংকেত কোন ভাষায় ব্যবহৃত হয়?

ক) মেশিন ভাষা
খ) অ্যাসেম্বলি ভাষা
গ) ফোরট্রান
ঘ) সি ভাষা

সঠিক উত্তর: খ) অ্যাসেম্বলি ভাষা

ব্যাখ্যা: অ্যাসেম্বলি ভাষায় বাইনারি কোডের পরিবর্তে মানুষের মনে রাখার সুবিধার্থে বিশেষ সংকেত বা নেমোনিক (যেমন ADD, SUB) ব্যবহার করা হয়।


৭। অ্যাসেম্বলি ভাষায় ব্যবহৃত সংকেতগুলোকে কী বলা হয়?

ক) অপকোড
খ) সোর্স কোড
গ) নেমোনিক
ঘ) অবজেক্ট কোড

সঠিক উত্তর: গ) নেমোনিক

ব্যাখ্যা: অ্যাসেম্বলি ভাষায় ব্যবহৃত সংক্ষিপ্ত শব্দ বা সংকেতকে নেমোনিক (Mnemonic) বলা হয়।


৮। অ্যাসেম্বলি ভাষায় লিখিত প্রোগ্রামকে মেশিন ভাষায় রূপান্তর করে কোনটি?

ক) কম্পাইলার
খ) ইন্টারপ্রেটার
গ) অ্যাসেম্বলার
ঘ) লিংকার

সঠিক উত্তর: গ) অ্যাসেম্বলার

ব্যাখ্যা: অ্যাসেম্বলার হলো এক ধরণের অনুবাদক প্রোগ্রাম যা অ্যাসেম্বলি ভাষায় লিখিত সোর্স কোডকে মেশিন ভাষায় (অবজেক্ট কোড) রূপান্তর করে।


৯। মেশিন ভাষার সুবিধা কোনটি?

ক) প্রোগ্রাম লেখা সহজ
খ) প্রোগ্রাম দ্রুত নির্বাহ হয়
গ) সব কম্পিউটারে চলে
ঘ) ভুল সংশোধন সহজ

সঠিক উত্তর: খ) প্রোগ্রাম দ্রুত নির্বাহ হয়

ব্যাখ্যা: মেশিন কোড সরাসরি হার্ডওয়্যার বুঝতে পারে বলে কোনো অনুবাদক প্রয়োজন হয় না, ফলে এটি সবচেয়ে দ্রুত গতিতে কাজ করে।


১০। নিচের কোনটি লো-লেভেল (Low Level) ভাষা?

ক) সি++
খ) জাভা
গ) অ্যাসেম্বলি ভাষা
ঘ) পাইথন

সঠিক উত্তর: গ) অ্যাসেম্বলি ভাষা

ব্যাখ্যা: মেশিন ভাষা ও অ্যাসেম্বলি ভাষা হার্ডওয়্যার নির্ভর হওয়ায় এদের লো-লেভেল ভাষা বা নিম্নস্তরের ভাষা বলা হয়।


১১। প্রথম প্রজন্মের ভাষা কোনটি?

ক) মেশিন ভাষা
খ) অ্যাসেম্বলি ভাষা
গ) হাই লেভেল ভাষা
ঘ) অতি উচ্চস্তরের ভাষা

সঠিক উত্তর: ক) মেশিন ভাষা

ব্যাখ্যা: ১৯৪৫ সালে প্রথম প্রজন্মের ভাষা বা মেশিন ভাষার প্রচলন শুরু হয়।


১২। মেশিন ভাষায় ডেটা বা নির্দেশ কোথায় সংরক্ষিত থাকে?

ক) হার্ডডিস্কে
খ) মেমোরি অ্যাড্রেসে
গ) রেজিস্টারে
ঘ) ক্যাশ মেমোরিতে

সঠিক উত্তর: খ) মেমোরি অ্যাড্রেসে

ব্যাখ্যা: মেশিন ভাষায় প্রোগ্রাম লেখার সময় প্রতিটি নির্দেশ ও ডেটার জন্য নির্দিষ্ট মেমোরি অ্যাড্রেস বা ঠিকানা উল্লেখ করতে হয়।


১৩। অ্যাসেম্বলি ভাষার প্রধান অসুবিধা কী?

ক) এটি ধীর গতির
খ) এটি হার্ডওয়্যার নির্ভর
গ) এতে প্রচুর মেমোরি লাগে
ঘ) এটি সহজে বোঝা যায় না

সঠিক উত্তর: খ) এটি হার্ডওয়্যার নির্ভর

ব্যাখ্যা: মেশিন ভাষার মতো অ্যাসেম্বলি ভাষাও এক কম্পিউটারের জন্য লেখা হলে অন্য কম্পিউটারে চলে না, অর্থাৎ এটি পোর্টেবল নয়।


১৪। হেক্সাডেসিমেল কোড ব্যবহার করা হয় কোন ভাষায়?

ক) মেশিন ভাষায়
খ) অ্যাসেম্বলি ভাষায়
গ) উচ্চস্তরের ভাষায়
ঘ) সবগুলোতে

সঠিক উত্তর: ক) মেশিন ভাষায়

ব্যাখ্যা: মেশিন ভাষায় বাইনারি কোড অনেক দীর্ঘ হওয়ায় প্রোগ্রামাররা প্রায়ই হেক্সাডেসিমেল সংখ্যা পদ্ধতিতে কোড লিখতেন যা পরে বাইনারিতে রূপান্তর করা হতো।


১৫। উৎস প্রোগ্রাম (Source Program) কী?

ক) মেশিন ভাষায় লেখা প্রোগ্রাম
খ) মানুষের বোধগম্য ভাষায় লেখা প্রোগ্রাম
গ) বাইনারি কোডে অনূদিত প্রোগ্রাম
ঘ) শুধুমাত্র অ্যাসেম্বলি কোড

সঠিক উত্তর: খ) মানুষের বোধগম্য ভাষায় লেখা প্রোগ্রাম

ব্যাখ্যা: যে কোনো উচ্চতর বা অ্যাসেম্বলি ভাষায় (মেশিন ভাষা ছাড়া) লিখিত প্রোগ্রাম যা মানুষ বুঝতে পারে তাকে সোর্স প্রোগ্রাম বা সোর্স কোড বলা হয়।


১৬। নিচের কোনটি অ্যাসেম্বলি ভাষার নির্দেশ?

i. LDA
ii. MOV
iii. 101010

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: LDA (Load Accumulator) এবং MOV (Move) হলো অ্যাসেম্বলি ভাষার নেমোনিক কোড। ১০১০১০ হলো মেশিন কোড।


১৭। মেশিন ভাষার ক্ষেত্রে প্রযোজ্য—

i. এটি যন্ত্র নির্ভর
ii. প্রোগ্রাম নির্বাহে সময় কম লাগে
iii. প্রোগ্রাম রচনা করা সহজ

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: মেশিন ভাষা যন্ত্র নির্ভর এবং দ্রুত গতির, কিন্তু এতে ০ ও ১ দিয়ে প্রোগ্রাম লেখা অত্যন্ত কঠিন ও সময়সাপেক্ষ।


১৮। অ্যাসেম্বলি ভাষার বৈশিষ্ট্য হলো—

i. নেমোনিক কোড ব্যবহার করা হয়
ii. প্রোগ্রামারকে হার্ডওয়্যার সম্পর্কে জানতে হয়
iii. ডিবাগিং মেশিন ভাষার চেয়ে সহজ

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ঘ) i, ii ও iii

ব্যাখ্যা: অ্যাসেম্বলি ভাষায় নেমোনিক ব্যবহৃত হয়, এটি হার্ডওয়্যার ও মেমোরি অ্যাড্রেস নিয়ে কাজ করে, এবং সংকেত ব্যবহারের ফলে ভুল ধরা (ডিবাগিং) সহজ হয়।


১৯। লো-লেভেল ভাষার অসুবিধা হলো—

i. এক মেশিনের প্রোগ্রাম অন্য মেশিনে চলে না
ii. প্রোগ্রাম লিখতে অনেক সময় লাগে
iii. অনুবাদক প্রোগ্রামের প্রয়োজন হয় না

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: লো-লেভেল ভাষা (মেশিন ও অ্যাসেম্বলি) পোর্টেবল নয় এবং কোড লেখা কঠিন। মেশিন ভাষায় অনুবাদক লাগে না কিন্তু অ্যাসেম্বলিতে লাগে, তাই iii সব ক্ষেত্রে সত্য নয়। তবে লো-লেভেল ভাষার সাধারণ অসুবিধা হিসেবে পোর্টেবিলিটি ও জটিলতাই প্রধান।


নিচের অনুচ্ছেদটি পড়ে ২০ ও ২১ নং প্রশ্নের উত্তর দাও:

রাফিদ এমন একটি প্রোগ্রামিং ভাষা শিখছে যেখানে তাকে 'MOV AX, BX' এবং 'ADD AX, 5' এর মতো কমান্ড লিখতে হয়। তার বন্ধু তাকে বলল, "এই ভাষাটি মেশিন ভাষার চেয়ে উন্নত হলেও আধুনিক সফটওয়্যার তৈরির জন্য খুব একটা সুবিধাজনক নয়।"

২০। উদ্দীপকে রাফিদ কোন প্রজন্মের ভাষা ব্যবহার করছে?

ক) প্রথম
খ) দ্বিতীয়
গ) তৃতীয়
ঘ) চতুর্থ

সঠিক উত্তর: খ) দ্বিতীয়

ব্যাখ্যা: রাফিদ নেমোনিক (MOV, ADD) ব্যবহার করছে যা অ্যাসেম্বলি বা দ্বিতীয় প্রজন্মের ভাষার বৈশিষ্ট্য।


২১। রাফিদের ব্যবহৃত ভাষাটির ক্ষেত্রে কোনটি সঠিক?

ক) এটি মানুষের ভাষার মতো
খ) এটি সরাসরি হার্ডওয়্যার নিয়ন্ত্রণ করতে পারে
গ) এটি সম্পূর্ণ মেশিন স্বাধীন
ঘ) এটিতে ভুল হওয়ার সম্ভাবনা নেই

সঠিক উত্তর: খ) এটি সরাসরি হার্ডওয়্যার নিয়ন্ত্রণ করতে পারে

ব্যাখ্যা: অ্যাসেম্বলি ভাষা হার্ডওয়্যারের মেমোরি ও রেজিস্টার নিয়ে সরাসরি কাজ করতে পারে।


২২। মেশিন ভাষা ও অ্যাসেম্বলি ভাষার মধ্যে মূল পার্থক্য কীসে?

ক) গতির ভিন্নতা
খ) নির্দেশের প্রকৃতি (বিট বনাম নেমোনিক)
গ) ব্যবহারের ক্ষেত্র
ঘ) ফলাফলের নির্ভুলতা

সঠিক উত্তর: খ) নির্দেশের প্রকৃতি (বিট বনাম নেমোনিক)

ব্যাখ্যা: মেশিন ভাষায় ০ ও ১ (বিট) ব্যবহৃত হয়, আর অ্যাসেম্বলি ভাষায় নেমোনিক বা সংকেত ব্যবহৃত হয়—এটিই দৃশ্যমান প্রধান পার্থক্য।


২৩। অপারেশন কোড বা 'Opcode' থাকে কোন অংশে?

ক) ডেটা অংশে
খ) নির্দেশ বা ইনস্ট্রাকশন অংশে
গ) কমেন্ট অংশে
ঘ) লেভেল অংশে

সঠিক উত্তর: খ) নির্দেশ বা ইনস্ট্রাকশন অংশে

ব্যাখ্যা: একটি নির্দেশ বা ইনস্ট্রাকশনের প্রধান অংশ হলো অপারেশন কোড (কী কাজ করতে হবে) এবং অপারেন্ড (কার ওপর কাজ হবে)।


নিচের অনুচ্ছেদটি পড়ে ২৪ ও ২৫ নং প্রশ্নের উত্তর দাও:

একজন প্রোগ্রামার একটি মাইক্রোকন্ট্রোলার চিপের জন্য প্রোগ্রাম লিখছেন। তিনি চিপটির মেমোরি ও প্রসেসর আর্কিটেকচার খুব ভালো বোঝেন এবং সর্বোচ্চ গতি নিশ্চিত করতে চান। এজন্য তিনি এমন একটি ভাষা বেছে নিলেন যা চিপটি সরাসরি বুঝতে পারে।

২৪। প্রোগ্রামার কোন ভাষাটি বেছে নিলেন?

ক) সি
খ) জাভা
গ) মেশিন ভাষা
ঘ) পাইথন

সঠিক উত্তর: গ) মেশিন ভাষা

ব্যাখ্যা: চিপটি সরাসরি বুঝতে পারে এবং সর্বোচ্চ গতি নিশ্চিত করে একমাত্র মেশিন ভাষা।


২৫। প্রোগ্রামারের বেছে নেওয়া ভাষাটির অসুবিধা কী হতে পারে?

ক) প্রোগ্রামটি ধীর গতির হবে
খ) প্রোগ্রামটি লিখতে ও রক্ষণাবেক্ষণ করতে অনেক সময় লাগবে
গ) প্রোগ্রামটি মেমোরি বেশি নেবে
ঘ) অনুবাদক সফটওয়্যার লাগবে

সঠিক উত্তর: খ) প্রোগ্রামটি লিখতে ও রক্ষণাবেক্ষণ করতে অনেক সময় লাগবে

ব্যাখ্যা: মেশিন ভাষায় প্রতিটি বিট খুঁটিয়ে লিখতে হয় বলে এটি অত্যন্ত সময়সাপেক্ষ এবং রক্ষণাবেক্ষণ করা কঠিন।