Program Counter
প্রোগ্রাম কাউন্টার
পরবর্তী execute হতে যাওয়া instruction-এর memory address ধরে রাখা register। প্রতিটা fetch-এ instruction-দৈর্ঘ্য পরিমাণ বাড়ে; branch/jump/call নিলে ভিন্ন address-এ লাফায়।
also: PC, Instruction Pointer, instruction pointer, rip
হার্ডওয়্যার হিসেবে PC ঠিক একটা সাধারণ register-এর মতোই — একই flip-flop + write-enable কাঠামো। পার্থক্যটা গঠনে না, ব্যবহারে: control unit স্বয়ংক্রিয়ভাবে প্রতিটা fetch cycle-এ এটা পড়ে ও আপডেট করে, আর সাধারণ arithmetic instruction-এর destination হিসেবে ব্যবহৃত হয় না।
স্বাভাবিক বৃদ্ধি:
- Fixed-length ISA-তে (RISC-V, ARM64):
PC ← PC + 4, নিঃশর্তভাবে — প্রতিটা instruction ঠিক ৪ byte বলে decode ছাড়াই জানা যায়। - Variable-length ISA-তে (x86-64, নাম
rip):PC ← PC + (এই instruction-এর প্রকৃত byte-length)— যেটা জানতে আগে decode লাগে।
Branch/jump/call-এ ব্যতিক্রম: একটা MUX (control unit-নিয়ন্ত্রিত)
PC-র পরের মান বাছাই করে তিন সম্ভাব্য উৎস থেকে — sequential (PC+4
বা PC+length), branch target (taken হলে), বা একটা register/stack
থেকে পড়া return address (RET-এ)।
RISC-V/ARM64-এ dedicated link register (ra/x30) থাকায় leaf
function-এর return address stack ছোঁয়াই লাগে না — সরাসরি register
থেকে PC-তে যায়। x86-64-এ CALL/RET সবসময় stack ব্যবহার করে।
Buffer overflow bug PC-কে হাইজ্যাক করতে পারে যদি return address (memory-তে থাকা) ওভাররাইট করা যায় — নিরাপত্তার একটা মৌলিক দুর্বলতা।