bnez
छद्मlyszt.net bnez और अन्य RISC-V निर्देशों को अधिक विस्तार से कवर करता है।
विवरण
bnez तब शाखा करता है जब एक रजिस्टर में शून्य के अलावा कोई मान होता है। नाम का अर्थ है शून्य के बराबर न होने पर शाखा। नीचे दिया गया रूप तब लेबल पर कूदता है जब rs शून्य नहीं होता।
bnez rs, label
असेंबलर इस छद्म-निर्देश को नीचे दिए गए निर्देश में विस्तारित करता है, जो हमेशा शून्य रखने वाले रजिस्टर से तुलना करता है।
bne rs, zero, label
शून्य परीक्षण के लिए beqz देखें, और सामान्य शाखाओं के लिए beq देखें।
beqz अक्सर निकासों की रक्षा करता है, जबकि bnez अक्सर एक लूप को चलाता रहता है। जब तक पढ़े जाने वाले वर्ण शेष हैं, लूप स्कैनिंग जारी रखता है। जब तक काउंटर समाप्त नहीं हुआ है, यह चलता रहता है। एक सामान्य छोटा लूप समाप्ति एक रजिस्टर को घटाती है और मान शून्य न होने तक लूप करती है। यह एक घटाता है, फिर bnez के साथ शीर्ष पर वापस कूदता है।
bnez पहले से गणना किए गए सत्य या असत्य मानों पर भी कार्य करता है। सेट निर्देश जैसे slt एक रजिस्टर में 1 या 0 छोड़ते हैं, और उसके बाद का bnez उस परिणाम पर शाखा करता है। एक रजिस्टर जो हाँ या नहीं मान रखता है, उसे bnez से परीक्षण किया जा सकता है।
RISC-V मैनुअल एक कारण देता है कि इसकी शाखाएँ एक रजिस्टर की तुलना शून्य से करने के बजाय दो रजिस्टरों की तुलना क्यों करती हैं। शून्य के साथ तुलना करने के लिए एक गैर-तुच्छ सर्किट विलंब की आवश्यकता होती है, इसलिए यह लगभग उतना ही महंगा है जितना कि एक अंकगणितीय परिमाण तुलना। इसलिए bnez एक छद्म-निर्देश है जो bne के साथ zero का उपयोग करता है।
एक और सामान्य उपयोग परिणामों की जाँच करता है। जब एक फ़ंक्शन सफलता के लिए 0 और विफलता के लिए शून्य के अलावा कुछ लौटाता है, तो कॉलर कॉल के बाद नीचे दी गई पंक्ति का पालन करता है ताकि कुछ गलत होने पर त्रुटि हैंडलिंग पर कूद सके। यह रिटर्न कोड की जाँच का असेंबली रूप है।
bnez a0, error
विस्तृत होता है
bne rs, zero, label
असेंबलर इस छद्म-निर्देश को ऊपर सूचीबद्ध वास्तविक निर्देश या निर्देशों से बदल देता है।
उदाहरण
li t0, 5 bnez t0, done # t0 != 0, so jump to 'done'
