যান্ত্রিক ভাষা

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

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

বাইনারী সংখ্যা অর্থাৎ শুধুমাত্র 0 এবং 1 এর মাধ্যমে রচিত যে কম্পিউটার প্রোগ্রাম সরাসরি প্রথম প্রজন্মের ভাষা বলতে যান্ত্রিক ভাষাকে বোঝানো হয়। সেন্ট্রাল প্রসেসিং ইউনিট কর্তৃক নির্বাহিত হতে পারে তাকে যান্ত্রিক ভাষা বলে। কম্পিউটারে মৌলিক ভাষা বলতেই যান্ত্রিক ভাষাকে বোঝানো হয়। কম্পিউটারকে প্রদত্ত যে কোন নির্দেশনা যান্ত্রিক ভাষায় পরিবর্তন ব্যতীত নির্বাহ সম্ভব নয়। এ প্রেক্ষিতে এসেম্বলী ভাষা অথবা যে কোন উচ্চতর ভাষায় রচিত কম্পিউটার প্রোগ্রাম যান্ত্রিক ভাষায় রূপান্তরিত হবার মাধ্যমেই নির্বাহ করা হয়। যান্ত্রিক ভাষায় রচিত প্রোগ্রামকে অবজেক্ট প্রোগ্রাম (Object Program) এবং অন্যভাষায় রচিত প্রোগ্রামকে উৎস প্রোগ্রাম (Source Program) বলা হয়। 
কম্পিউটারের প্রোগ্রামিং ভাষার সূচনাতে বাইনারী কোডের মাধ্যমে এই যান্ত্রিক ভাষায় কম্পিউটারকে নির্দেশনা প্রদান করা হলেও এই প্রক্রিয়াটি ছিলো অত্যন্ত কষ্টকর, সময়সাপেক্ষ, ও ত্রুটিপূর্ণ। বাইনারী সংখ্যা মনে রাখা যেহেতু অনেকটা অসম্ভব, সেহেতু প্রোগ্রামিং এর ত্রুটির সম্ভাবনাও বেশি ছিল এবং ত্রুটি সনাক্তকরণও ছিলো অসম্ভব। 
মেশিন ভাষা এবং এসেম্বলী ভাষা যন্ত্রনির্ভর। অর্থাৎ, এক কোম্পানির কম্পিউটারের জন্য মেশিন ভাষা বা মেশিন নির্দেশ ও এসেম্বলী নির্দেশ এক নাও হতে পারে। 
উদাহরণস্বরূপ মেশিন কোড 00000101 দ্বারা সিপিইউ এর নামের প্রসেসর রেজিস্টার এর মান একক হ্রাস করার নির্দেশনা প্রদান করা হয়, যেটি এসেম্বলী ভাষায় DEC B  নির্দেশের মাধ্যমে নির্দেশিত হয়। 
সাধারণত যান্ত্রিক ভাষার নির্দেশ অপারেশন কোড ফিল্ড, J-type (jump), I-type (immediate), R-type (register) এবং function এর সমন্বয়ে গঠিত হতে পারে।  MIPS (32 Bit) আর্কিটেকচার অনুযায়ী register 1 এবং register 2 এ বিদ্যমান মান যোগ করে register 6 এ স্থাপনের জন্য মেশিন ভাষায় 000000 00001 00010 00110 00000 100000   নির্দেশ ব্যবহৃত হয়। 
রেজিস্টার register 3 এ যে মান বিদ্যমান রয়েছে সেটি থেকে থেকে 68 মেমরী সেল (Memory Cell) দূরতে বিদ্যমান মেমরী সেলে রক্ষিত মানটিকে register 8 এ load (সঞ্চালন) করার জন্য  মেশিন ভাষায় 100011 00011 01000 00000 00001 000100 নির্দেশ প্রদান করা হয়। মেমরীর 1024 এড্রেসে Jump করার জন্য ব্যবহৃত মেশিন কোড হল  000010 00000 00000 00000 10000 000000।

## প্রকারভেদ

মেশিন ভাষা এবং এসেম্বলী ভাষায় প্রদত্ত নির্দেশগুলিকে মূলত চারটি ভাগে ভাগ করা যায়-

* গাণিতিক নির্দেশ (Arithmetic Instructions) -  যেমন, যোগ (Addition/Summation), বিয়োগ (Subtraction), গুণ (Multiplication), ভাগ (Division)  
* নিয়ন্ত্রণমূলক  নির্দেশ (Control Instructions) – যেমন, লোড (Load), স্টোর (Store) ও জাম্প (Jump)  
* ইনপুট-আউটপুট নির্দেশ (Input-Output Instructions) – যেমন পড় (Read), লেখ (Write)  
* প্রত্যক্ষ/সরাসরি ব্যবহারমূলক নির্দেশ (Direct Use/Instructions) – যেমন শুরু করা (Start), স্থগিত করা (Halt),  সমাপ্ত করা (End) ইত্যাদি।

## যান্ত্রিক ভাষার সুবিধা

* যেহেতু কম্পিউটার শুধুমাত্র বাইনারী ভাষা বোঝে এবং বাইনারী নির্দেশ সরাসরি নির্বাহ করতে পারে সেজন্য মেশিন ভাষায় রচিত প্রোগ্রাম নির্বাহ সর্বাপেক্ষা দ্রুত। 
* সরাসরি বাইনারীতে লিখিত হওয়ায় মেশিন ভাষায় রচিত প্রোগ্রামের জন্য কোনরূপ পৃথক অনুবাদক (Compiler/Interpreter) প্রয়োজন হয় না।   
* যান্ত্রিক ভাষায় রচিত প্রোগ্রাম সরাসরি বাইনারীতে রচিত হওয়ায় এটি সংরক্ষণে যেমন স্বল্প মেমরী প্রয়োজন তেমনি এটির জন্য পৃথক কোন অনুবাদকের প্রয়োজন না থাকার প্রেক্ষিতে অতিরিক্ত কোন স্মৃতির প্রয়োজন হয় না। 
* কম্পিউটার সিস্টেমের ইলেকট্রনিক সংগঠনের সাথে একমাত্র যান্ত্রিক ভাষা সরাসরি সংযোগ স্থাপন করে বলে কম্পিউটার সিস্টেমের নবতর উদ্ভাবনের ও উৎকর্ষতার জন্য যান্ত্রিক ভাষা অপরিহার্য। 
* কম্পিউটার সিস্টেমের সাথে এর peripheral systems এর সংযোগ বিধানের জন্য যান্ত্রিক ভাষা অত্যাবশ্যকীয়।

## যান্ত্রিক ভাষার সীমাবদ্ধতা

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

## তথ্যসূত্র

বিষয়শ্রেণী:যান্ত্রিক ভাষা