Assembly Playground
اكتب الأكواد البرمجية، شغّلها وشاركها - بدون أي إعداد.
شغّل Assembly عبر الإنترنت في متصفحك
هذا مترجم Assembly مجاني عبر الإنترنت لكود x86-64 المكتوب بصيغة NASM. اكتب برنامجك واضغط على تشغيل، فيقوم Coddy بتجميعه باستخدام nasm -f elf64، وربطه باستخدام ld، وتشغيل ملف Linux التنفيذي الناتج على الخادم، ثم يعرض لك stdout و stderr وحالة الخروج. لا يوجد ما يُثبَّت: لا NASM، ولا رابط، ولا آلة افتراضية، ولا مترجم متقاطع.
برنامج البداية هو نقطة دخول _start كاملة تقرأ سطرًا من الإدخال القياسي وتكتب تحية باستخدام نداءات النظام الخام read وwrite وexit، دون libc. هكذا يعمل التجميع فعليًا: تنقل الوسائط إلى rax/rdi/rsi/rdx، ثم تستدعي syscall، وتتكفّل النواة بالباقي. استخدم لوحة stdin أسفل المحرر لتزويد برنامجك بالإدخال في كل تشغيل، تمامًا كتوجيه البيانات إلى ملف ثنائي حقيقي.
ما الذي يجعل هذا الـ Assembly playground مفيدًا
- سلسلة أدوات NASM x86-64 حقيقية. يُجمَّع مصدرك باستخدام
nasm -f elf64ويُربَط باستخدامldعلى Linux، وهي الأوامر نفسها التي ستكتبها محليًا، لذا فما يعمل هنا يطابق ما يعمل على جهاز حقيقي. - نداءات نظام Linux مباشرة. يستخدم برنامج البداية
readوwriteوexitعبر تعليمةsyscallدون وجود libc بينها، فترى بالضبط كيف تحمل السجلات الوسائط والقيم المُعادة. - دعم الإدخال القياسي. أرسل وحدات البايت إلى برنامجك عبر لوحة stdin واقرأها بنداء النظام 0، وهو مفيد لتمارين 'اقرأ اسمًا واطبع تحية' الكلاسيكية وما يتجاوزها.
- بلا إعداد، وتغذية راجعة فورية. لا تثبيت لـ NASM، ولا رايات رابط تُحفظ، ولا أخطاء أذونات: افتح الصفحة فيكون المحرر جاهزًا. تعود أخطاء المُجمِّع والرابط مباشرة في المخرجات.
ما الذي يمكنك تجربته في الـ Assembly playground
- اطبع سلسلة نصية ثابتة بنداء نظام
writeواحد، ثمexit(0)نظيف: أصغر برنامج x86-64 كامل، وأسرع طريقة لرؤية كيف يتكامل_startمعsyscall. - اقرأ من stdin إلى مخزن مؤقت من نوع
.bss، وأزل سطر النهاية، ثم أعِد المدخل: النمط الكامن خلف كل تمرين تجميع مبني على الإدخال تقريبًا. - اجمع عددين في السجلات وحوّل الناتج إلى أرقام ASCII يدويًا كي تتمكن من طباعته بـ
write. هكذا تتعلم أن التجميع ليس فيهprint، بل وحدات بايت ونداءات نظام فقط.
الأسئلة الشائعة حول مترجم Assembly عبر الإنترنت
أي مُجمِّع وأي صيغة يستخدمها هذا الـ playground؟
nasm -f elf64 ويُربَط باستخدام ld. إن كنت قادمًا من صيغة AT&T/GAS (أسلوب %rax وmovq)، فأعِد كتابته بأسلوب Intel الخاص بـ NASM: mov rax, 1، section .text، global _start.هل أحتاج إلى تثبيت NASM أو رابط لاستخدام هذا؟
كيف أقرأ الإدخال في التجميع هنا؟
read (رقم 0): ضع 0 في rax (sys_read)، و0 في rdi (stdin)، وعنوان مخزن مؤقت في rsi، والعدد الأقصى للبايتات في rdx، ثم نفّذ syscall. كل ما تكتبه في لوحة stdin أسفل المحرر يُسلَّم إلى برنامجك عند التشغيل. يُظهر برنامج البداية النمط الكامل، بما في ذلك إزالة سطر النهاية.لماذا يحتاج برنامجي إلى _start بدلًا من main؟
ld ودون بيئة تشغيل C. إن main اصطلاح خاص بـ libc، إذ يستدعيه كود بدء التشغيل الخاص بـ C بعد أن يهيّئ الأمور. مع ربط ld مجرد، لا توجد libc، لذا تقفز النواة مباشرة إلى العلامة _start، ولهذا يعرّف كل برنامج هنا global _start. وأنت مسؤول عن الخروج بشكل نظيف عبر نداء النظام exit (رقم 60) في النهاية.هل يمكنني تعلّم التجميع بهذا المترجم حتى لو كنت مبتدئًا؟
أدوات مفيدة لـ Assembly
أدوات مجانية تعمل في المتصفح تتكامل بشكل رائع مع ملعب Assembly البرمجي - جميعها جزء من Coddy.