mulh

mulh

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

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

विवरण

mulh किसी गुणनफल के ऊपरी 32 बिट लौटाता है। दो 32-बिट संख्याओं का गुणनफल 64 बिट तक चौड़ा हो सकता है, जबकि एक रजिस्टर 32 बिट रखता है। mul निर्देश निचले 32 बिट रखता है और बाकी को छोड़ देता है। mulh (multiply high) ऊपरी 32 बिट रखता है।

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

ऊपरी आधा हिस्सा ओवरफ़्लो दर्शाता है, जिसका अर्थ है कि गुणनफल 32 बिट के लिए बहुत बड़ा है। ऊपरी आधे हिस्से में एक सार्थक मान का अर्थ है कि गुणनफल एक रजिस्टर में नहीं समाता। बहुत बड़ी संख्याओं पर अंकगणित और क्रिप्टोग्राफी दोनों हिस्सों पर निर्भर करते हैं।

RISC-V मैनुअल mulh के अलावा दो और प्रकार परिभाषित करता है। mulhu दो अहस्ताक्षरित संख्याओं को गुणा करता है, और mulhsu rs1 में एक हस्ताक्षरित संख्या को rs2 में एक अहस्ताक्षरित संख्या से गुणा करता है। मैनुअल के अनुसार, mulhsu बहुशब्द हस्ताक्षरित गुणन में प्रकट होता है, जहाँ एक संख्या का सबसे महत्वपूर्ण शब्द, जो चिह्न बिट रखता है, दूसरे के कम महत्वपूर्ण शब्दों से गुणा किया जाता है, जो अहस्ताक्षरित हैं।

h का अर्थ high है। यह संस्करण अपने ऑपरेंड को हस्ताक्षरित मानता है, इसलिए वे ऋणात्मक हो सकते हैं। RISC-V विनिर्देश अहस्ताक्षरित प्रकार भी परिभाषित करता है, और यह सिम्युलेटर हस्ताक्षरित mulh प्रदान करता है। सभी गुणा और भाग निर्देशों की तरह, कोई स्थिरांक रूप मौजूद नहीं है, इसलिए दोनों इनपुट रजिस्टरों से आते हैं।

उदाहरण

li t0, 100000
li t1, 100000
mulh t2, t0, t1   # t2 = 2 (high bits of 100000 * 100000)