bltu
يغطي lyszt.net bltu وتعليمات RISC-V الأخرى بمزيد من التفصيل.
تنسيق الترميز
الوصف
ينفّذ bltu نفس التفرع الذي ينفّذه blt لكنه يقرأ كلا السجلين كقيمتين غير مُوقَّعتين. يشير الاسم إلى branch if less than, unsigned. يُتَّخذ التفرع عندما تكون rs1 أصغر من rs2، وتُقرأ القيمتان كعددين غير سالبين من 0 حتى نحو 4 مليارات. تصف صفحة blt التفرع نفسه. توضح هذه الصفحة سبب امتلاك القراءة غير المُوقَّعة لتعليمة خاصة بها.
تمثّل البتات الـ 32 نفسها أعدادًا مختلفة حسب ما إذا كانت البتة العليا تُقرأ كإشارة أو كجزء من القيمة. يقرأ blt البتات كقيمة مُوقَّعة ويقرأها bltu كقيمة غير مُوقَّعة، والقراءتان تختلفان. السجل الذي تكون جميع بتاته مضبوطة على 1 هو -1 بالنسبة إلى blt، أي قيمة صغيرة جدًا، وهو أكبر قيمة ممكنة بالنسبة إلى bltu. اختيار التعليمة الخاطئة ينتج إجابة خاطئة دون أي رسالة خطأ.
يناسب bltu أي شيء لا يمكن أن يكون سالبًا، مثل عناوين الذاكرة والأحجام والأعداد والمواضع. تفشل مقارنة العناوين باستخدام blt المُوقَّع بمجرد أن يصبح العنوان كبيرًا بما يكفي لتكون بتته العليا مضبوطة، لأن القراءة المُوقَّعة تجعله سالبًا.
يشير دليل RISC-V إلى فحص النطاق نفسه. يمكن فحص حدّ مصفوفة مُوقَّع باستخدام bltu واحد، لأن أي فهرس سالب يُقارَن كأكبر من أي حدّ غير سالب.
يتحقق bltu واحد من أن الفهرس ضمن النطاق، أي 0 على الأقل وأقل من الحجم n.
bltu i, n, ok
إذا كان i سالبًا، فإن قراءته غير المُوقَّعة تكون عددًا كبيرًا جدًا ويفشل الاختبار، لذا تلتقط مقارنة غير مُوقَّعة واحدة كلتا الحالتين: الحالة الأكبر من اللازم والحالة السالبة.
مثال
li t0, 1 li t1, -1 bltu t0, t1, done # t1 read as unsigned is huge, so jump to 'done'
