কেন আমাদের সমাবেশের ভাষা দরকার?
ঠিক আছে, আসলে আমাদের কেবলমাত্র একটি ভাষার প্রয়োজন হবে , যাকে বলা হয় "মেশিন ল্যাঙ্গুয়েজ" বা "মেশিন কোড"। দেখে মনে হচ্ছে:
0010000100100011
আপনার কম্পিউটার সরাসরি কথা বলতে পারে এমন একমাত্র ভাষা এটি। এটি সিপিইউ যে ভাষায় কথা বলে (এবং প্রযুক্তিগতভাবে, বিভিন্ন ধরণের সিপিইউ বিভিন্ন সংস্করণ বলে) is এটি দেখার চেষ্টা করেও বোঝার চেষ্টা করে।
ভাগ্যক্রমে, বাইনারি প্রতিটি বিভাগ একটি নির্দিষ্ট অর্থের সাথে মিলে যায়। এটি বিভিন্ন বিভাগে বিভক্ত:
0010|0001|0010|0011
operation type source register other source destination register
0010 0001 0010 0011
এই মানগুলির সাথে মিল:
operation type 0010 = addition
source register 0001 = register 1
other source 0010 = register 2
destination register 0011 = register 3
সুতরাং এই ক্রিয়াকলাপটি নিবন্ধগুলিতে 1 এবং 2 সংখ্যা যুক্ত করবে এবং 3 টি রেজিস্টারে এই মানটি যুক্ত করবে যদি আপনি আক্ষরিক অর্থে এই মানগুলিকে একটি সিপিইউতে রেখে "যান" বলে থাকেন তবে এটি আপনার জন্য দুটি সংখ্যা যুক্ত করবে। অপারেশন "বিয়োগ" এখানে 0010 এর পরিবর্তে একটি 0011 বা কিছু হতে পারে। যে কোনও মানই সিপিইউকে বিয়োগ করে তুলবে।
সুতরাং কোনও প্রোগ্রাম এর মতো দেখতে পারা যায় (এটি বোঝার চেষ্টা করবেন না, যেহেতু আমি জিনিসগুলি ব্যাখ্যা করার জন্য মেশিন কোডের এই বিশেষ সংস্করণটি তৈরি করেছি):
instruction 1: 0010000100100011
instruction 2: 0011000110100100
instruction 3: 0101001100010111
instruction 4: 0010001001100000
এই পড়া কি স্তন্যপান? স্পষ্টভাবে. তবে সিপিইউর জন্য আমাদের এটি দরকার । ঠিক আছে, যদি প্রতিটি মেশিন কোড একটি নির্দিষ্ট ক্রিয়াটির সাথে মিলে যায় তবে কেবল একটি সহজ "ইংলিশ" শর্টহ্যান্ড তৈরি করতে দেয় এবং তারপরে আমরা প্রোগ্রামটি কী করছে তা বুঝতে পারলে, এটি বাস্তব বাইনারি মেশিন কোডে রূপান্তরিত করে সিপিইউতে চালানোর জন্য দেয় to
সুতরাং উপরে থেকে আমাদের মূল নির্দেশটি দেখতে পাওয়া যেতে পারে:
(meaning) operation type source register other source destination register
(machine code) 0010 0001 0010 0011
("English") add r1 r2 r3
দ্রষ্টব্য যে এই ইংরেজী সংস্করণটিতে মেশিন কোডে সঠিক ম্যাপিং রয়েছে । সুতরাং যখন আমরা এই "ইংরাজী" এর একটি লাইন লিখি, আমরা সত্যিই কেবল বন্ধুত্বপূর্ণ এবং আরও বোধগম্য মেশিন কোডটি লিখছি।
ঠিক আছে, এটি সমাবেশ ভাষা। এ কারণেই এটি বিদ্যমান এবং কেন এটি মূলত তৈরি হয়েছিল।
আমাদের এখনই এটি কেন প্রয়োজন তা বোঝার জন্য, উপরের উত্তরগুলি পড়ুন, তবে এটি বোঝার মূল কীটি হ'ল: উচ্চ স্তরের ভাষাগুলির একটির প্রতিনিধিত্ব নেই মেশিন কোড। সি, বা পাইথন বা যা কিছুতে যেমন:
z = x + y
এটি উপরের থেকে আমাদের সংযোজনের মতো শোনাচ্ছে, ধরে নিচ্ছি x
যে নিবন্ধ 1 এ আছে, y
2 রেজিস্টারে রয়েছে, এবং z
3 টি রেজিস্টারে শেষ হওয়া উচিত? তবে এই লাইনের কী হবে?
z = x * 2 + (y / 6) * p + q - r
বাইনারি 16 বিট মধ্যে যে লাইন প্রতিনিধিত্ব এবং একটি সিপিইউ "যেতে" বলার চেষ্টা করুন । আপনি পারবেন না। মেশিন কোডে একটি যোগ, বিয়োগ এবং আরও একবারে 4 বা 5 ভেরিয়েবলগুলি সম্পাদন করার কোনও একক ক্রিয়াকলাপের নির্দেশনা নেই। সুতরাং এটি প্রথমে মেশিন কোডের ক্রমে রূপান্তর করতে হবে । আপনি যখন উচ্চ স্তরের ভাষা "সংকলন" বা "ব্যাখ্যা" করেন তখন আপনি এটি করেন।
ঠিক আছে, আমাদের এটি করার প্রোগ্রাম রয়েছে, তবে এখন কেন আমাদের সমাবেশ প্রয়োজন? বলুন আপনার প্রোগ্রামটি আপনার প্রত্যাশার চেয়ে ধীর গতিতে চলছে এবং কেন তা আপনি জানতে চান। এই লাইনের মেশিন ল্যাঙ্গুয়েজ "আউটপুট" দেখে মনে হচ্ছে এটি দেখতে:
1010010010001001
0010001000010000
0110010000100100
0010001011000010
0010100001000001
0100010100000001
0010010101000100
0010101010100000
0000100111000010
পাইথনের সেই এক লাইনের কাজ শেষ করতে। সুতরাং আপনি কি সত্যিই এটি ডিবাগ করতে চান?!?!?! কোন । বরং, আপনি আপনার কম্পাইলার জিজ্ঞাসা কল্যাণকামী আপনি আকারে আউটপুট, সমাবেশ ভাষা সংশ্লিষ্ট সংস্করণ যা আপনি আসলে সহজে বুঝতে পারেন দিতে ঠিক যে মেশিন কোড করতে। তারপরে আপনি নির্ধারণ করতে পারেন যে আপনার সংকলক বোবা কিছু করছে এবং এটি ঠিক করার চেষ্টা করছে।
(@ রাফেলের পরামর্শের অতিরিক্ত নোট: আপনি আসলে সিপিইউগুলি তৈরি করতে পারেন যা বাইনারি কোড ব্যতীত অন্যান্য জিনিস যেমন টেরিনারি (বেস 3) বা দশমিক কোড, বা এএসসিআইআই এর সাথে কাজ করে practical বাস্তবিক উদ্দেশ্যে যদিও আমরা বাইনারিতে আটকেছি))