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)

रजिस्टर के 32 बिट में से केवल सबसे निचले 8 बिट मेमोरी तक पहुँचते हैं और शेष बिट त्याग दिए जाते हैं। एक स्टोर का कोई साइन्ड या अनसाइन्ड रूप नहीं होता, क्योंकि यह मान को संकीर्ण करता है और निचला बाइट रखता है। एक बाइट से चौड़ा मान बिना किसी चेतावनी के अपने अतिरिक्त बिट खो देता है। 300 संग्रहीत करने पर 44 लिखा जाता है, क्योंकि 300, 256 से आगे लपेट जाता है।

मेमोरी की सबसे छोटी इकाई एक बाइट है, इसलिए sb डेटा को एक बार में एक बाइट बनाता है, जैसे कि टेक्स्ट को अक्षर दर अक्षर जोड़ना, बफर भरना या अलग-अलग रंग मान लिखना। क्रमागत बाइट्स एक-दूसरे से एक दूर पते पर स्थित होते हैं, इसलिए एक लूप 1 जोड़कर आगे बढ़ता है।

RISC-V मैनुअल कहता है कि sb रजिस्टर rs2 के निचले 8 बिट को 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