طباعة سلسلتين نصيتين
جزء من قسم الأساسيات في رحلة Assembly على Coddy. الدرس 40 من 45.
أنت تعرف بالفعل كيفية طباعة سلسلة نصية واحدة. لكن ماذا لو أردت طباعة سلسلتين نصيتين منفصلتين؟ على سبيل المثال، "Hello " ثم "World!"؟
ما عليك سوى استدعاء نداء النظام write مرتين، مرة لكل سلسلة.
آلية عمله:
; الطباعة الأولى
mov rax, 1
mov rdi, 1
mov rsi, firstMsg
mov rdx, firstLen
syscall
; الطباعة الثانية
mov rax, 1
mov rdi, 1
mov rsi, secondMsg
mov rdx, secondLen
syscallمثال:
section .data
first db 'Hello ', 0x0a
firstLen equ $-first
second db 'World!', 0x0a
secondLen equ $-second
section .text
global _start
_start:
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
mov rax, 60
mov rdi, 0
syscallالناتج:
Hello
World!
تنتهي كل سلسلة بـ 0x0a (سطر جديد)، لذا تُطبع السلسلتان في سطرين منفصلين.
لماذا نطبع سلسلتين نصيتين بدلًا من واحدة؟
| السبب | مثال |
|---|---|
| إمكانية إعادة الاستخدام | اطبع التحية نفسها بأسماء مختلفة |
| المرونة | اطبع رسائل مختلفة بناءً على الشروط |
| التنظيم | احتفظ بالرسائل المختلفة منفصلة في الذاكرة |
يمكنك طباعة أي عدد تريده من السلاسل النصية:
ما عليك سوى تكرار استدعاء النظام write لكل سلسلة نصية.
التحدي
لديك سلسلتان: partOne وقيمتها 'Good'، وpartTwo وقيمتها 'bye'. تنتهي كلتاهما بالفعل بسطر جديد.
اكتب الشيفرة لطباعة partOne ثم partTwo بحيث يُظهر الناتج:
Good
bye
قسم البيانات واستدعاء النظام للخروج متوفران بالفعل. ما عليك سوى كتابة استدعائي النظام للكتابة.
جرّب بنفسك
section .data
partOne db 'Good', 0x0a
partOneLen equ $-partOne
partTwo db 'bye', 0x0a
partTwoLen equ $-partTwo
section .text
global _start
_start:
; TODO: اطبع partOne باستخدام استدعاء النظام write
; TODO: اطبع partTwo باستخدام استدعاء النظام write
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تدرّب بنفسك: Playground لـ Assembly