أهمية السطر الجديد
جزء من قسم الأساسيات في رحلة 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 بالنص 1st المذكور في التعليمات، متبوعًا بسطر جديد
; TODO: عرّف word2 بالنص 2nd المذكور في التعليمات، متبوعًا بسطر جديد
; TODO: عرّف word3 بالنص 3rd المذكور في التعليمات، متبوعًا بسطر جديد
; 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