mul

mul

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

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

विवरण

mul दो रजिस्टरों का गुणा करता है। यह rs1 और rs2 को पढ़ता है, उन मानों का गुणा करता है, और गुणनफल को rd में लिखता है। नीचे दिया गया प्रारूप का अर्थ है rd = rs1 * rs2।

mul rd, rs1, rs2

RISC-V परतों में संगठित है जिन्हें एक्सटेंशन कहा जाता है। गुणा और भाग M नामक एक्सटेंशन से संबंधित हैं, जिसे सबसे छोटा RISC-V कोर छोड़ सकता है। यह सिम्युलेटर इसे शामिल करता है, क्योंकि इसका पूरा नाम RV32IM M पर समाप्त होता है, इसलिए mul और div उपलब्ध हैं। M के बिना एक प्रोसेसर को यह काम सॉफ़्टवेयर में करना पड़ता है।

दो 32-बिट संख्याओं का गुणनफल 64 बिट तक पहुँच सकता है, जो एक रजिस्टर की क्षमता से अधिक है। mul निचले 32 बिट रखता है। छोटे मानों के लिए यही पूरा उत्तर होता है। ऊपरी 32 बिट एक अलग निर्देश, mulh, से आते हैं। साइन्ड और अनसाइन्ड इनपुट समान निचले 32 बिट उत्पन्न करते हैं, इसलिए एक निर्देश दोनों को कवर करता है।

जब गुणनफल के दोनों हिस्सों की आवश्यकता होती है, तो RISC-V मैनुअल निर्देशों की एक निश्चित जोड़ी की सिफारिश करता है। एक mulh निर्देश (या उसके अनसाइन्ड रूपों में से एक) ऊपरी हिस्सा प्रदान करता है, और समान स्रोत रजिस्टरों के साथ समान क्रम में mul निचला हिस्सा प्रदान करता है। ऊपरी हिस्से का गंतव्य rs1 या rs2 नहीं हो सकता। एक प्रोसेसर तब दोनों निर्देशों को एक गुणन में संयोजित कर सकता है।

दो की घात (2, 4, 8, 16 इत्यादि) से गुणा करने के लिए बाएँ शिफ्ट का उपयोग किया जा सकता है। 3 स्थान बाएँ शिफ्ट करने से 8 से गुणा होता है, और एक शिफ्ट की लागत गुणा से कम होती है (slli देखें)। कंपाइलर यह प्रतिस्थापन स्वचालित रूप से करते हैं। उदाहरण 6 को 7 से गुणा करता है और t2 में 42 छोड़ता है।

उदाहरण

li t0, 6
li t1, 7
mul t2, t0, t1   # t2 = 42