اذهب إلى المحتوى

السؤال

نشر

أحاول فهم بعض الشيفرات البرمجية المكتوبة بلغة الأسمبلي، فأنا لم أفهم معنى  testl eax, eax في الشيفرة البرمجية التالية:

000319df  8b4508                  movl        0x08(%ebp),%eax  
000319e2  8b4004                  movl        0x04(%eax),%eax  
000319e5  85c0                testl           %eax,%eax  
000319e7  7407                je          0x000319f0

 

Recommended Posts

  • 0
نشر

سأحاول تفسير الأمر أكثر ما يمكن. معنى test هو أنه سيقوم بتطبيق العملية الحسابية AND على المعاملين ومن ثم سوف يتأكد من الناتج إذا كان صفرا، لذلك معنى هذه الشفرة أنها ستقوم باختبار ما إذا كانت EAX تساوي صفر أو لا ومن ثم سوف تتم عملية القفز باستخدام je إذا كانت صفر.
بالمناسبة يمكنك جعل الشيفرة أفضل وأكثر قابلية للقراءة عن طريق استبدال هذا السطر بالسطر التالي:

cmp eax,0

هذا السطر سيقوم بنفس الوظيفة السطر السابق لكنه سيتطلب المزيد من مساحة البايتات.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...