السلام عليكم و رحمة الله و بركاته ...
لدي سطر كود في الأسمبلي و أريد شرح له ، كيفية عمله ، و مثال لإستعماله في ال C
بس أهم شيء الشرح.
leal 8(%ebx,%edx,2), %ecx
السلام عليكم و رحمة الله و بركاته ...
لدي سطر كود في الأسمبلي و أريد شرح له ، كيفية عمله ، و مثال لإستعماله في ال C
بس أهم شيء الشرح.
leal 8(%ebx,%edx,2), %ecx
تم تعديل هذه المشاركة بواسطة hamany-pirlo في 4 يناير 2010 في 22:37
Program every day for 20 years and you will become a good programmer. Program every day for 10 years and study algorithms on the side and you will become a great programmer !
على الأقل هذا اللي سمعته ...
مممم اخي العزيز..
اولا من المفروض ان تحدد المجمع و اسلوب التمرير AT&T ام انتل؟؟
لكن انا افرض انك تستعمل GNU AS (لانه الوحيد الذي يستعمل هذا النوع من syntax).
حسنا لنر
leal 8(%ebx,%edx,2), %ecx
leal ليل يا ليل :D لاحظ انها lea التي نعرفها في الاسمبلي العادي و l تعني Long لان AT&A لا تستعمل byte ptr, word ptr, dword ptr and qword ptr بل تضيف اللاحقة b,w,d,q في نهاية الامر
لاحظ ايضا ان مسجلات الاستدلال base+index في حالة التعامل مع جدول array يتم التعامل معها في AT&T بالاقواس على عكس Intel التي تفضل ان تستعمل العوارض (الجانبية للقاح انفلونزا الخنازير :D) []
هذا يعني انك اذا كتبت leal (%ebx,%ecx),%eax في AT&T فانها توافق lea eax,[ebx+ecx] على انتل
lea eax,[ebx+ecx] --> leal (%ebx,%ecx),%eax AT&T: _x(%ebx,%eax,8) Intel: [ebx + eax*8 + _x]
السطر leal 8(%ebx,%edx,2), %ecx يكافئ اذن [ebx + edx*2 + 8]
اااه تذكرت.
الصياغة العامة هي
section:[base + index*scale + disp] تتحول الى section:disp(base, index, scale)
تم تعديل هذه المشاركة بواسطة fkugd2003 في 5 يناير 2010 في 03:54
العمل كثير و الوقت قليل أعاننا الله
مشكور أخوي و يعطيك العافية على هذا الشرح و بأسلوب جميل أيضا :happy:
Program every day for 20 years and you will become a good programmer. Program every day for 10 years and study algorithms on the side and you will become a great programmer !
على الأقل هذا اللي سمعته ...