توجيه الاستدعاء بدالة (Invoke) في لغة التجميع Assembly

السلام عليكم ورحمة الله تعالى و بركاته

درس الموضوع بسيط و مفيد جدا للمبتدئين حول طرق توجيه الاستدعاء (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 تقوم بالتحويل بين الطريقتين : 

التحميل من الميديافاير

و بالتالي نكون قد وضحنا أبسط الأمور حول استعمالات هته الدالة و ان شاء الله تكون دروس أخرى تتعلق بلغة التجميع

في أمان الله .

أضف تعليق