سؤال

أولا الخلفية قليلا.على z80 وحدة المعالجة المركزية لديها تعليمات دعا DJNZ والتي يمكن أن تستخدم بطريقة مماثلة كما for حلقة.أساسا DJNZ decrements ب التسجيل و يقفز إلى التسمية إذا لم الصفر.على سبيل المثال:

    ld      b,96                    ; erase all of the line
disp_version_erase_loop:
    call    _vputblank              ; erase pixels at cursor (uses b reg)
    djnz    disp_version_erase_loop ; loop 

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

مع أن الخروج من الطريق ، سؤالي هو هل وحدة المعالجة المركزية الأخرى تشمل أبنية مماثلة التحكم التعليمات ؟

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

المحلول

كان ذلك تعليمات شائعة إلى حد ما على آلات تلك الحقبة ، ويحدث في العديد من الأماكن الأخرى أيضًا.

وهلم جرا

نصائح أخرى

في الحقيقة في IA-32 المباشر أي ما يعادل DJNZ هو LOOPcc (LOOPZ).تذكر Z80 و 8086 نفس السلف إنتل 8080.لذلك كل x86 وحدة المعالجة المركزية مباشرة ترث DJNZ التعليمات!

IA-32 لديه مختلف REP* الإرشادات التي تستخدم CX كضكانها

PowerPC لديه bdnz وسجل العد الخاص ctr. تراجعي ctr والتشغيل المشروط مستقل عن اختبار الحالة الفعلية ، بحيث يمكنك إضافة شرط على رأسه bdnz, ، على سبيل المثال bdnzlt cr5, label (إذا كانت الذاكرة) ستتحقق مما إذا كان المخزّن أقل من البتات في CR5 و OR أو أو ذلك بشرط ctr تصبح 0.

بسخرية، ctr يستخدم أيضًا لتخزين أي وجهة استدعاء وظيفة غير مباشرة. لذلك من الممكن ترميز التعليمات "الانخفاض ctr وفرش إلى قيمته الجديدة إن لم يكن صفر "، ولكن هذا ممنوع على وجه التحديد. (لن يتحقق من مؤشر فارغ على أي حال.) بشكل كبير إلى حد ما ، bdnz يصبح عديمة الفائدة إلى حد ما في حلقة مع مكالمة غير مباشرة.

بعض متحكم الموافقة المسبقة عن علم مثل PIC18 لديها تعليمات DecfSZ (انخفاض وتخطي إذا صفر) تعليمات. لقد وضعت في كثير من الأحيان decfsz تليها فرع.

توجد أجهزة كمبيوتر تعليمية واحدة ، والتي لم تستخدم بالفعل. لكن أحد آلات مجموعة التعليمات الفردية هو "طرح وفرع إذا كان أقل من أو يساوي الصفر" (subleq) آلة. ويكيبيديا لديها المزيد حول هذا

لست على دراية بأي آلات حقيقية أخرى لها تعليمات مثل هذا تمامًا. أنا أحب آلات RISC ، ولا أرى حاجة إليها أيضًا.

سبقت PDP-11 (حوالي 1970) Z-80 بحوالي 5 سنوات ، وعلى الأقل بعض النماذج (على الرغم من أنها ليست في وقت مبكر) كانت أ طرح واحد والفرع تعليمات:

sob R, offset

في x86 ، هناك تعليمات الحلقة التي تفعل نفس الشيء بالضبط (مع العداد في ECX). هناك أيضًا تعليمات JECXZ (القفز إذا كانت ECX صفرًا) والتي من المفترض أن يتم استخدامها مع حلقة - يمكنك وضعها قبل الحلقة حتى تتمكن من تخطي الحلقة بأكملها إذا كان العدد صفراً في البداية.

مثله:

  ;number of iterations in ECX
  JECXZ end
start:
  ;loop body
  LOOP start
end:

لكن لاحظ أن هذه التعليمات غير فعالة بشكل فظيع على وحدات المعالجة المركزية المعاصرة. من الأفضل استخدام تعليمات CMP/Sub و JCC العادية. في ملاحظة جانبية - تكون وحدة المعالجة المركزية Intel Core2 قادرة فعليًا على علاج زوج تعليمات القفز+كما لو كانت تعليمة واحدة - يسمونها "اندماج ماكرو".

كان Z80 معالج CISC. DJNZ هو مثال كلاسيكي لتعليمات معقدة. الأزياء الحديثة تجاه مجموعات تعليمات RISC التي تفضل تعليمات أصغر وأبسط وأسرع ولكن يمكن معالجتها بسرعة أكبر - خاصة مع ميزات أنابيب أنابيب متقدمة. لا أعتقد أنك تحصل على أي شيء مثل هذا على عائلة ARM ، على سبيل المثال.

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