मैंने एक प्रोग्राम लिखा है जो कुछ संख्याओं का इनपुट लेता है और प्रत्येक के माध्यम से लूप करता है। फिर इसे अधिकतम स्वैप करना चाहिए यदि वर्तमान संख्या मेरे पिछले अधिकतम से बड़ी है। यदि यह अंतिम संख्या (मेरी स्ट्रिंग के अंत में) पर है, तो इसे बाहर निकलना चाहिए।

मैं डीबग करने की कोशिश कर रहा हूं और मैं समझता हूं कि मुझे वास्तव में समझ में नहीं आया कि पॉइंटर्स कैसे काम करते हैं और जब मुझे अपने रजिस्टरों के चारों ओर ब्रैकेट का उपयोग करना होता है।

कोड इस प्रकार है:

.data
first: .word 5, 6, -128, -5, 260, 34, 3, 20, -1
last: .word 44

max: .space 4  


.text
lw $t0, first
lw $t1, last
lw $t5, max


sw $t5, $t0
loop: 

beq $t0, $t1, ex
addi $t0, $t0, 4
bgt $t0, $t5, swapmax
j loop


swapmax: 
lw $t0, ($t5)

ex: 
lw $t5, max
li $v0, 10
syscall

मुझे कोष्ठक की आवश्यकता कहाँ है और क्यों?

कार्यक्रम संकलित करता है, लेकिन मुझे एक त्रुटि मिलती है:

0x800000180 . पर गैर-निर्देश निष्पादित करने का प्रयास

इस त्रुटि का मतलब क्या है?

1
Andre 1 अगस्त 2020, 20:15

1 उत्तर

इस त्रुटि का मतलब क्या है?

0x800000180 कर्नेल अपवाद हैंडलर का पता है।

यह वहां जा रहा है क्योंकि आपके कोड को अपवाद मिल रहा है।

ऐसा लगता है कि आपके सिम्युलेटर में अपवाद हैंडलर स्थापित नहीं है, इसलिए इसे अपवाद हैंडलर चलाने की कोशिश में एक और अपवाद मिलता है।

यह देखने के लिए कि आपके कोड में कौन सा निर्देश दोहरे अपवाद को ट्रिगर कर रहा है, अपने कोड को 0x800000180 पर जाने तक सिंगल स्टेप करें, और उसमें से एक निर्देश वापस जाएं। यह लगभग निश्चित रूप से एक लोड या स्टोर निर्देश होगा जिसे इसके मेमोरी एड्रेस के लिए खराब पॉइंटर दिया गया था।

इसके अलावा, @ वागर के सुझावों पर ध्यान दिया जाना चाहिए।

2
Erik Eidt 1 अगस्त 2020, 22:13