نظرة عامة
يُشكّل مجمّع جنو (as) حجر الأساس في ترجمة شيفرات لغة التجميع إلى ملفات كائنية قابلة للربط. يستعرض هذا الدليل العملي مسار العمل الكامل بدءًا من تهيئة بيئة العمل وحزم البناء الضرورية، مرورًا بتوضيح خيارات سطر الأوامر الحيوية، ووصولًا إلى الربط الثنائي والتحقق من صحة التنفيذ ورموز الخروج في نظام لينكس.
1. تجهيز حزمة binutils والتحقق من جاهزية بيئة المجمّع as
لبدء التعامل مع شيفرات التجميع وتوفير أدوات التطوير الأساسية في بيئة أوبونتو، نحتاج أولًا إلى جلب حزمتي binutils و gcc:

تُشير أداة as إلى مجمّع جنو القياسي (GAS)، ومهمتها الجوهرية هي تحويل تعليمات لغة التجميع النصية إلى بايتات آلة مخزنة ضمن ملف كائني (Object File).
يمكن فحص رقم الإصدار وبنية المعالج المستهدفة المدعومة محليًا باستخدام الخيار --version:
⚙️ [أبرز الخيارات التشغيلية للمجمّع]
-o : تعيين اسم ومسار ملف الكائن الناتج بدقة.-g : تضمين بيانات ورموز التنقيح لتسهيل فحص البرنامج عبر GDB.-a : توليد قائمة تفصيلية تدمج سطور الشيفرة المصدرية بمقابلها من بايتات الآلة.--32 : فرض إنتاج شيفرة متوافقة مع معمارية 32-بت.--64 : فرض إنتاج شيفرة مخصصة لمعمارية 64-بت القياسية.-v أو --version : عرض تفاصيل الإصدار ومعلومات الترخيص للمجمّع.

2. صياغة نموذج تجميع بسيط وبناء الملف الكائني الأولي
كنموذج تطبيقي عملي، سنقوم بإنشاء ملف تجميعي مخصص لمعمارية x86-64 يحمل الاسم exit_code.s ويهدف فقط إلى استدعاء النظام لإيقاف العملية وتمرير رمز الخروج الرقمي 42:

بعد حفظ الملف المصدري، نوجّه المجمّع as لإنتاج الملف الكائني exit_code.o بالاعتماد على الخيار -o:
عند خلو الصياغة من أخطاء القواعد، تكتمل المعالجة بصمت تام دون طباعة رسائل تحذيرية على الطرفية.

للتأكد من توليد الملف الكائني ومعاينة خصائصه وحجمه في المجلد الحالي، نستعرض بياناته عبر أمر القائمة المفصلة ls -l exit_code.o:

3. إدراج رموز التنقيح (-g) واستخراج ملف القوائم التفصيلية (-a)
لتسهيل تتبع تدفق التعليمات وفحص السجلات البرمجية لاحقًا بواسطة أدوات مثل GDB، نقوم بتفعيل معامل التنقيح -g لإنتاج الملف exit_code_debug.o:
سيكتمل التنفيذ بسلاسة ما دامت التعليمات البرمجية متوافقة ومطابقة للمعايير.

يتيح المجمّع إمكانية تحليل مخرجات التحويل بعمق عبر الخيار -a=exit_code.lst، والذي يقوم بتسجيل تقرير مقارنة شامل يتضمن السطور المصدرية وما يقابلها مباشرة من ترميز ثنائي:
يؤدي هذا الإجراء إلى توليد الملف الكائني exit_code.o بمحاذاة ملف السرد exit_code.lst.

لقراءة الأسطر الأولى من هذا الملف الاستعراضي، نستخدم أمر العرض head -n 20 exit_code.lst:
يكشف الناتج بوضوح أرقام الأسطر، والإزاحات النسبية (Offsets)، والتمثيل الست عشري الفعلي للبايتات التي سيفهمها المعالج مباشرة.

4. مرحلة الربط بواسطة ld وإنشاء وتشغيل الملف التنفيذي النهائي
الملفات الكائنية بمفردها غير مهيأة للإقلاع المباشر؛ لذا نستعين برابط النظام ld لربط exit_code.o واستخراج البرنامج التنفيذي المستقل exit_program عبر الأمر ld -o exit_program exit_code.o:
إذا تم حل جميع الرموز بنجاح، يُنشأ الملف التنفيذي دون إخراج أي أخطاء.

نقوم الآن بتشغيل البرنامج المولد مباشرة في سطر الأوامر عبر المسار النسبي ./exit_program:
نظرًا لأن البرنامج يقتصر على إنهاء العملية دون الكتابة إلى مجرى الإخراج القياسي، فلن تظهر نصوص مرئية.

للتحقق من استجابة النظام لنداء الإنهاء والقيمة المسجلة، نستعلم عن حالة الخروج الأخيرة باستخدام الأمر echo "종료 코드: $?":
يُعرض رمز الإرجاع بنجاح في مخرجات الطرفية، مما يؤكد سلامة تدفق التعليمات المنخفضة المستوى التي تم تجميعها وربطها.

قدم هذا الدليل استعراضًا شاملاً لخطوات استخدام مجمّع GNU as داخل بيئة أوبونتو لبناء واختبار برامج لغة التجميع من البداية.
تتيح ممارسة هذه الخطوات ترسيخ فهم آليات المعالجة والتعامل المباشر مع عتاد النظام على أدنى المستويات البرمجية في لينكس.