bne

bne

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

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

विवरण

bne का अर्थ है branch if not equal, और यह beq का समकक्ष है। यह दो रजिस्टरों की तुलना करता है और जब वे भिन्न हों तो लेबल किए गए स्थान पर कूद जाता है। जब वे मेल खाते हैं, तो निष्पादन अगले निर्देश के साथ जारी रहता है। इसका रूप नीचे दिखाया गया है। शाखाएँ, लेबल और किसी शर्त पर कूदना beq पृष्ठ पर समझाया गया है।

bne rs1, rs2, label

साथ में, beq और bne हर equal और not equal निर्णय को संभालते हैं। Assembly अक्सर किसी शर्त को उलटे रूप में व्यक्त करती है। किसी कोड ब्लॉक को केवल तब चलाने के लिए जब दो मान समान हों, उस ब्लॉक के चारों ओर bne के साथ शाखा लें। जब मान भिन्न होते हैं तो कोड उस ब्लॉक को छोड़ देता है और जब वे मेल खाते हैं तो उसमें प्रवेश करता है।

bne किसी लूप को तब तक जारी भी रखता है जब तक कोई शर्त बनी रहती है। वह लूप जो किसी मान के लक्ष्य तक पहुँचने तक चलता है, अंत में एक bne के साथ समाप्त होता है जो शीर्ष पर वापस कूद जाता है। पाठ पढ़ना इसी पैटर्न का अनुसरण करता है, जहाँ लूप तब तक जारी रहता है जब तक वर्तमान अक्षर वह शून्य बाइट न हो जो अंत को चिह्नित करती है।

RISC-V मैनुअल कहता है कि beq और bne तब शाखा लेते हैं जब रजिस्टर rs1 और rs2 समान या असमान हों। ऑफ़सेट एक 12-बिट मान है जिसे 2 बाइट के गुणजों में गिना जाता है, इसलिए एक शाखा किसी भी दिशा में लगभग 4 KiB तक पहुँचती है, जहाँ एक KiB 1024 बाइट होता है।

bnez शून्य के साथ तुलना करने का संक्षिप्त रूप है, जो पूछता है कि कोई मान शून्य नहीं है या नहीं। bne में तुलना, जैसे beq में, बिट्स की सादी समानता है, इसलिए signed और unsigned पठन से कोई फर्क नहीं पड़ता।

उदाहरण

li t0, 1
li t1, 2
bne t0, t1, done   # t0 != t1, so jump to 'done'