sw

sw

RISC-V असेंबली संदर्भ

lyszt.net sw और अन्य 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

विवरण

sw एक रजिस्टर से मान लेता है और उसे मेमोरी में लिखता है, जो lw का विपरीत है। यह नाम store word का संक्षिप्त रूप है, और एक word 32 बिट का होता है। Loads डेटा को मेमोरी से रजिस्टरों में ले जाते हैं ताकि उस पर काम किया जा सके, और stores परिणामों को वापस बाहर भेजते हैं। ये दो निर्देश RISC-V के load, compute and store चक्र का निर्माण करते हैं, क्योंकि अंकगणित केवल रजिस्टरों में होता है।

sw का सिंटैक्स नीचे दिखाया गया है। ऑपरेंड का क्रम अधिकांश निर्देशों से भिन्न है।

sw rs2, offset(rs1)

rs2 में लिखने के लिए मान होता है। दूसरा ऑपरेंड, offset(rs1), मेमोरी में गंतव्य पता देता है: बेस रजिस्टर rs1 में मौजूद पता plus एक छोटा स्थिर offset, वही एड्रेसिंग जो lw उपयोग करता है। नीचे दी गई पंक्ति t1 में मौजूद मान को t0 में रखे पते पर लिखती है।

sw t1, 0(t0)

sw हर रजिस्टर को अपरिवर्तित छोड़ता है। इसका प्रभाव पूरी तरह मेमोरी पर पड़ता है, जबकि लगभग हर अन्य निर्देश एक रजिस्टर लिखता है।

RISC-V मैनुअल कहता है कि sw, sh और sb रजिस्टर rs2 के निचले बिट्स से 32-बिट, 16-बिट और 8-बिट मान मेमोरी में संग्रहीत करते हैं। प्रभावी पता रजिस्टर rs1 plus sign-extended 12-बिट offset होता है। स्वाभाविक रूप से aligned पतों पर loads और stores कभी alignment त्रुटि नहीं उठाते, और मैनुअल गारंटी देता है कि वे atomically निष्पादित होते हैं, एक अविभाज्य चरण के रूप में।

Stores परिणामों को arrays और variables में सहेजते हैं, और एक फ़ंक्शन उनका उपयोग stack पर अपने scratch space में मान रखने के लिए करता है। एक store लक्ष्य पते पर सभी 4 bytes को अधिलेखित करता है। उदाहरण मेमोरी में एक labeled स्थान पर 99 लिखता है, जो वहाँ पहले से मौजूद था उसे बदल देता है। मेमोरी उस मान को तब तक रखती है जब तक कोई अन्य store उसे अधिलेखित न कर दे, एक रजिस्टर के विपरीत।

उदाहरण

la t0, slot
li t1, 99
sw t1, 0(t0)   # memory at slot now holds 99