Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

ما هو الـ Syscall؟

جزء من قسم الأساسيات في رحلة Assembly على Coddy. الدرس 31 من 45.

لقد كتبتَ تعليمات تجميع مثل mov وlea. تعمل هذه التعليمات مباشرةً على وحدة المعالجة المركزية. ولكن ماذا لو احتجتَ إلى تنفيذ شيء لا تستطيع وحدة المعالجة المركزية القيام به بمفردها، مثل الطباعة على الشاشة، أو القراءة من لوحة المفاتيح، أو إنهاء برنامج؟

لهذه المهام، تحتاج إلى نظام التشغيل (Linux، في هذه الدورة).

ما هو syscall؟

إن syscall (استدعاء النظام) هو طلب من برنامجك إلى نظام التشغيل. إنها الطريقة التي تطلب بها من نظام التشغيل تنفيذ أمر ما نيابةً عنك.

لماذا تحتاج إلى استدعاءات النظام:

المهمةهل يستطيع المعالج تنفيذها بمفرده؟هل تحتاج إلى syscall؟
جمع عدديننعملا
نقل البيانات بين السجلاتنعملا
طباعة نص على الشاشةلانعم
قراءة إدخال لوحة المفاتيحلانعم
تنفيذ exit لبرنامجلانعم
فتح ملفلانعم

كيفية عمل syscall:

  1. تضع رقم syscall في rax (ليُخبر نظام التشغيل بما تريده)
  2. تضع المعطيات في سجلات أخرى (rdi، rsi، rdx، إلخ.)
  3. تنفّذ تعليمة syscall
  1. تقفز وحدة المعالجة المركزية إلى نواة نظام التشغيل
  2. ينفّذ نظام التشغيل الطلب
  3. يعيد نظام التشغيل التحكم إلى برنامجك

التشبيه:

فكّر في syscall كأنك تتصل بمكتب حكومي:

الخطوةالتشبيهفي لغة التجميع
1حدّد الخدمة التي تحتاج إليهااختر رقم syscall (ضعه في rax)
2املأ النماذجضع الوسائط في السجلات
3أرسل الطلبنفّذ syscall
4تعالجه الحكومةتنفّذ نواة نظام التشغيل العمل
5استلم نتيجتكيواصل البرنامج التنفيذ

استدعاءات النظام التي ستتعلّمها في هذه الدورة:

استدعاء النظامالرقمما الذي يفعلهالفصل
exit60ينهي البرنامجالفصل 4
write1يطبع النص على الشاشةالفصل 5

أهم استدعاء نظام في الوقت الحالي: <strong>exit</strong>

من دون exit، سيستمر برنامجك في العمل إلى الأبد أو سيتعطل. يجب أن تنتهي كلّ برامجك باستدعاء نظام exit.

mov rax, 60    ; syscall number for exit
mov rdi, 0     ; exit code (0 = success)
syscall        ; ask the OS to exit

جرّب بنفسك

لا يتضمّن هذا الدرس تحدّيًا برمجيًا.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: Playground لـ Assembly