sb

sb

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

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

الوصف

يكتب sb بايتًا واحدًا (8 بتات) إلى الذاكرة، وهو أصغر مقدار يمكن أن يكتبه المخزن. وهو المكافئ التخزيني لتحميلات lb وlbu. يظهر التركيب أدناه. يقرأ القيمة في سجل المصدر rs2 ويكتب أدنى 8 بتات منها إلى العنوان المكوَّن من سجل الأساس rs1 مضافًا إليه الإزاحة. يتطابق تخطيط المعاملات مع sw، مع إدراج سجل المصدر أولاً.

sb rs2, offset(rs1)

لا تصل إلى الذاكرة سوى أدنى 8 بتات من 32 بتًا في السجل، وتُهمَل البتات المتبقية. ليس للمخزن صيغة موقَّعة أو غير موقَّعة، لأنه يضيّق القيمة ويحتفظ بالبايت المنخفض. تفقد القيمة الأوسع من بايت بتاتها الإضافية دون تحذير. تخزين 300 يكتب 44، لأن 300 يتجاوز 256 ويلتف.

أصغر وحدة في الذاكرة هي البايت، لذا يبني sb البيانات بايتًا واحدًا في كل مرة، لمهام مثل تجميع النص حرفًا بحرف، أو ملء مخزن مؤقت، أو كتابة قيم ألوان فردية. تشغل البايتات المتتالية عناوين تفصل بينها وحدة واحدة، لذا تتقدم الحلقة بإضافة 1.

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

يكتب تمرين شائع النص يدويًا. خزّن رمز كل حرف باستخدام sb، وأنهِ التسلسل ببايت 0، ثم اطبعه. تُطبع الرموز 72 و105 و0 في الذاكرة على شكل الكلمة Hi، مما يُظهر أن السلسلة هي بايتات في خانات ذاكرة متتالية تنتهي بصفر. لا يغيّر المخزن سوى البايت المستهدف الواحد، وتحتفظ البايتات المجاورة له بقيمها السابقة.

مثال

la t0, slot
li t1, 200
sb t1, 0(t0)   # memory at slot now holds the low 8 bits, 200