sll

sll

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

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

विवरण

sll किसी संख्या के बिट्स को बाईं ओर खिसकाता है। एक रजिस्टर में एक पंक्ति में 32 बिट्स होते हैं, और एक शिफ्ट पूरी पंक्ति को कुछ स्थानों तक बाईं या दाईं ओर खिसका देता है। यह नाम shift left logical का संक्षिप्त रूप है। नीचे दिए गए रूप में, rs1 में मौजूद मान को rs2 में दिए गए स्थानों की संख्या तक बाईं ओर खिसकाया जाता है, और परिणाम rd में जाता है।

sll rd, rs1, rs2

जैसे-जैसे बिट्स बाईं ओर खिसकते हैं, दाईं ओर की खाली जगहों को शून्य भर देते हैं, और बाईं सीमा से आगे धकेले गए बिट्स हटा दिए जाते हैं।

एक स्थान बाईं ओर शिफ्ट करने से किसी संख्या का मान दोगुना हो जाता है, उसी तरह जैसे किसी दशमलव संख्या के अंत में 0 जोड़ने से वह दस गुना हो जाती है। 1 का शिफ्ट 2 से गुणा करता है, 2 का शिफ्ट 4 से गुणा करता है, और 3 का शिफ्ट 8 से गुणा करता है। एक शिफ्ट प्रोसेसर को गुणा से कम खर्च पड़ता है, जिससे यह दो की घातों से गुणा करने का तेज़ रास्ता बन जाता है। ऐरे एक्सेस इसी पर निर्भर करता है, क्योंकि प्रत्येक एलिमेंट का पता पिछले वाले से बाइट्स की एक निश्चित दो-की-घात संख्या आगे होता है।

RISC-V मैनुअल के अनुसार, शिफ्ट की मात्रा रजिस्टर rs2 के निचले 5 बिट्स में रखी जाती है। पाँच बिट्स 0 से 31 स्थानों तक को कवर करते हैं, इसलिए rs2 के शेष बिट्स का कोई प्रभाव नहीं पड़ता। मैनुअल sll को लॉजिकल लेफ्ट शिफ्ट कहता है, जिसका अर्थ है कि निचले बिट्स में शून्य प्रवेश करते हैं।

इस रूप में शिफ्ट की मात्रा एक रजिस्टर से आती है, जो प्रोग्राम चलने के दौरान गणना की गई मात्रा के लिए उपयुक्त है। निश्चित मात्रा के लिए slli का उपयोग करें। उदाहरण 3 को 2 स्थान बाईं ओर शिफ्ट करता है, जिससे इसे 4 से गुणा करके 12 प्राप्त होता है।

उदाहरण

li t0, 3
li t1, 2
sll t2, t0, t1   # t2 = 12