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

لا توجد مسافة. لا يوجد سطر جديد (newline). كل شيء مدمج معًا.

مع سطر جديد:

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

المخرجات:

Hello World

تُطبع كل سلسلة نصية على سطر منفصل.

ما الذي يفعله السطر الجديد (newline):

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

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

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

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

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

challenge icon

التحدي

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

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

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

المتطلبات:

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

جرّب بنفسك

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

section .text
    global _start

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

    ; TODO: اخرج بشكل نظيفsection .data
    word1 db 'Apple', 0x0a
    word1Len equ $ - word1
    word2 db 'Banana', 0x0a
    word2Len equ $ - word2
    word3 db 'Cherry', 0x0a
    word3Len equ $ - word3

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, word1
    mov rdx, word1Len
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, word2
    mov rdx, word2Len
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, word3
    mov rdx, word3Len
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconاختبر نفسك

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

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