سؤال

وسيكون لديك لعذر لي، وأنا العلامة التجارية الجديدة في التجمع إلى x86، والتجمع بشكل عام.

ولذا سؤالي هو، لدي شيء من هذا القبيل:

addl %edx,(%eax)

و٪ EAX هو السجل الذي يحمل مؤشر إلى بعض صحيحا. دعنا نسميها إكس بي

هل هذا يعني أنه ما يقول: *xp = *xp + %edx؟ (%edx هو عدد صحيح)

وأنا مجرد الخلط حيث ADDL سيتم تخزين النتيجة. إذا %eax هو مؤشر إلى int، ثم (%eax) يجب أن تكون القيمة الفعلية للأن كثافة العمليات. ذلك أن addl تخزين نتيجة %edx+(%eax) في *xp؟ أحب حقا لشخص لشرح هذا بالنسبة لي!

وأنا حقا نقدر أي مساعدة!

هل كانت مفيدة؟

المحلول

نعم، هذه التعليمات تقوم به بالضبط ما كنت أعتقد أنه يفعل.

ومعظم إلى x86 تعليمات حسابية تأخذ اثنين من المعاملات: مصدر ووجهة. في AT & T في بناء الجملة (المستخدمة هنا)، كانت الوجهة دائما المعامل الصحيح. حتى مع تعليمات مثل:

addl %edx, %eax
وأضاف

والقيم في edx وeax معا، ويتم تخزين النتيجة في eax. ومع ذلك، في المثال الخاص بك، (%eax) هو المعامل الذاكرة. وهذا ما يعني قوسين في AT & T في بناء الجملة (مثل مربع، بين قوسين في جملة NASM).

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

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