Foundationপ্রথম নীতি থেকে
LEVEL 3 · CPU Architecture

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-তে থাকা) ওভাররাইট করা যায় — নিরাপত্তার একটা মৌলিক দুর্বলতা।