استبدال متغير أسرع من عدد صحيح في الخط في VIC-20 Basic؟

StackOverflow https://stackoverflow.com/questions/3568967

  •  01-10-2019
  •  | 
  •  

سؤال

يتم أخذ البرنامجين التاليين (المكافئ وظيفيًا) من قضية قديمة من الجريدة الرسمية. الفرق الأساسي هو أن البرنامج 1 يضع مواقع الذاكرة الأساسية المستهدفة (7680 و 38400) في الخط ، في حين أن البرنامج 2 يعينها إلى متغير أولاً.

يدير البرنامج 1 حوالي 50 ٪ أبطأ من البرنامج 2. لماذا؟ أعتقد أن الاسترجاع المتغير الإضافي سيضيف وقتًا ، وليس طرحه!

10 PRINT"[CLR]":A=0:TI$="000000"
20 POKE 7680+A,81:POKE 38400+A,6:IF A=505 THEN GOTO 40
30 A=A+1:GOTO 20
40 PRINT TI/60:END

البرنامج 1

10 PRINT "[CLR]":A=0:B=7600:C=38400:TI$="000000"
20 POKE B+A,81:POKE C+A,6:IF A=505 THEN GOTO 40
30 A=A+1:GOTO 20
40 PRINT TI/60:END

البرنامج 2

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

المحلول

والسبب هو أن Basic يتم تفسيره بالكامل هنا ، لذلك يجب تحويل السلاسل "7680" و "38400" إلى أعداد صحيحة ثنائية في كل مرة يتم فيها الوصول إلى السطر 20 (506 مرة في هذا البرنامج). في البرنامج 2 ، تم تحويلها مرة واحدة وتخزينها B. طالما البحث عن البحث B أسرع من تحويل السلسلة إلى الثنائية ، سيكون البرنامج 2 أسرع.

إذا كنت ستستخدم برنامجًا برمجيًا أساسيًا (لست متأكدًا مما إذا كان هناك أحدهما لـ VIC-20 ، ولكنه سيكون مشروع برمجة رائعة) ، فمن المحتمل أن تكون البرامج بنفس السرعة ، أو ربما تكون أسرع قليلاً ، اعتمادًا على على التحسينات التي قام بها البرمجي.

نصائح أخرى

إنها من الصفحة 76 من هذه المسألة: http://www.scribd.com/doc/33728028/compute-gazette-issue-01-1983-jul

اعتدت أن أحب هذه المجلة. في الواقع يقول تحسن 30 ٪. انظر إلى ما يحدث في البرنامج 2 ويصبح واضحًا ، لأنك تحلق كثيرًا باستخدام المتغيرات التي يقوم بها البرنامج بجميع تخصيص الذاكرة مقدمًا لحساب عناوين الذاكرة. عندما تقوم بالنهج الأبطأ ، يجب أن يخصص كل تكرار الذاكرة للأسلوب المميز أدناه كجزء من حساب عنوان الذاكرة:

نكز 7680+أ ، 81: كزة 38400

هذه مجرد طبيعة المترجم الأساسي على VIC.

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

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