Menu
CoddyTech
flag Ar iconالعربيةdown icon

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

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

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

من دون سطر جديد:

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

مثال من دون سطر جديد:

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ينقل المؤشر إلى بداية السطر التالي

أخطاء شائعة في السطر الجديد:

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

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

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

challenge icon

التحدي

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

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

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

المتطلبات:

  • عرّف كل سلسلة نصية مع سطر جديد (0x0a) في نهايتها
  • احسب طول كل سلسلة نصية تلقائيًا
  • اطبع السلاسل النصية الثلاث باستخدام استدعاء النظام write
  • اخرج بشكل سليم بالرمز 0

جرّب بنفسك

section .data
    ; TODO: عرّف word1 بالنص 1st المذكور في التعليمات، متبوعًا بسطر جديد
    ; TODO: عرّف word2 بالنص 2nd المذكور في التعليمات، متبوعًا بسطر جديد
    ; TODO: عرّف word3 بالنص 3rd المذكور في التعليمات، متبوعًا بسطر جديد
    ; TODO: احسب طول كل سلسلة نصية

section .text
    global _start

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

    ; TODO: اخرج بطريقة سليمة
quiz iconاختبر نفسك

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

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

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