Foundationপ্রথম নীতি থেকে
LEVEL 3 · Assembly Language

Assembler

অ্যাসেম্বলার

Assembly mnemonic টেক্সট (.s)-কে machine code বিটে রূপান্তরকারী প্রোগ্রাম — প্রায় এক-থেকে-এক, কিন্তু আউটপুট (.o) এখনও অসম্পূর্ণ: external symbol-এর ঠিকানা placeholder থাকে।

Compiler না — কোনো optimization বা high-level সিদ্ধান্ত নেয় না। কাজ যান্ত্রিক: প্রতিটা mnemonic লাইন পড়ে ISA-র official encoding rule অনুযায়ী bit-প্যাটার্ন বসানো।

gcc -S -O0 square.c -o square.s   # compiler: .c → .s (mnemonic টেক্সট)
as square.s -o square.o           # assembler: .s → .o (machine code)

প্রায় এক-থেকে-এক, পুরোপুরি না — কিছু pseudo-instruction/macro নিজেই সম্প্রসারণ করে (RISC-V-তে li a0, 0x123456 আসলে lui+addi-তে ভাঙে, কারণ ফিক্সড ৩২-বিট instruction-এ এত বড় immediate ধরে না)।

Output object file (.o) অসম্পূর্ণ — নিজের ভেতর সংজ্ঞায়িত সবকিছুর ঠিকানা ঠিক, কিন্তু external reference (printf, অন্য ফাইলের function)-এর জন্য শুধু একটা placeholder আর একটা relocation entry (“এখানে পরে ঠিকানা বসাও”)। nm file.o দিয়ে U (undefined) symbol হিসেবে এগুলো দেখা যায়। এই “পরে ঠিক করা”-র দায়িত্ব [[linker]]-এর।

GNU টুলচেইনে as; LLVM-এ llvm-mc। দুটোই একই ধারণা বাস্তবায়ন করে, ভিন্ন বাইনারি।