السلام عليكم ورحمة الله تعالى و بركاته
درس الموضوع بسيط و مفيد جدا للمبتدئين حول طرق توجيه الاستدعاء (INVOKE Directive) و هذا ما تميزت به معمارية 32bit في كل من الأسمبلر Masm و Fasm.
حيث سهل استخدام صيغ الاستدعاءات و تمرير الوسائط بالتعامل مع دوال API بصورة كبيرة و بسطر واحد بدل تعليمات برمجية طويلة نوعا ما بالتقريب (خمسة أسطر) بطريقة الدفع الى المكدس (Stack) باستخدام PUSH و استدعاء النداء CALL و تسمى بـ MODEL directive و المعلوم أنَّ هذه الطريقة تعمل فقط مع 32-bit و كلا الطريقتين صحيحتين ، لنلقي نظرة على تركيبة الجملتين (Syntax):
أسلوب: INVOKE Directive
INVOKE DumpArray, OFFSET array, LENGTHOF array, TYPE array
أسلوب : MODEL directive
push TYPE array push LENGTHOF array push OFFSET array call DumpArray
تجربة استدعاء دالة MessageBox .. بالحالتين:
.code Main: invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, NULL end Main
push NULL push offset MsgTitle push offset MsgText push NULL call MessageBox
هنا نرى الفرق بين الطريقتين و بساطة صيغة Invoke في التعامل مع الدوال و ربما تشبه Procedure في لغة أوبجكت باسكال ObjectPascl أو Delphi عموما.
جدول بسيط يوضح أهم أنواع Argument المستعملة في دالة Invoke :
هناك أداة اسمها Invoke Converter تقوم بالتحويل بين الطريقتين :
و بالتالي نكون قد وضحنا أبسط الأمور حول استعمالات هته الدالة و ان شاء الله تكون دروس أخرى تتعلق بلغة التجميع
في أمان الله .