lhu

lhu

تجميع RISC-V مرجع

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

تنسيق الترميز

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

الوصف

يقرأ lhu نصف كلمة (16 بت، أو بايتين) من الذاكرة ويعاملها كقيمة غير موقّعة. وهو يقترن بـ lh، ويختلفان في كيفية ملء النصف العلوي من سجل الوجهة. كلاهما يقرأ 16 بت بنفس العنونة. تُغطّى أنصاف الكلمات وصيغة العنونة في صفحة lh. صيغة lhu موضّحة أدناه.

lhu rd, offset(rs1)

يحتوي السجل على 32 بت، لذا يجب أن يملأ التحميل ذو 16 بت أعلى 16 بت. ينسخ lh بت الإشارة عبرها، مما يُبقي الأعداد السالبة سالبة. يملؤها lhu بالأصفار، ويُسمى ذلك التوسيع الصفري، لذا تكون النتيجة دائمًا غير سالبة، من 0 إلى 65535. يشير الحرف u في الاسم إلى القراءة غير الموقّعة.

البيانات هي التي تحدد أيّهما تستخدم. اختر lh للقيم التي قد تكون سالبة وlhu للقيم التي لا تكون سالبة أبدًا. نمط البتات 0xFFFF عند تحميله بـ lhu يساوي 65535، والبتات نفسها عند تحميلها بـ lh تساوي -1.

يعرّف دليل RISC-V الأمر lhu بأنه تحميل قيمة 16 بت من الذاكرة وتوسيعها صفريًا إلى 32 بت قبل تخزينها في rd. العنوان الفعّال هو السجل rs1 مضافًا إليه الإزاحة ذات 12 بت الموسّعة إشاريًا.

معظم البيانات ذات 16 بت غير موقّعة. رموز المحارف في بعض ترميزات النصوص، وأرقام المنافذ والمجاميع الاختبارية في بيانات الشبكات، وصيغ البكسل ذات 16 بت، وحقول الأطوال في صيغ الملفات أمثلة على ذلك. سيعطي التوسيع الإشاري قيمة خاطئة لأي منها بمجرد ضبط البت الأعلى، لذا فإن lhu هو التحميل الصحيح. تقع أنصاف الكلمات على مسافة بايتين، لذا تُحرّك الحلقات التي تمر عليها العنوان بمقدار 2.

مثال

.data
val: .half 0xffff
.text
la t0, val
lhu t1, 0(t0)   # t1 = 65535 (zero-extended)