lh

lh

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

يغطي lyszt.net lh وتعليمات 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

الوصف

يقوم lh بتحميل نصف كلمة من الذاكرة. البايت هو 8 بتات ويحمل عنوانه الخاص، مما يجعله أصغر وحدة قابلة للعنونة. الكلمة هي 4 بايتات، أو 32 بتًا، ونصف الكلمة هو نصف ذلك: 2 بايت، أو 16 بتًا. يقرأ lh 16 بتًا حيث يقرأ lw 32 بتًا. تتطابق العنونة مع lw: سجل أساس بالإضافة إلى إزاحة ثابتة (انظر صفحة lw). يظهر الشكل أدناه.

lh rd, offset(rs1)

يحمل السجل 32 بتًا، لذا يجب أن يملأ التحميل ذو 16 بتًا الـ 16 بتًا المتبقية. يستخدم lh توسيع الإشارة. يقرأ البت الأعلى من القيمة ذات 16 بتًا، والذي يحدد إشارة العدد الموقّع، وينسخ ذلك البت إلى جميع البتات الـ 16 العليا في السجل. تحتفظ القيمة بإشارتها، لذا تصل القيمة -3 ذات 16 بتًا كقيمة -3 ذات 32 بتًا.

استخدم lh للبيانات الموقّعة ذات 16 بتًا، مثل عينات الصوت أو قراءات المستشعرات التي يمكن أن تصبح سالبة. أما نظيره lhu، حيث يرمز u إلى غير الموقّع، فيملأ الجزء العلوي بالأصفار، وهو ما يناسب البيانات التي لا تصبح سالبة أبدًا. يصبح نمط البتات 0x8000 عند تحميله بـ lh مساويًا لـ -32768، وعند تحميله بـ lhu يصبح +32768. تبقى البتات في الذاكرة كما هي، والتحميل هو الذي يحدد المعنى.

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

نصف الكلمات هي 2 بايت، لذا تقع مصفوفاتها عند الإزاحات 0 و2 و4، ويتحرك المؤشر عبرها بإضافة 2.

مثال

.data
val: .half -5
.text
la t0, val
lh t1, 0(t0)   # t1 = -5 (sign-extended)