Menu
Coddy logo textTech
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) في نهايتها
  • احسب طول كل سلسلة نصية تلقائياً
  • اطبع السلاسل الثلاث جميعاً باستخدام syscall الخاص بـ write
  • قم بالخروج بشكل نظيف مع الكود 0

جرّب بنفسك

section .data
    ; مهام: تعريف word1 بـ 'Apple' وسطر جديد
    ; مهام: تعريف word2 بـ 'Banana' وسطر جديد
    ; مهام: تعريف word3 بـ 'Cherry' وسطر جديد
    ; مهام: حساب أطوال كل سلسلة نصية

section .text
    global _start

_start:
    ; مهام: طباعة word1
    ; مهام: طباعة word2
    ; مهام: طباعة word3

    ; مهام: الخروج بشكل نظيف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اختبر نفسك

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

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