13-01-2019, 01:04 PM
(13-01-2019, 06:09 AM)تلميذ كتب : نريد شرح تعليمات المنقح
jnz,jmz,jn,push,mov,daxالخ...
صيغة الأمر MOV
mov destination , source
مثلا : eax = 1 , ebx = 5
mov eax,ebx
eax ستصبح قيمته 5 بعدما كانت 1 / ملاحظة : لا تخلط بين تعليمة MOV و ADD
____________________
add eax,ebx
eax ستصبح قيمته 6 لأن ADD تخص الجمع
____________________
التعليمة PUSH تقوم بدفع قيمة المعامل للمكدس Stack لغرض حفظ قيمته // ستكون اعلى قيمة في المكدس
مثلا : eax = 4
Push eax // تم دفع القيمة اعلى المكدس
call xxxxxxxx // قام البرنامج بالمرور بدالة مثلا و أثناء المرور تغيرت قيمة eax ما العمل ؟
لنفرض أن قيمة eax أصبحت 445887F
التعليمة POP عكسها تماما تسترد كل ما تم دفعه عن طريق PUSH ...(أعلى قيمة في المكدس)
pop eax // تسترجع القيمة التي تم دفعها و هي 3 , أظن الفكرة وصلت
___________________
أوامر القفز لها معامل واحد : JMP operand و هو العنوان الذي تؤدي إليه القفزات
مثلا لدينا عنوان 0054784D نريد الذهاب إليه دون شروط :
jmp 0054784D // أمر قفز عادي (غير مشروط) يقفز مهما كانت النتيجة
الآن القفزات المشروطة : jz , je / jnz , jne (يوجد غيرها ذكرتها كمثال)
je و jz لهما معنى واحد , إلا ان jz متعلقة بالzero flag
مثال : eax = 10 , ebx = 10
cmp eax,ebx // التعليمة cmp هي للمقارنة بين معاملين , و هي تطرح المعامل الثاني من الأول
je 0054784D // اقفز اذا كانت نتيجة العملية تساوي الصفر , نفس الشيء بالنسبة ل jz اقفز اذا كانت راية ZF تساوي الصفر
jne و jnz عكس التعليمتين السابقتين ! / jump if not zero | jump if not equal to zero
___________________
أخي الحبيب لا يوجد تعليمة dax ولا jmz في اوامر أسمبلي x86 . راجع معلوماتك
لتتأكد أكثر قم بزيارة المرجع التالي :
https://www.felixcloutier.com/x86/