উত্তর:
কোডের ঘনত্বটি কোনও অনুরোধিত ক্রিয়া সম্পাদন করতে কত মাইক্রোপ্রসেসর নির্দেশিকা গ্রহণ করে এবং প্রতিটি নির্দেশিকা কতটা জায়গা নেয় তা শিথিলভাবে উল্লেখ করে। সাধারণভাবে বলতে গেলে কোনও নির্দেশিকা যত কম জায়গা নেয় এবং কোনও মাইক্রোপ্রসেসর যে নির্দেশনা তত বেশি কাজ করতে পারে তার কোডটি তত বেশি ঘন হয়।
আমি লক্ষ্য করেছি যে আপনি আপনার প্রশ্নটিকে 'বাহু' ট্যাগ দিয়ে ট্যাগ করেছেন; আমি এআরএম নির্দেশাবলী ব্যবহার করে কোড ঘনত্ব চিত্রিত করতে পারি।
ধরা যাক আপনি মেমরির এক স্থান থেকে অন্য জায়গায় ডেটা ব্লকের অনুলিপি করতে চান। ধারণাগতভাবে, আপনার উচ্চ স্তরের কোডটি এর মতো দেখতে লাগবে:
void memcpy(void *dest, void *source, int count_bytes)
{
char *s, *d;
s = source; d = dest;
while(count_bytes--) { *d++ = *s++; }
}
এখন সাধারণ মাইক্রোপ্রসেসরের জন্য একটি সাধারণ সংকলক এটিকে নিম্নলিখিতগুলির মতো কিছুতে রূপান্তর করতে পারে:
movl r0, count_bytes
movl r1, s
movl r2, d
loop: ldrb r3, [r1]
strb [r2], r3
movl r3, 1
add r1, r3
add r2, r3
sub r0, r3
cmp r0, 0
bne loop
(আমার এআরএম কিছুটা মরিচা, তবে আপনি ধারণাটি পাবেন)
এখন এটি একটি খুব সাধারণ সংকলক এবং খুব সাধারণ মাইক্রোপ্রসেসর হবে তবে আপনি উদাহরণ থেকে দেখতে পারবেন যে আমরা লুপটির পুনরাবৃত্তির জন্য 8 টি নির্দেশনা দেখছি (7 যদি আমরা '1' কে অন্য রেজিস্টারে স্থানান্তরিত করি এবং বোঝা সরিয়ে নিই) লুপ বাইরে)। আসলেই মোটেও ঘন নয়। কোডের ঘনত্বও কার্য সম্পাদনকে প্রভাবিত করে; কোডটি ঘন না হওয়ার কারণে যদি আপনার লুপগুলি দীর্ঘ হয় তবে লুপটি ধরে রাখতে আপনার আরও নির্দেশের ক্যাশে লাগতে পারে। আরও ক্যাশে মানে আরও ব্যয়বহুল প্রসেসর, তবে আবার জটিল নির্দেশনা ডিকোডিংয়ের অর্থ অনুরোধকৃত নির্দেশটি বোঝার জন্য আরও বেশি ট্রানজিস্টর থাকে, সুতরাং এটি একটি সর্বোত্তম প্রকৌশল সমস্যা।
এআরএম এই ক্ষেত্রে খুব সুন্দর। প্রতিটি নির্দেশ শর্তসাপেক্ষ হতে পারে, বেশিরভাগ নির্দেশাবলী রেজিস্টরের মান বৃদ্ধি বা হ্রাস করতে পারে এবং বেশিরভাগ নির্দেশাবলী allyচ্ছিকভাবে প্রসেসরের পতাকাগুলি আপডেট করতে পারে। এআরএমে এবং একটি পরিমিতরূপে দরকারী সংকলক সহ, একই লুপটি দেখতে এরকম কিছু দেখতে পারে:
movl r0, count_bytes
movl r1, s
movl r2, d
loop: ldrb r3, [r1++]
strb [r2++], r3
subs r0, r0, 1
bne loop
আপনি দেখতে পাচ্ছেন, মূল লুপটি এখন 4 টি নির্দেশাবলী। কোডটি আরও ঘন কারণ মূল লুপের প্রতিটি নির্দেশই আরও বেশি করে। এর অর্থ সাধারণত যে আপনি প্রদত্ত পরিমাণ মেমরি দিয়ে আরও কিছু করতে পারেন, কারণ এর কম অংশটি কীভাবে কার্য সম্পাদন করতে হয় তা বর্ণনা করতে ব্যবহৃত হয়।
এখন নেটিভ এআরএম কোডে প্রায়শই অভিযোগ ছিল যে এটি অতি ঘন নয়; এটি দুটি মূল কারণের কারণে: প্রথমত, 32 বিটগুলি একটি ভয়ঙ্কর "দীর্ঘ" নির্দেশনা, তাই সহজ নির্দেশাবলীর জন্য প্রচুর পরিমাণে বিটগুলি নষ্ট হয়ে যায় বলে মনে হয় এবং দ্বিতীয়ত, এআরএমের প্রকৃতির কারণে কোডটি ফুলে যায়: প্রতিটি নির্দেশ 32 টি বিট দীর্ঘ, ব্যতিক্রম ছাড়া। এর অর্থ হ'ল এখানে 32-বিট আক্ষরিক মানগুলির একটি বিশাল সংখ্যা রয়েছে যা আপনি কেবল একটি রেজিস্টারটিতে লোড করতে পারবেন না। যদি আমি "0x12345678" আর-তে লোড করতে চাইতাম, তবে আমি কীভাবে এমন একটি নির্দেশকে কোড করব যেটিতে কেবল 0x12345678 নেই, তবে "আরএলকে আর -0 লোড করুন" এর বর্ণনাও দেওয়া আছে? প্রকৃত ক্রিয়াকলাপটি কোড করার জন্য কোনও বিট নেই। এআরএম লোডের আক্ষরিক নির্দেশ একটি আকর্ষণীয় ছোট্ট জন্তু এবং এআরএম এসেম্ববলারও অবশ্যই সাধারণ এসেম্বেবলারদের চেয়ে কিছুটা স্মার্ট হতে হবে, কারণ এটি "ধরা" দিতে হয়
যাইহোক, এই অভিযোগগুলির উত্তর দিতে, এআরএম থাম্ব মোড নিয়ে এসেছিল। প্রতি নির্দেশে 32 বিটের পরিবর্তে, নির্দেশের দৈর্ঘ্য এখন প্রায় সমস্ত নির্দেশাবলীর জন্য 16 বিট এবং শাখার জন্য 32 বিট। থাম্ব মোডের সাথে কয়েকটি ত্যাগ ছিল, তবে এবং বৃহত্তর এই ত্যাগগুলি করা সহজ ছিল কারণ থাম্ব আপনাকে কেবলমাত্র নির্দেশের দৈর্ঘ্য হ্রাস করে কোডের ঘনত্বের 40% উন্নতির মতো কিছু পেয়েছিল।
কোনও নির্দেশের সেটটির "কোড ঘনত্ব" হ'ল একটি পরিমাপ যা আপনি প্রদত্ত পরিমাণ প্রোগ্রাম মেমোরিতে পেতে পারেন বা প্রোগ্রাম মেমরির কতগুলি বাইট আপনাকে প্রদত্ত পরিমাণ কার্যকারিতা সঞ্চয় করতে হবে।
অ্যান্ড্রু কোহলস্মিথ যেমন উল্লেখ করেছেন, এমনকি একই এমসিইউতেও বিভিন্ন সংকলক বিভিন্ন কোডের ঘনত্ব পেতে পারেন।
আপনি মিরো সামেকের "কম্পিউটার ওয়ার্ল্ডের কীটপতঙ্গ" পড়ে উপভোগ করতে পারেন , যা বিভিন্ন MCUs এর সাথে তুলনা করে।