lb
يغطي lyszt.net lb وتعليمات RISC-V الأخرى بمزيد من التفصيل.
تنسيق الترميز
الوصف
يقرأ lb بايتًا واحدًا من الذاكرة، وهو أصغر وحدة يمكن لعملية تحميل أن تجلبها. الذاكرة مبنية من بايتات، كل بايت 8 بتات، وعنوان واحد يحدد بايتًا واحدًا. يقرأ lw 4 بايتات، ويقرأ lh 2، ويقرأ lb 1. ويستخدم نفس العنونة التي تستخدمها عمليات التحميل الأخرى: سجل أساس زائد إزاحة (انظر صفحة lw). الشكل موضح أدناه.
lb rd, offset(rs1)
يحتوي السجل على 32 بتة ويحتوي البايت على 8، لذا تحتاج البتات الـ 24 العليا إلى قيمة. يوسّع lb الإشارة: ينسخ البتة العليا من البايت إلى جميع البتات العليا، محافظًا على القيمة كعدد مُوقَّع. البايت الذي يحمل -5 يصل كقيمة -5 بعرض 32 بتة.
يظهر اختيار المُوقَّع/غير المُوقَّع أهميته القصوى مع النصوص، وهي أكثر بيانات البايتات شيوعًا، لأن رموز المحارف غير مُوقَّعة. وكثير من رموز المحارف تكون بتتها العليا مضبوطة. وتحميل أحدها باستخدام lb الذي يوسّع الإشارة ينتج عددًا سالبًا، وعندئذ تفشل المقارنات مع رموز المحارف الموجبة العادية. استخدم lbu، تحميل البايت غير المُوقَّع، للنصوص؛ فهو يملأ البتات العليا بالأصفار. واستخدم lb للبيانات المُوقَّعة، مثل الإزاحات الصغيرة التي قد تكون موجبة أو سالبة.
يعرّف دليل RISC-V كلاً من lb وlbu بأنهما النسختان بعرض 8 بتات من عمليات تحميل نصف الكلمة، مع نفس العنوان الفعّال المكوَّن من السجل rs1 زائد الإزاحة ذات 12 بتة الموسَّعة الإشارة. الذاكرة معنونة بالبايت، لذا يحدد عنوان واحد بايتًا واحدًا.
تقع البايتات على مسافة عنوان واحد بعضها من بعض، لذا تتنقل الحلقة عبر مصفوفة بايتات بإضافة 1 إلى العنوان. تقرأ حلقة نموذجية بايتًا، وتتحقق مما إذا كان صفرًا (العلامة على نهاية النص)، وتتخذ إجراءً بشأنه، ثم تزيد العنوان بمقدار 1.
مثال
.data val: .byte -5 .text la t0, val lb t1, 0(t0) # t1 = -5 (sign-extended)
