تجميع الأجزاء معاً
جزء من قسم الأساسيات في رحلة Assembly على Coddy — الدرس 39 من 45.
لقد تعلمت الأجزاء الأربعة لنظام استدعاء النظام write:
| السجل | ما يحتويه | القيمة لمخرجات الشاشة |
|---|---|---|
rax | رقم استدعاء النظام | 1 (write) |
rdi | واصف الملف | 1 (stdout) |
rsi | عنوان المخزن المؤقت | عنوان السلسلة النصية الخاصة بك |
rdx | عدد البايتات | طول السلسلة النصية الخاصة بك |
الآن حان الوقت لجمعها معاً.
نمط استدعاء النظام (syscall) الكامل للكتابة (write):
mov rax, 1 ; رقم استدعاء النظام للكتابة (write)
mov rdi, 1 ; واصف الملف (stdout)
mov rsi, msg ; عنوان السلسلة النصية
mov rdx, msgLen ; عدد البايتات المراد طباعتها
syscall ; اطلب من نظام التشغيل الطباعةبرنامج كامل يعمل:
section .data
msg db 'Hello, World!', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msgLen
syscall
mov rax, 60
mov rdi, 0
syscallما يفعله هذا البرنامج:
| الخطوة | ماذا يحدث |
|---|---|
| 1 | يطبع "Hello, World!" على الشاشة |
| 2 | ينتقل إلى سطر جديد |
| 3 | يخرج بنجاح مع الكود 0 |
الترتيب مهم:
يجب عليك إعداد السجلات قبل تنفيذ syscall. لا يهم ترتيب تعليمات mov طالما تم إعداد الأربعة جميعاً قبل syscall.
التحدي
اكتب برنامجاً كاملاً يطبع الرسالة "Assembly is fun" متبوعة بسطر جديد، ثم يخرج بشكل نظيف.
السلسلة النصية وطولها معرفان بالفعل. تحتاج فقط إلى كتابة الكود داخل _start:.
جرّب بنفسك
section .data
msg db 'Assembly is fun', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
; مهام: إعداد واستدعاء نداء النظام write
; استخدم rax=1، rdi=1، rsi=msg، rdx=msgLen
; مهام: الخروج بشكل نظيف مع الكود 0يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
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