أهمية السطر الجديد
جزء من قسم الأساسيات في رحلة 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
لا توجد مسافة. لا يوجد سطر جديد. كل شيء ملتصق ببعضه.
مع سطر جديد:
section .data
first db 'Hello', 0x0a
firstLen equ $ - first
second db 'World', 0x0a
secondLen equ $ - secondالناتج:
Hello
World
تتم طباعة كل سلسلة نصية في سطر خاص بها.
ما يفعله محرف السطر الجديد:
| المحرف | ASCII | التأثير |
|---|---|---|
0x0a | 10 | ينقل المؤشر إلى بداية السطر التالي |
الأخطاء الشائعة في newline:
| الخطأ | النتيجة |
|---|---|
| عدم وجود newline إطلاقًا | يتتابع النص في سطر واحد |
| وجود newline فقط في نهاية آخر string | تتتابع السلاسل السابقة معًا، بينما ينتقل الأخير إلى السطر التالي |
| وجود newline في منتصف string | تحدث فواصل أسطر في مواضع غير متوقعة |
القاعدة الآمنة:
أضف دائمًا 0x0a في نهاية كل سلسلة نصية تريدها في سطر مستقل.
التحدي
أُعطيتَ ثلاث سلاسل نصية من دون أسطر جديدة. مهمتك هي طباعتها بحيث تظهر في ثلاثة أسطر منفصلة.
السلاسل النصية هي:
| السلسلة النصية | القيمة |
|---|---|
word1 | 'Apple' |
word2 | 'Banana' |
word3 | 'Cherry' |
المتطلبات:
- Define كل سلسلة نصية مع newline (
0x0a) في النهاية - Calculate طول كل سلسلة نصية تلقائيًا
- Print السلاسل النصية الثلاث باستخدام write syscall
- Exit cleanly مع code 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