سؤال

كنت أقرأ بعض التعليمات البرمجية لم يكن متأكدا ما هذا الخط لا:

movq (%rsp), %rsp
هل كانت مفيدة؟

المحلول

movq (على افتراض أنك تتحدث عن x86) هو التحرك من quadword (64-بت القيمة).خاصة هذه التعليمات:

movq (%rsp), %rsp

يبدو كثيرا مثل التعليمات البرمجية التي سوف المشي من خلال إطارات المكدس.خاصة هذه التعليمات الاستيلاء على quadword وأشار إلى المكدس الحالي مؤشر الأحمال في كومة مؤشر الكتابة.

وعلى سبيل المثال هذا الكود تسلسل (استنادا إلى رمز حقيقي في Intel بدلا من AT&T الشكل) باستمرار تحميل مؤشر مكدس من محتوياته حتى قيمة 16 بايت أبعد من ذلك هو 0.

576  cmpq    [rsp+0x10],0x0
582  jz      594
588  movq    rsp,[rsp]
592  jmp     576
594  ...

فمن الممكن أنه قد لا يكون كومة الإطار المشي رمز لكنه يكون غير عادي لأنه سيكون باستمالة مؤشر مكدس على شيء انها لا تستخدم عادة.

ذلك هو غير عادية في أن تتحرك صعودا إطارات المكدس عادة ما ينطوي على مؤشر مكدس و قاعدة المؤشر ولكن هذا عادة فقط مستوى واحد (أي العودة من خلال وظيفة).

لهذا النوع من رمز هو مبين أعلاه حيث تريد تحريك لأعلى مستويات متعددة ، ربما أسرع إلى مجرد استخدام مؤشر مكدس حتى تحصل على حيث كنت بحاجة إلى أن تكون ، ثم البوب قاعدة مؤشر إيقاف ثم (الدعوة الاتفاقيات غالبا ما تدفع قاعدة الحالية المؤشر قبل تغييره ، بحيث بسيطة البوب سيتم استرداد القيمة القديمة).

نصائح أخرى

إنها قيمة 64 بت mov. 64 بت بسبب "Q" في movq وهو رباعي ورباعية هو 64 بت.

يمكن أن يكون هناك مثال آخر مثل MOVL حيث L 32 بت.

ولكن في حالة MOVQ (٪ RSP) ، ٪ RSP باستخدام بناء جملة ATT ..

يسمى MOVQ (٪ RSP) ، ٪ RSP -> movq رمز OPCODE ، (٪ RSP) المصدر أو SRC و ٪ RSP يسمى الوجهة أو DST.

ما تفعله هو أنه يبحث في سجل ٪ RSP يحصل على قيمته ويذهب إلى الذاكرة [القوس "()" يعني الذهاب إلى قيمة الذاكرة] لتلك القيمة ثم يعينها إلى ٪ RSP.

في حين أن كلاهما هو السجل نفسه ، فإن الفرق هو أن قيمة ٪ RSP تتغير.

على سبيل المثال: دعنا نقول ٪ RSP لديه قيمة 22. لكن ذاكرة RSP ٪ هي 30.

باستخدام هذه التعليمات MOVQ (٪ RSP) ، ٪ RSP

القيمة الجديدة لـ ٪ RSP هي 30. مرة أخرى لأن (٪ RSP) تحصل على قيمة RSP ٪ والتي تفترض 22 ثم (٪ RSP) يذهب إلى قيمة الذاكرة 30 ثم يعينها إلى ٪ RSP على الوجهة ، وهو ٪ RSP نفسها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top