jزائف

j

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

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

الوصف

ينفذ j أبسط قفزة: فهو ينقل التحكم دائمًا إلى تسمية، دون أي شرط مرتبط. تنقل تعليمة التفرع التحكم فقط عندما تنجح المقارنة. الصيغة هي j label.

هذه قفزة غير مشروطة، تُعرف أيضًا باسم goto. تعتمد عليها الحلقات وكتل if/else. تضع الحلقة الأساسية تفرعًا شرطيًا في الأعلى لتقرر متى تخرج، وتنفذ جسم الحلقة، وتنتهي بـ j يعود إلى الأعلى للدورة التالية. بدون تلك القفزة، يسقط التنفيذ عند النهاية ولا تتكرر الحلقة أبدًا. في if و else، يتخطى j في نهاية كتلة if كتلة else، لذا تعمل واحدة فقط من الكتلتين.

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

يُرمّز دليل RISC-V القفزات غير المشروطة البسيطة على أنها jal مع ضبط rd على x0. وينص على أنه ينبغي دائمًا استخدام هذه القفزة للتفرعات غير المشروطة بدلًا من تفرع شرطي شرطه صحيح دائمًا. القفزات أيضًا نسبية إلى pc، وتغطي نطاقًا أوسع بكثير من التفرعات، ولا تمس جداول التنبؤ بالتفرع الشرطي.

j هو تعليمة زائفة للسطر أدناه.

jal zero, label

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

يوسّع إلى

jal zero, label

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

مثال

j loop   # go back to the top of the loop