سؤال

لقد طلب مني إنشاء حلقة بسيطة في لغة التجميع ولكني أواجه مشكلة حيث لا تنتهي الحلقة عندما ينبغي أن تستمر في حلقة لانهائية.

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

الرمز الخاص بي هنا (محدث):

كود بويبين

قد يحتوي الرمز على أخطاء أخرى غير الحلقة الفعلية.

// تم تحريره لتوضيح متطلبات البرامج ...

يحتاج البرنامج إلى اتخاذ مدخلات "N" والتي سيتم استخدامها كضابط للحلقة. ثم أتناول الإدخال "n" المزيد من الأرقام، عندما يكون الرقم إيجابيا أحتاج إلى إضافته إلى postot المتغير، عندما أحتاج إلى إضافته إلى NEGATOT المتغير. بعد إدخال أرقام "n"، قمت بطباعة النتائج لكل متغير ومخارج البرنامج.

تحرير 2:

إصلاح مشكلة الحلقة عن طريق مسح المكدس بشكل صحيح حتى أضفت:

        add esp,8

و:

next:   push ecx
        ...
pop ecx
loop next

التي إصلاح مشكلة الحلقة.

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

المحلول

حسنا فهمت. وبعد وبعد تقرأ INT الرقم من المستخدم. ثم على الخط 41 إما أن تقفز إلى السطر 47 أو سقوط إلى السطر 43.

إذا ذهبت إلى السطر 43، يمكنك الوصول إلى السطر 45 الذي يقفز إلى السطر 49 (النهاية). إذا بدلا من ذلك، ذهبت إلى السطر 47، فسوف تسقط إلى السطر 49 (النهاية).

في كلتا الحالتين، يمكنك ذلك الحلقة مرة أخرى إلى السطر 29 (التالي).

تتوقع تسجيل ECX الخاص بك لتقليل في كل مرة يتم الوصول إليها حلقة، وعلى أنها لا تتغير دون تغيير أثناء معالجة الحلقة.

هل حاولت دفع ECX في جميع أنحاء السطر 29، وتفتيت ذلك مباشرة قبل حلقة؟

نصائح أخرى

أرى خطين:

  • هناك JG positive هناك بعد زيادة مؤشر المكدس. هل أنت متأكد من أنك تريد التحقق من نتيجة الاضطراب مع إطار المكدس الخاص بك، بدلا من قيمة الرقم الذي أدخلته؟

  • jmp end لا: مباشرة بعد end يأتي أ loop next. وبعد لا أرى أي شرط لإنهاء الحلقة.

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