এই উত্তর বিষয়বস্তু অধিকাংশই মূলত থেকে এসেছিলেন এই উত্তরটি (লিখিত সামনে যে অন্য প্রশ্ন সদৃশ হিসাবে চিহ্নিত করা হয়েছিল)। সুতরাং আমি 8-বিট মানগুলি ব্যবহার করে আলোচনা করব (যদিও এই প্রশ্নটি 32-বিট মান সম্পর্কে জিজ্ঞাসা করেছিল), তবে এটি ঠিক আছে কারণ 8-বিট মানগুলি ধারণাগতভাবে বোঝা সহজ এবং একই ধারণাগুলি 32-বিট পাটিগণিতের মতো বৃহত্তর মানগুলিতে প্রয়োগ হয়।
আপনি যখন 8 টি বিটযুক্ত দুটি সংখ্যা যুক্ত করেন, আপনি পেতে পারেন সর্বাধিক সংখ্যা (0xFF + 0xFF = 1FE)। প্রকৃতপক্ষে, আপনি যদি 8-বিটের দুটি সংখ্যাকে গুণ করেন তবে আপনি যে বৃহত্তম সংখ্যাটি পেতে পারেন (0xFF * 0xFF = 0xFE01) এখনও 16 বিট, 8-বিটের দ্বিগুণ।
এখন, আপনি ধরে নিচ্ছেন যে কোনও এক্স-বিট প্রসেসর কেবল এক্স-বিটের ট্র্যাক রাখতে পারে। (উদাহরণস্বরূপ, একটি 8-বিট প্রসেসর কেবল 8 বিটের ট্র্যাক রাখতে পারে)) এটি সঠিক নয়। 8-বিট প্রসেসর 8 বিট খণ্ডে ডেটা গ্রহণ করে। (এই "খণ্ডগুলিতে" সাধারণত একটি আনুষ্ঠানিক শব্দ থাকে: একটি "শব্দ"--বিট প্রসেসরে 8-বিট শব্দ ব্যবহৃত হয় a৪-বিট প্রসেসরে, bit৪ বিট শব্দ ব্যবহার করা যেতে পারে))
সুতরাং, আপনি যখন কম্পিউটারটি 3 বাইট দেবেন:
বাইট # 1: MUL নির্দেশনা
বাইট # 2: হাই অর্ডার বাইট (যেমন, 0xA5)
বাইট # 3: নিম্ন অর্ডার বাইট (উদাহরণস্বরূপ, 0xCB)
কম্পিউটার একটি ফলাফল তৈরি করতে পারে যে 8 বিট বেশী। সিপিইউ এর মতো ফলাফল তৈরি করতে পারে:
0100 0000 0100 0010 xxxx xxxx xxxx xxxx 1101 0111
ওরফে:
0x4082xxxxD7
এখন, আমি আপনাকে এটির জন্য ব্যাখ্যা করতে পারি:
0x এর অর্থ নীচের সংখ্যাগুলি হেক্সাডেসিমাল।
আমি মুহুর্তে আরও বিশদে "40" আলোচনা করব।
82 "বি" রেজিস্ট্রারের অংশ, এটি 8 টি বিটের একটি সিরিজ।
xx এবং xx "বি" রেজিস্ট্রার এবং "সি" রেজিস্টার নামকরণ করা অন্য দুটি নিবন্ধের অংশ। আমি সেই বিটগুলি জিরো বা একটিতে পূরণ না করার কারণটি হ'ল কোনও "ADD" নির্দেশনা (সিপিইউতে প্রেরণ করা) সেই বিটগুলি নির্দেশের দ্বারা অপরিবর্তিত হতে পারে (যেখানে আমি এই উদাহরণে ব্যবহার করি এমন অন্যান্য বিটগুলির মধ্যে বেশিরভাগই হতে পারে) কিছু পতাকা বিট বাদে পরিবর্তন করুন)।
ডি 7 আরও বিটগুলিতে ফিট হবে, যাকে "ডি" রেজিস্টার বলা হয়।
একটি রেজিস্টার কেবল মেমরির এক টুকরো। রেজিস্টারগুলি সিপিইউতে অন্তর্নির্মিত হয়, সুতরাং সিপিইউ একটি র্যাম স্টিকের সাথে মেমরির সাথে যোগাযোগ করার প্রয়োজন ছাড়াই নিবন্ধগুলি অ্যাক্সেস করতে পারে।
সুতরাং 0xA5 বার 0xCB এর গাণিতিক ফলাফল 0x82D7 হয়।
এখন, বিটগুলি কেন এ এবং বি রেজিস্টারের পরিবর্তে এ এবং ডি রেজিস্টারে বিভক্ত হয়ে গেল, বা সি এবং ডি নিবন্ধকের? ঠিক আছে, আবারও, এটি একটি নমুনা দৃশ্যাবলী যা আমি ব্যবহার করছি, এটি আসল সমাবেশের ভাষায় (ইন্টেল x86 16-বিট, যেমন ইন্টেল 8080 এবং 8088 এবং অনেকগুলি নতুন সিপিইউ দ্বারা ব্যবহৃত হয়েছে) ধারণার পরিবর্তে অনুরূপ হতে পারে। কিছু সাধারণ নিয়ম থাকতে পারে যেমন "গ" রেজিস্টার সাধারণত গণনা কার্যক্রমের জন্য সূচক হিসাবে ব্যবহৃত হয় (লুপগুলির জন্য সাধারণত), এবং মেমরির অবস্থানগুলি নির্দিষ্ট করতে সহায়তা করে এমন অফসেটগুলি ট্র্যাক রাখতে "বি" রেজিস্টার ব্যবহার করা হয়। সুতরাং, কিছু সাধারণ পাটিগণিত ফাংশনগুলির জন্য "এ" এবং "ডি" বেশি সাধারণ হতে পারে।
প্রতিটি সিপিইউ নির্দেশে কিছু ডকুমেন্টেশন থাকা উচিত, যারা বিধানসভায় প্রোগ্রাম করেন তাদের দ্বারা ব্যবহৃত হয়। এই দস্তাবেজগুলিতে প্রতিটি নির্দেশের দ্বারা নিবন্ধগুলি কীভাবে ব্যবহৃত হবে তা নির্দিষ্ট করা উচিত। (সুতরাং ব্যবহারের জন্য নিবন্ধগুলি সম্পর্কে যে পছন্দটি ব্যবহার করা হয় তা প্রায়শই সিপিইউর ডিজাইনারদের দ্বারা নির্দিষ্ট করা হয়, এসেম্বলি ভাষার প্রোগ্রামাররা নয় Although যদিও, কিছুটা নমনীয়তা থাকতে পারে))
এখন, উপরের উদাহরণে "40" এ ফিরে আসার: এটি বিটগুলির একটি সিরিজ যা প্রায়শই "পতাকা নিবন্ধক" নামে পরিচিত। পতাকা নিবন্ধের প্রতিটি বিটের একটি নাম রয়েছে। উদাহরণস্বরূপ, সেখানে একটি "ওভারফ্লো" বিট রয়েছে যা ফলাফলের একটি বাইট সঞ্চয় করতে পারে এমন ফলাফলের চেয়ে বড় যদি সিপিইউ সেট করতে পারে। ("ওভারফ্লো" বিটটি প্রায়শই "অফ" এর সংক্ষিপ্ত নাম দ্বারা উল্লেখ করা যেতে পারে That's এটি একটি মূলধন ও, শূন্য নয়)) সফ্টওয়্যার এই পতাকাটির মূল্য পরীক্ষা করতে পারে এবং "সমস্যা" লক্ষ্য করতে পারে। এই বিটটির সাথে কাজ করা প্রায়শই উচ্চ-স্তরের ভাষাগুলি দ্বারা অদৃশ্যভাবে পরিচালনা করা হয়, সুতরাং প্রারম্ভিক প্রোগ্রামাররা প্রায়শই কীভাবে সিপিইউ ফ্ল্যাগগুলির সাথে ইন্টারেক্ট করবেন সে সম্পর্কে শিখেন না। যাইহোক, অ্যাসেম্বলি প্রোগ্রামাররা সাধারণত অন্য কয়েকটি ভেরিয়েবলের সাথে অনুরূপভাবে এই পতাকাগুলির কয়েকটি অ্যাক্সেস করতে পারে।
উদাহরণস্বরূপ, আপনার একাধিক এডিডি নির্দেশনা থাকতে পারে। একটি এডিডি নির্দেশাবলী এ রেজিস্টার এবং ডি রেজিস্টারে ফলাফলের 16 বিট সংরক্ষণ করতে পারে, অন্য নির্দেশটি কেবল এ রেজিস্টারে 8 টি বিট সংরক্ষণ করতে পারে, ডি রেজিস্টারকে উপেক্ষা করবে এবং ওভারফ্লো বিটটি নির্দিষ্ট করবে। তারপরে, পরে (প্রধান র্যামে এ রেজিস্টারের ফলাফলগুলি সংরক্ষণ করার পরে), আপনি অন্য একটি এডিডি নির্দেশিকা ব্যবহার করতে পারেন যা কোনও রেজিস্টারে মাত্র 8 টি উচ্চ বিট সংরক্ষণ করে (সম্ভবত এ রেজিস্টার)) আপনাকে ওভারফ্লো পতাকা ব্যবহার করতে হবে কিনা আপনি কোন গুণটি নির্দেশ ব্যবহার করেন তার উপর নির্ভর করুন।
(সাধারণত একটি "আন্ডারফ্লো" পতাকাও রয়েছে, যদি আপনি পছন্দসই ফলাফলের সাথে মানানসই পরিমাণের বেশি বিয়োগ করেন))
কীভাবে জটিল জিনিস পেল তা আপনাকে কেবল তা দেখানোর জন্য:
ইন্টেল 4004 4 বিট সিপিইউ
ছিল ইন্টেল 8008 একটি 8-বিট সিপিইউ ছিল। এটিতে A, B, C এবং D. নামে 8-বিট রেজিস্টার
ছিল The ইন্টেল 8086 একটি 16-বিট সিপিইউ ছিল। এটিতে এএক্স, বিএক্স, সিএক্স এবং ডিএক্স নামের ১ 16-বিট রেজিস্টার ছিল।
ইন্টেল 80386 একটি 32-বিট সিপিইউ ছিল। এটিতে EAX, EBX, ECX, এবং EDX নামে 32-বিট রেজিস্টার ছিল।
ইন্টেল x64 সিপিইউতে রেএক্স, আরবিএক্স, আরসিএক্স, এবং আরডিএক্স নামে 64৪-বিট রেজিস্টার রয়েছে। X64 চিপগুলি 16-বিট কোড চালাতে পারে (কিছু অপারেটিং মোডে), এবং 16-বিট নির্দেশাবলী ব্যাখ্যা করতে পারে। এটি করার সময়, বিটস যা এক্স রেজিস্টার তৈরি করে সেগুলি ইএএক্স নিবন্ধকৃত বিটগুলির অর্ধেক বিট, যা বিএক্স রেজিস্টারকে অর্ধেক করে তোলে। সুতরাং যে কোনও সময় আপনি AX এর মান পরিবর্তন করেন, আপনি EAX এবং RAXও পরিবর্তন করছেন, কারণ AX দ্বারা ব্যবহৃত বিটগুলি RAX দ্বারা ব্যবহৃত বিটের অংশ। (আপনি যদি 65,536 এর একাধিক মানের দ্বারা EAX পরিবর্তন করেন তবে নিম্ন 16 বিটগুলি অপরিবর্তিত রয়েছে যাতে AX পরিবর্তন হবে না you ।)
আমি উল্লেখ করেছি কেবল তার চেয়ে বেশি পতাকা এবং নিবন্ধ রয়েছে। একটি সাধারণ ধারণাগত উদাহরণ দেওয়ার জন্য আমি সাধারণভাবে ব্যবহৃত কয়েকটি বেছে নিয়েছি।
এখন, আপনি যদি 8-বিট সিপিইউতে থাকেন, আপনি যখন মেমোরিতে লিখেন, আপনি 8 বিটগুলির ঠিকানা উল্লেখ করতে সক্ষম হবেন সম্পর্কে কিছু নিষেধাজ্ঞাগুলি পেতে পারেন, 4 বিট বা 16 বিটের কোনও ঠিকানা নয়। সিপিইউর উপর ভিত্তি করে বিশদগুলি পৃথক হবে, তবে আপনার যদি এই ধরনের বিধিনিষেধ থাকে তবে সিপিইউ 8-বিট শব্দের সাথে কথা বলছে, এ কারণেই সিপিইউকে সাধারণত "8-বিট সিপিইউ" বলা হয়।