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

Opcode

অপকোড

একটা instruction-এর সেই বিট-ফিল্ড যা বলে দেয় কোন operation করতে হবে — RV32I-তে সবসময় bit[6:0], funct3/funct7 দিয়ে আরও সূক্ষ্ম variant নির্বাচিত হয়।

also: op code, operation code

RV32I-এ opcode instruction[6:0] — মাত্র ৭ বিট, ১১টা distinct মান ব্যবহৃত (128-এর মধ্যে)। বাকি সূক্ষ্মতা funct3/funct7-এ:

0110011 → R-type (OP)     — add/sub/and/or/xor/... (funct3+funct7 আলাদা করে)
0010011 → I-type (OP-IMM) — addi/andi/ori/...
0000011 → I-type (LOAD)   — lb/lh/lw/lbu/lhu
0100011 → S-type (STORE)  — sb/sh/sw
1100011 → B-type (BRANCH) — beq/bne/blt/bge/...
0110111 → U-type (LUI)
1101111 → J-type (JAL)

নিচের ২ বিট সবসময় 11 — RV32I-এর ৩২-বিট instruction চেনার নিশানা; ঐচ্ছিক “C” (compressed) extension-এর ১৬-বিট instruction-এ কখনো 11 হয় না, তাই decoder পুরো instruction পড়ার আগেই length জানে।

কেন opcode একা যথেষ্ট না: add আর sub একই opcode (0110011) শেয়ার করে — পার্থক্য শুধু funct7 bit 30-এ (0000000 বনাম 0100000)। এই দুই-স্তরের control (ALU-design লেসনের ALUOp+funct-এর মতোই) opcode ফিল্ডকে ছোট রেখেও instruction সংখ্যা বহুগুণ বাড়ানো সম্ভব করে।

x86-64-এ opcode ১-৩ byte, variable — RV32I-এর ফিক্সড ৭-বিট opcode-এর ঠিক বিপরীত ট্রেড-অফ: compact কোড কিন্তু জটিল decode।