Saturday 15 March 2014

assembly - MIPS function calling and stack pointer. Program not returning to main function -


मेरा कार्य निम्नलिखित सी कोड का अनुवाद MIPS विधानसभा में करना था।

  int तुलना (int a, int b) {यदि ((बी, ए) & gt; = 100) जोड़ें; दूसरा वापसी वापस; } Int जोड़ (int x, int y) {वापसी (x + y); }  

यह वही है जो मुझे लिखने में कामयाब हो गया, लेकिन किसी तरह यह मूल्य वापस नहीं करता है। कार्यक्रम की जांच करने के लिए मैंने दिए गए तर्कों के मामले में 5 को वापस करना चाहिए। मैं अनुमान लगा रहा हूं कि स्टैक पॉइंटर और रिटर्न पता के साथ समस्या को करना है I मार्स सिम्युलेटर मुझे बताता है: "- प्रोग्राम समाप्त हो रहा है (नीचे से गिरा दिया गया) -"

एमएएसएस पर संकलित एमआईपीएस कोड:

  .data .text .globl मुख्य मुख्य: addiu $ a0, $ शून्य, 10 जोड़ें $ a1, $ शून्य, 5 jal addu $ s1, $ v0, $ zero addu $ a0, $ शून्य, $ s1 # प्रिंट मूल्य ली $ v0, 1 syscall की तुलना करें Li $ v0, 10 syscall तुलना करें: addiu $ sp, $ sp, -12 # 3 आइटम स्व $ आरए, 0 ($ sp) sw $ a0, 4 ($ sp) के लिए # stjusting stac # वापसी वाला पता और तर्क sw $ a1 , 8 ($ sp) lw $ a0, 8 ($ sp) #swaping आर्गुमेंट्स lw $ a1, 4 ($ sp) jal addition #calling addition cvc blt $ v0, 100, return_b #if add (b, a) & lt; 100 वापसी बी LW $ v0, 4 ($ sp) #else j return_value return_b: lw $ v0, 8 ($ sp) रिटर्न_वल्यू: lw $ ra, 0 ($ sp) lw $ a0, 4 ($ sp) #restoring arguemtns और वापसी का पता lw $ a1, 8 ($ sp) addiu $ sp, $ sp, 12 jr $ ra अतिरिक्त: addu $ v0, $ a0, $ a1 jr $ ra  
< P>

No comments:

Post a Comment