5.1.2 · D5 · HinglishInstruction Set Architecture (ISA)

Question bankInstruction formats and encoding

2,624 words12 min read↑ Read in English

5.1.2 · D5 · Hardware › Instruction Set Architecture (ISA) › Instruction formats and encoding


Pehle — ek picture aur jargon refresher (taaki yeh page akela khada reh sake)

Neeche sab kuch yeh assume karta hai ki tum ek 32-bit instruction word dekh sakte ho: 32 choti boxes ki ek row, jisme har ek mein ek bit (0 ya 1) hoti hai. Hum us row ko fields mein kaatte hain — labelled coloured stretches of boxes. Koi bhi question padhne se pehle diagram dekho.

Figure — Instruction formats and encoding

True or false — justify karo

True or false: Ek fixed-length ISA (Instruction Set Architecture) mein, har instruction har field use karta hai.
False. Har instruction same width ka hota hai, lekin ek format fields ko unused chhod sakta hai ya unke bits ko repurpose kar sakta hai (jaise I-type, rs2+funct7 ko 12-bit immediate mein badal deta hai). Fixed width ≠ fixed field usage.
True or false: Opcode hamesha page par pehli cheez likhi hoti hai (sabse baayein bits).
False. RISC-V mein opcode lowest 7 bits mein rehta hai (likhne par sabse daayein), aur decoder wahan padhta hai. "Fixed position" ka matlab fixed hai, zaruri nahi ki leftmost ho — dekho Instruction Decode Stage.
True or false: 32-instruction ISA ko 5-bit opcode chahiye.
Lower bound ke roop mein True: . Lekin real ISAs aksar ek wider primary opcode plus funct sub-fields use karte hain taaki word redesign kiye bina baad mein operations add kar sakein.
True or false: Two's-complement immediates isliye chahiye kyunki subtraction ek alag instruction hai.
False. Yeh isliye chahiye taaki ek single field negative numbers rakh sake (jaise addi x1, x2, -8); top bit sign bit hota hai. Dekho Two's Complement and Sign Extension.
True or false: Variable-length encoding objectively fixed-length se bura hai.
False — yeh ek trade-off hai. Variable (x86) denser code aur better instruction-cache hits deta hai; fixed (RISC-V, MIPS, ARM) fast, parallel decode deta hai. Koi bhi dominant nahi; dekho RISC vs CISC.
True or false: Kyunki R-type aur I-type opcode/rd/funct3/rs1 positions share karte hain, register-read hardware dono ke liye identical ho sakta hai.
True. Formats mein rs1 (aur jahan ho wahan rs2) ko fixed bit positions par rakhne se matlab hai ki Registers and the Register File read ports usi tarah wire hote hain; sirf immediate-assembly logic badalta hai.
True or false: Agar ek ISA mein 128 se kam operations hain, toh 7-bit opcode use karna bits waste karta hai.
Partly false. "Spare" patterns waste nahi hain — yeh future instructions ke liye reserved room hain, aur 7 bits ko tidy rakhta hai. Spare opcode space ek feature hai, leakage nahi.
True or false: U-type aur J-type dono 20-bit immediate lete hain, isliye woh immediate ko same tarah use karte hain.
False. U-type (lui, auipc) apne 20 bits ko seedha ek 32-bit value ke upper part mein rakhta hai (bits 31:12); J-type (jal) apne 20 bits ko ek signed jump offset mein reorder aur scale karta hai. Same width, bahut alag plumbing.
True or false: Ek B-type (branch) instruction mein store kiye gaye immediate bits woh byte offset ke barabar hain jitna CPU jump karta hai.
False. B-type immediate scaled, sign-extended store hota hai, aur uske bits reordered/scattered hote hain. Raw field ko reassemble karna padta hai tab jaake woh real offset banta hai — neeche B-type walkthrough dekho.

Error dhundho

Error dhundho: "Hum sirf register fields ko wide karke aur registers add kar sakte hain, koi aur cost nahi."
rs1/rs2/rd ko wide karna usi fixed word se bits chheenta hai. 32 se 64 registers (5→6 bits) jaane se teen fields mein 3 extra bits lagte hain, immediate ya opcode room shrink ho jaata hai. Budget fixed hai.
Error dhundho: "S-type apna immediate isliye split karta hai kyunki designers lazy the aur unke paas space nahi tha."
Split isliye hai taaki rs1 aur rs2 apni usual positions par rahe. Registers ko fixed rakhna read logic ko simplify karta hai; immediate jo bhi leftover holes hain woh leta hai. Yeh ek deliberate hardware win hai, laziness nahi.
Error dhundho: "add x5,x6,x7 decode karne ke liye, pehle funct7 field padho yeh jaanne ke liye ki yeh add hai."
Decoder pehle opcode (low 7 bits) padhta hai class jaanne ke liye, phir funct3/funct7 us class ke andar add vs sub disambiguate karte hain. Opcode lead karta hai; funct refine karta hai.
Error dhundho: "12-bit signed immediate 0 se 4095 tak represent kar sakta hai."
Yeh unsigned range hai. Signed two's-complement 12 bits se tak cover karta hai — same 4096 patterns, lekin aadhe negative hain kyunki top bit sign bit hai.
Error dhundho: "Sign-extension sirf immediate ko 32 bits tak reach karne ke liye zeros se pad karta hai."
Zero-padding ko ek bada positive number bana deta. Sign-extension sign bit ko naye high bits mein copy karta hai, value preserve karta hai: rehta hai . Dekho Two's Complement and Sign Extension.
Error dhundho: "Kyunki decode opcode instant dhundhta hai, variable-length x86 RISC-V jitni hi fast decode karta hai."
Variable-length encoding mein tum instruction ko locate nahi kar sakte jab tak tum instruction ki length nahi jaante — ek serial dependency. Woh length-finding step woh bottleneck hai jo fixed-length avoid karta hai.
Error dhundho: "funct3 aur funct7 extra opcodes hain, isliye yeh count karte hain ki ISA mein kitne major operations hain."
Yeh sub-selectors hain jo primary opcode budget grow kiye bina ek primary opcode class ke andar operations expand karte hain. Yeh primary opcode budget ek baar spend karke operations multiply karne dete hain.
Error dhundho: "lui (U-type) apna 20-bit immediate ek small number 0–1048575 ke roop mein register mein load karta hai."
lui woh 20 bits bits 31:12 mein rakhta hai aur low 12 bits zero-fill karta hai, isliye value immediate 12 left shift hoti hai — ek badi number, jo ek following addi ke saath mil kar full 32-bit constants banane ke liye use hoti hai.

Why questions

Opcode kyun sabhi formats mein ek fixed bit position par hota hai?
Taaki decoder hamesha yeh kis type ka instruction hai dhundh sake kuch bhi jaanne se pehle, jisse woh decide kar sake ki baaki bits ko kaise interpret karna hai. Fixed opcode position = decode immediately aur parallel mein shuru ho sakta hai.
12-bit immediate ko ALU (Arithmetic Logic Unit) dekhne se pehle 32 bits tak sign-extend kyun karna padta hai?
ALU full 32-bit values par kaam karta hai. Ek 12-bit field ko apna numeric meaning preserve karte hue wide karna padta hai, isliye sign bit replicate hota hai — warna negatives silently bade positives ban jaate.
Opcode ko zyada bits dene se possible immediate range kyun kam hoti hai?
32-bit word ek fixed budget hai. Opcode par spend kiya har bit immediate/register fields ke liye unavailable ho jaata hai, isliye bada opcode directly encode kiye ja sakne wale immediate ka size shrink karta hai.
Variable-length encoding instruction-cache behaviour kyun improve karta hai?
Common tiny operations 4 ki jagah 1 byte mein fit ho jaati hain, isliye programs kam memory occupy karti hain. Denser code matlab same cache mein zyada instructions fit hoti hain, hit rate badhti hai aur memory bandwidth ka bojh kam hota hai.
Ek single rigid instruction layout add, addi, aur jal ke liye achi tarah kyun serve nahi kar sakti?
Unhe alag-alag cheezein chahiye — teen registers vs. do registers plus ek number vs. ek register plus ek bada jump distance. Ek rigid layout ya toh bits waste karta ya immediate space mein short pad jaata, isliye multiple formats same 32 bits ko alag-alag tarah reuse karte hain.
U-type aur J-type dono immediate ko 20 bits kyun dete hain?
Yeh bade values banane ke liye exist karte hain: U-type ek 32-bit constant/address ke high 20 bits set karta hai, aur J-type door ke jump targets tak pahunchta hai. Dono ko rs2 nahi chahiye, isliye woh freed bits ek wide immediate ko de diye jaate hain.
B-type branch immediate scaled (raw byte count ki jagah) kyun store hota hai?
Kyunki valid branch targets hamesha ek aligned instruction boundary par land karte hain, lowest offset bit(s) jaane-maane hote hain ki 0 honge aur unhe store karne ki zarurat nahi — isliye same stored bits se aur door pahuncha ja sakta hai. Caveat: base RV32I mein instructions 4-byte aligned hote hain, isliye true useful step aur bhi coarse hai; spec mein "2 bytes ke units" scaling isliye hai kyunki optional compressed (C) extension 2-byte-aligned instructions allow karta hai. Neeche wala walkthrough scattered bits kaise reassemble hote hain yeh unpack karta hai.
Figure — Instruction formats and encoding

Edge cases

Edge case: Ek ISA mein exactly 1 instruction hai. Kitne opcode bits?
bits — ek cheez ko khud se distinguish karne ke liye koi opcode nahi chahiye. Practice mein tum future growth ke liye bits reserve karte, lekin mathematically zero kaafi hai.
Edge case: Ek ISA mein exactly power of two operations hain, maan lo 64. Opcode width?
bits, koi spare pattern nahi codes mein se har ek assign hai. Ek bhi aur operation add karna 7th bit force karega.
Edge case: Ek signed field vs. ek unsigned field mein all-zeros immediate ka kya matlab hai?
Dono cases mein zero — sign bit 0 hai, isliye signed aur unsigned 0 par agree karte hain. Interpretations tabhi alag hoti hain jab top bit 1 ho.
Edge case: Store ko rs1, rs2, aur ek offset chahiye, lekin word mein koi contiguous 12-bit hole nahi hai. Kya hoga?
Immediate do leftover regions mein split ho jaata hai (S-type), rs1/rs2 fixed rakhte hue. Decoder use karne se pehle scattered pieces ko ek 12-bit value mein reassemble karta hai.
Edge case: Tumhe addi x1, x2, +2048 encode karna hai. Kya yeh 12-bit signed immediate mein fit hoga?
Nahi. Maximum () hai; positive end overflow karta hai. Tumhe ek alag sequence chahiye (jaise lui + addi) — ek real limit jise assemblers tumhare liye handle karte hain.
Edge case: Aur lower bound — kya addi x1, x2, -2049 fit hoga?
Nahi. Sabse negative 12-bit two's-complement value hai; ek step neeche hai aur negative end overflow karta hai. Signed window asymmetric hai: yeh positive () se ek zyada negative () tak pahunchta hai.
Edge case: U-type immediate 20 bits ka hai — lui actually register mein kya value range rakhta hai?
20 bits bits 31:12 fill karte hain, isliye register woh field 12 left shift hoke laata hai: ke multiples, se tak. Yeh upper part set karta hai; low 12 bits zero rehte hain jab tak ek baad ka addi unhe fill na kare.
Edge case: Kya all-zeros 32-bit word hamesha ek illegal/reserved instruction hota hai?
Nahi — yeh ISA par depend karta hai. RISC-V mein opcode 0000000 unassigned hai, isliye ek all-zeros word illegal trap karta hai (zeroed memory mein jump karne ke against ek useful safety net). Lekin doosre ISAs deliberately all-zeros pattern ko NOP (kuch mat karo) define karte hain. Rule ISA-specific hai, universal nahi.

Recall Traps ka one-line summary

Fixed word ek budget hai, opcode anchored hai, immediates signed, asymmetric, aur kabhi kabhi reshaped/reordered hote hain (S, B, U, J), aur fixed-vs-variable ek trade-off hai — zyaatar errors in charon mein se kisi ek ko bhoolne se aate hain.

Wapas jao Instruction formats and encoding.