assembly - Help with assembler code -


  पुश ईएक्स पुश ईएनसीक्स और ईएक्स, 0x3 सी आरओएएएक्स, 1 आरओएएएक्स, 1 जीपी ईएक्सएक्स ईडीएक्स, ईएक्स पॉप कोई भी मुझे यह समझने में सहायता करता है कि यह कोड क्या टिप्पणी कर रहा है और हम ऐसा रूटीन जैसे और क्या करते हैं, और क्या कर सकते हैं? ? धन्यवाद   

  पुश ईएक्स - पुश ईसीएक्स को ढेर करने के लिए ईएक्स बचाता है - ईएक्स को स्टैक और ईएक्स से बचाता है, 0x3C - 0x3c (111100 में द्विआधारी) के साथ तार्किक और रजिस्टर ईएक्स - इसका मतलब है कि बिट 2 से शुरू होने वाले केवल 4 बिट दिलचस्प हैं - सी में: a = a & amp; 0x3C; रोअर ईएक्स, 1 - एक बिट दाएं को घुमाने - सी में: a = a & gt; & gt; 1; रोअर ईएक्स, 1 - एक बिट दाएं को घुमाने - सी में: a = a & gt; & gt; 1; तो इस आदेश के बाद इन 4 रोचक बिट्स की स्थिति 0 से शुरू हो; इंक ईएक्स - इन 4 बीट्स मूल्य को एक-एक करके सी: ए ++; Mov edx, eax - copy value ex रजिस्टर से edx pop eax लोड मान को स्टैक (मूल्य जो कि पहले से एक्सक्लोज़ में था) से पंजीकृत करने के लिए और इसे ईएक्स रजिस्ट्री xor eax, edx - xor मूल्य से स्टैक (पहले ईसीएक्स) से बढ़ाकर 4 बीट्स के साथ कॉपी करें मूल्य - सी में: बी = बी ^ ए; पॉप एक्सएक्स - लोड मान से स्टैक (वैल्यू जो पहले ईएक्स में था) और इसे एसीएक्स रजिस्ट्री एक्सओआर ईएक्स, एक्सक्साइड-एक्सयर मान से स्टैक (पहले ईएक्स) से एक बार फिर कॉपी - सी में: सी = सी ^ बी; Rol al, 1 - एक बिट द्वारा अंतिम बाइट (एएल) रजिस्ट्री की ईएक्स - में घुमाएगी- सी: सी = (अहस्ताक्षरित चार) सी & lt; & lt; 1; फ़ंक्शन से रिटर्न - रिटर्न - शायद ईएक्स में यह है कि रिटर्न वैल्यू है   

इतना अधिक या कम यह है कि यह फ़ंक्शन C

  अहस्ताक्षरित चार func1 (अहस्ताक्षरित int parm1, insigned int parm2) {अहस्ताक्षरित int एक = par1 & amp; 0x3C; ए = ए & gt; & gt; 1; ए = ए & gt; & gt; 1; एक ++; ए = पर्म 2 ^ ए; ए = पर्म 1 ^ ए; वापसी (अहस्ताक्षरित चार) एक & lt; & lt; 1; }    

Comments