bnezزائف

bnez

زائف
تجميع RISC-V مرجع

يغطي lyszt.net bnez وتعليمات RISC-V الأخرى بمزيد من التفصيل.

الوصف

bnez يتفرع عندما يحمل سجل قيمة غير الصفر. يعني الاسم branch if not equal to zero. الصيغة أدناه تقفز إلى التسمية عندما تكون rs غير صفرية.

bnez rs, label

يوسّع المجمّع هذه التعليمة الزائفة إلى التعليمة أدناه، التي تقارن مع السجل الذي يحمل الصفر دائمًا.

bne rs, zero, label

لاختبار الصفر انظر beqz، وللفروع عمومًا انظر beq.

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

يعمل bnez أيضًا على قيم صواب أو خطأ حُسبت سابقًا. تترك تعليمات الضبط مثل slt قيمة 1 أو 0 في سجل، ويتفرع bnez التالي بناءً على تلك النتيجة. يمكن اختبار سجل يحمل قيمة نعم أو لا باستخدام bnez.

يذكر دليل RISC-V سببًا واحدًا لمقارنة فروعه سجلين بدلًا من مقارنة سجل واحد بالصفر. تحتاج المقارنة مع الصفر إلى تأخير دارة غير تافه، لذا تكلف تقريبًا بقدر مقارنة مقدار حسابية. لذلك فإن bnez تعليمة زائفة تستخدم bne مع zero.

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

bnez a0, error

يوسّع إلى

bne rs, zero, label

يستبدل المُجمِّع هذه التعليمة الزائفة بالتعليمة الحقيقية أو التعليمات المذكورة أعلاه.

مثال

li t0, 5
bnez t0, done   # t0 != 0, so jump to 'done'