sub

sub

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

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

विवरण

sub एक रजिस्टर में मौजूद मान को दूसरे से घटाता है और परिणाम को तीसरे रजिस्टर में लिखता है। यह रजिस्टरों पर काम करता है, जो प्रोसेसर के अंदर छोटे क्रमांकित भंडारण स्लॉट होते हैं और प्रत्येक में एक 32-बिट संख्या होती है।

sub का स्वरूप नीचे दिखाया गया है, और परिणाम rd = rs1 - rs2 है। rd गंतव्य रजिस्टर है, जहाँ उत्तर जाता है। rs1 और rs2 स्रोत रजिस्टर हैं। क्रम मायने रखता है, और इसे उलटना शुरुआती लोगों के लिए एक आम चूक है।

sub rd, rs1, rs2

अगली पंक्ति t0 माइनस t1 की गणना करती है। बायां स्रोत वह मान है जिससे घटाया जाता है।

sub t2, t0, t1

एक स्थिर मान को घटाने के लिए कोई subi निर्देश नहीं है। addi नकारात्मक स्थिरांकों को स्वीकार करता है, इसलिए एक निश्चित संख्या को घटाने का अर्थ है उसके नकारात्मक को जोड़ना। अगली पंक्ति t0 को एक से कम करती है।

addi t0, t0, -1

RISC-V में zero नाम का एक विशेष रजिस्टर होता है जो हमेशा 0 मान रखता है। zero से किसी संख्या को घटाने पर उसका चिह्न बदल जाता है, इसलिए अगली पंक्ति t1 का ऋणात्मक मान t0 में रखती है। neg निर्देश इसका संक्षिप्त रूप है।

sub t0, zero, t1

RISC-V मैनुअल sub को rs1 से rs2 का व्ययंग मानता है। ओवरफ्लो को अनदेखा कर दिया जाता है और परिणाम के केवल लो XLEN बिट्स rd पर लिखे जाते हैं, जहाँ XLEN बिट्स में रजिस्टर की चौड़ाई है, जो यहाँ 32 है। मैनुअल में रजिस्टर x0 को भी सूचीबद्ध किया गया है, जिसे यह सिम्युलेटर zero नाम देता है, और इसे सभी बिट्स 0 वाले मान के साथ हार्डवायर्ड बताया गया है।

उदाहरण में, 10 माइनस 4 का मान t2 में 6 आता है। दोनों स्रोतों को बदलने पर -6 आता है, जिसे प्रोसेसर नकारात्मक संख्याओं के लिए अपनी खुद की योजना में संग्रहीत करता है।

उदाहरण

li t0, 10
li t1, 4
sub t2, t0, t1   # t2 = 6