أهمية السطر الجديد
جزء من قسم الأساسيات في رحلة 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 | التأثير |
|---|---|---|
0x0a | 10 | ينقل المؤشر إلى بداية السطر التالي |
أخطاء شائعة في محارف السطر الجديد:
| الخطأ | النتيجة |
|---|---|
| عدم وجود محرف سطر جديد إطلاقًا | يتصل النص بعضه ببعض في سطر واحد |
| محرف سطر جديد في نهاية السلسلة الأخيرة فقط | تتصل السلاسل السابقة بعضها ببعض، وتنتقل الأخيرة إلى السطر التالي |
| محرف سطر جديد في منتصف سلسلة | تحدث فواصل الأسطر في مواضع غير متوقعة |
القاعدة الآمنة:
أضف دائمًا 0x0a في نهاية كل سلسلة نصية تريدها في سطر مستقل.
التحدي
أُعطيت ثلاثة سلاسل نصية دون أسطر جديدة. مهمتك هي طباعتها بحيث تظهر في ثلاثة أسطر منفصلة.
السلاسل النصية هي:
| السلسلة النصية | القيمة |
|---|---|
word1 | 'Apple' |
word2 | 'Banana' |
word3 | 'Cherry' |
المتطلبات:
- عرّف كل سلسلة نصية مع سطر جديد (
0x0a) في نهايتها - احسب طول كل سلسلة نصية تلقائيًا
- اطبع السلاسل النصية الثلاث باستخدام استدعاء النظام write
- اخرج بشكل سليم بالرمز 0
جرّب بنفسك
section .data
; TODO: عرّف word1 بالنص الأول المذكور في التعليمات ومحرف سطر جديد
; TODO: عرّف word2 بالنص الثاني المذكور في التعليمات ومحرف سطر جديد
; TODO: عرّف word3 بالنص الثالث المذكور في التعليمات ومحرف سطر جديد
; TODO: احسب طول كل سلسلة نصية
section .text
global _start
_start:
; TODO: اطبع word1
; TODO: اطبع word2
; TODO: اطبع word3
; TODO: أنهِ البرنامج بشكل سليم
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
2أنظمة العد
لماذا النظام الثنائي؟الأعداد الثنائيةمن العشري إلى الثنائيلماذا النظام الست عشري؟من الست عشري إلى العشريمن العشري إلى الست عشريASCII والست عشري5استدعاء النظام Exit Syscall
ما هو الـ Syscall؟استدعاء النظام Exit Syscall (60)رموز الخروج (Exit Codes)ملخص: الخروج النظيف (Clean Exit)3التعليمة الأولى - MOV
ما هي MOV؟MOV المباشرةMOV من سجل إلى سجلMOV من الذاكرة إلى السجلMOV من السجل إلى الذاكرةLEA - تحميل العنوانMOV بأحجام مختلفةتدريب: تبديل السجلاتملخص: تحدي MOV6نداء النظام Write
نداء النظام Write (1)واصف الملف (rdi)عنوان الـ Buffer (rsi)عدد البايتات (rdx)تجميع الأجزاء معاًطباعة سلسلتين نصيتينأهمية السطر الجديدمراجعة: إعداد Writeتدرّب بنفسك: Playground لـ Assembly