أهمية السطر الجديد
جزء من قسم الأساسيات في رحلة 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 | التأثير |
|---|---|---|
0x0a | 10 | ينقل المؤشر إلى بداية السطر التالي |
أخطاء السطر الجديد الشائعة:
| الخطأ | النتيجة |
|---|---|
| لا يوجد سطر جديد على الإطلاق | تلتصق النصوص معًا في سطر واحد |
| سطر جديد فقط في نهاية آخر سلسلة نصية | تلتصق السلاسل النصية السابقة معًا، وينتقل السطر الأخير إلى السطر التالي |
| سطر جديد في منتصف السلسلة النصية | تنكسر الأسطر في أماكن غير متوقعة |
القاعدة الآمنة:
أضف دائمًا 0x0a في نهاية كل سلسلة نصية (string) تريد عرضها في سطر منفصل.
التحدي
أنت مخول بثلاث سلاسل نصية بدون أسطر جديدة. مهمتك هي طباعتها بحيث تظهر على ثلاثة أسطر منفصلة.
السلاسل النصية هي:
| السلسلة النصية | القيمة |
|---|---|
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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
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