سؤال

وبما أن العديد من المشاكل مشروع أويلر تتطلب منك القيام فحص القسمة على عدد لا بأس به من المرات، لقد كنت في محاولة لمعرفة أسرع وسيلة لتنفيذ هذه المهمة في <لأ href = "HTTP: // EN .wikipedia.org / ويكي / ZX81 "يختلط =" نوفولو noreferrer "> ZX81 BASIC.

وحتى الآن لقد مقارنة (N/D) إلى INT(N/D) للتحقق، سواء N هو يمكن تقسيمها من قبل D أم لا.
لقد تم التفكير في إجراء الاختبار في Z80 رمز الجهاز ، وأنا حتى الآن لم أحسب كيفية استخدام المتغيرات في BASIC في رمز الجهاز.

وكيف يمكن تحقيق ذلك؟

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

المحلول

لا أعرف إذا كان RANDOMIZE USR يتوفر في ZX81 ولكن اعتقد انه يمكن استخدامها لاستدعاء إجراءات في التجمع. لتمرير الوسائط قد تحتاج إلى استخدام كزة لتعيين بعض مواقع الذاكرة الثابتة قبل تنفيذ RANDOMIZE USR.

وأتذكر العثور على قائمة من إجراءات تنفيذها في ROM لدعم ZX الأساسية. أنا متأكد من أن هناك عدد قليل من تنفيذ العملية العائمة.

وبديل لالنقطة العائمة هو استخدام الرياضيات نقطة ثابتة. انها أسرع كثيرا في هذا النوع من الحالات التي لا يوجد فيها الرياضي.

وأنت أيضا قد تجد المزيد من المعلومات في سنكلير القضايا العضو. أنها نشرت بعض المقالات المتعلقة البرمجة في ZX الطيف

نصائح أخرى

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

set accumulator to N
subtract D
if carry flag is set then it is not divisible
if zero flag is set then it is divisible
otherwise repeat subtraction until one of the above occurs

والنسخة 8 بت سيكون شيئا مثل:

DIVISIBLE_TEST:
LD B,10
LD A,100

DIVISIBLE_TEST_LOOP:
SUB B
JR C, $END_DIVISIBLE_TEST
JR Z, $END_DIVISIBLE_TEST
JR $DIVISIBLE_TEST_LOOP

END_DIVISIBLE_TEST:
LD B,A
LD C,0
RET

والآن، يمكنك الاتصال من استخدام USR الأساسي. ما يعود USR هو كل ما في الزوج قبل الميلاد السجل، لذلك كنت تريد على الأرجح أن تفعل شيئا مثل:

REM poke the memory addresses with the operands to load the registers
POKE X+1, D
POKE X+3, N
LET r = USR X
IF r = 0 THEN GOTO isdivisible
IF r <> 0 THEN GOTO isnotdivisible

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

وهناك نسخة 16-بت ستكون مماثلة تماما ولكن باستخدام عمليات الزوج السجل. إذا كنت بحاجة للذهاب إلى ما بعد 16 بت أنه سيحصل أكثر قليلا الملتوية.

وكيف قمت بتحميل هذا الأمر متروك لكم - ولكن الأسلوب التقليدي باستخدام البيانات البيانات والوخزات. قد كنت تفضل أن يكون لها شخصية المجمع من رمز الجهاز لك على الرغم من!

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

و(سعيد مع ضحكته، بالطبع).

وعلى أي حال، على ZX81 يمكنك التبديل فقط إلى وضع السريع.

ويجب وضع القيم في بعض مواقع الذاكرة معروفة مسبقا، أولا. ثم استخدام نفس المواقع من داخل Z80 المجمع. ليس هناك المعلمة يمر بين البلدين.

وهذا هو أساس ما (لا يزال) تذكر من ZX الطيف 48. حظا سعيدا، ولكن قد النظر في رفع مستوى الأب الخاص بك. ؛ /

والمشكلة مع رمز الجهاز Z80 هو أنه لا يوجد لديه مكتب خدمات المشاريع النقطة العائمة (وليس الانقسام صحيح أو ضرب، لهذه المسألة). تنفيذ مكتبة FP الخاصة بك في Z80 المجمع ليست تافهة. بالطبع، يمكنك استخدام إجراءات أساسية في البناء، ولكن بعد ذلك يمكنك كذلك مجرد عصا مع BASIC.

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