Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

أهمية السطر الجديد

جزء من قسم الأساسيات في رحلة Assembly على Coddy. الدرس 41 من 45.

لقد كنت تضيف 0x0a (newline) في نهاية السلاسل النصية. ولكن ماذا يحدث إذا نسيت ذلك؟

من دون newline:

تتم طباعة النص، لكن المؤشر يبقى في السطر نفسه. سيظهر أي إخراج لاحق بجانبه مباشرةً.

مثال بدون newline:

section .data
    first db 'Hello'
    firstLen equ $ - first
    second db 'World'
    secondLen equ $ - second

section .text
    mov rax, 1
    mov rdi, 1
    mov rsi, first
    mov rdx, firstLen
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, second
    mov rdx, secondLen
    syscall

الناتج:

HelloWorld

لا توجد مسافة. لا يوجد سطر جديد. كل شيء ملتصق ببعضه.

مع سطر جديد:

section .data
    first db 'Hello', 0x0a
    firstLen equ $ - first
    second db 'World', 0x0a
    secondLen equ $ - second

الناتج:

Hello World

تتم طباعة كل سلسلة نصية في سطر خاص بها.

ما يفعله محرف السطر الجديد:

المحرفASCIIالتأثير
0x0a10ينقل المؤشر إلى بداية السطر التالي

الأخطاء الشائعة في newline:

الخطأالنتيجة
عدم وجود newline إطلاقًايتتابع النص في سطر واحد
وجود newline فقط في نهاية آخر stringتتتابع السلاسل السابقة معًا، بينما ينتقل الأخير إلى السطر التالي
وجود newline في منتصف stringتحدث فواصل أسطر في مواضع غير متوقعة

القاعدة الآمنة:

أضف دائمًا 0x0a في نهاية كل سلسلة نصية تريدها في سطر مستقل.

challenge icon

التحدي

أُعطيتَ ثلاث سلاسل نصية من دون أسطر جديدة. مهمتك هي طباعتها بحيث تظهر في ثلاثة أسطر منفصلة.

السلاسل النصية هي:

السلسلة النصيةالقيمة
word1'Apple'
word2'Banana'
word3'Cherry'

المتطلبات:

  • Define كل سلسلة نصية مع newline (0x0a) في النهاية
  • Calculate طول كل سلسلة نصية تلقائيًا
  • Print السلاسل النصية الثلاث باستخدام write syscall
  • Exit cleanly مع code 0
مطلوب تنسيق الإخراج: [المحتوى المترجم هنا]

جرّب بنفسك

section .data
    ; TODO: عرّف word1 بالنص الأول المدرج في التعليمات وسطر جديد
    ; TODO: عرّف word2 بالنص الثاني المدرج في التعليمات وسطر جديد
    ; TODO: عرّف word3 بالنص الثالث المدرج في التعليمات وسطر جديد
    ; TODO: احسب أطوال كل سلسلة نصية

section .text
    global _start

_start:
    ; TODO: اطبع word1
    ; TODO: اطبع word2
    ; TODO: اطبع word3

    ; TODO: اخرج بشكل نظيف
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: Playground لـ Assembly