recursion - Recursive Assembly Program -
निम्नलिखित कोड सीधे पुस्तक से है:
INCLUDELIB C: \ Irvine \ Kernel32.lib शामिल सी: \ इरविन \ Irvine32.lib सी शामिल हैं: \ इरविन \ Irvine32.inc। मुख्य कुंजी प्रोक पुश 5; कैल्क 5! फैक्टोरियल कॉल; फ़ैक्टिकल (ईएएडी) की गणना करें WriteDec; इसे सीआरएलएफ एक्जिट मेन ईएनडीपी पर कॉल करें; ------------------------------------------ ---------------- फैक्टोरियल प्रोसी; एक फैक्टरियल की गणना करता है ; प्राप्त करता है: [ईबीपी + 8] = एन, गणना की संख्या; रिटर्न: ईएक्स = एन के फैक्टरैरल; ----------------------------------------- ----------------- ईबीपी मूव ईबीपी, ईएसपी mov ईएक्स, [ईबीपी +8] पुश; एन सीएपी ईएक्स, 0 प्राप्त करें; N & gt; 0? जे एल 1; हाँ: जारी रखें mov eax, 1; नहीं: 0 के मूल्य के रूप में 1 वापसी! जेएमपी एल 2; और कॉलर L1: dec eax पर लौटें; फैक्टोरियल (एन -1) ईएक्स कॉल फ़ैक्टिकल; प्रत्येक बिंदु पर निष्पादित होने पर इस बिंदु से निर्देश; रिकर्सिव कॉल रिटर्न रिटर्नफैक्ट: mov ईबेक्स, [ईबीपी +8]; एन एमयूएल ईबीएक्स प्राप्त करें; ईडीएक्स: ईएक्स = ईएक्स * ईबीएक्स एल 2: पॉप ईबीपी; ईएसीएस 4 रिटर्न; साफ करें स्टैक फ़ैक्टोरियल ENDP END मुख्य
अब, जब मैं कोड को डिबग करने जा रहा हूं, वह काम नहीं करता है। ईएक्स में मूल्य 78 तक समाप्त होता है, जब 5 का मान! 120 है। क्या मुझे कुछ रजिस्टरों को 0 से शुरू करने की आवश्यकता है या क्या मैं कुछ बड़ा लापता हूं? सही दिशा में एक कुहनी से हलका धक्का बहुत सराहना की जाएगी धन्यवाद!
कोई बात नहीं, मैंने इसे सोचा (और झुंझल बेवकूफ महसूस किया) मान को हेक्साडेसीमल प्रारूप में वापस नहीं भेजा जा रहा है और दशमलव स्वरूप नहीं। हेक्साडेसिमल में 78 दशमलव में 120 में धर्मान्तरित होता है, इसलिए प्रोग्राम ठीक काम करता है। (अनावश्यक) पोस्ट के लिए क्षमा करें।
Comments
Post a Comment