/ / कोड के इस सरल टुकड़े में क्या गलत है? - सभा

कोड के इस सरल टुकड़े में क्या गलत है? - सभा

मेरे पास कोड का निम्नलिखित टुकड़ा है, जो ब्रेकपॉइंट पर होना चाहिए, ईएक्सएक्स में 123 और एक्सएक्सएक्स में 321। किसी कारणवश ऐसा नहीं हो रहा है। किसी को भी यह समझाने की परवाह है कि क्यों?

    push ebp;
mov ebp, esp;
sub esp, 8;
mov [ebp-4], 123;
mov [ebp-8], 321;
mov eax, [ebp-4];
mov ecx, [ebp-8];
pop ebp; <------------- breakpoint here
retn;

मुझे लगता है कि जो गलत होना चाहिए वह यह है कि मैं नहीं कर सकता

mov [ebp-4], 123

?

बाकी सब मुझे ठीक लगता है।

धन्यवाद

संपादित करें: मूल्य हैं: ईएक्सएक्स 1505915; ecx 1720129;

उत्तर:

जवाब के लिए 8 № 1

आप स्मृति में बाइट मानों को संग्रहीत कर रहे हैं।

में बदलो

mov dword ptr [ebp - 4], 123
mov dword ptr [ebp - 8], 321

eax = 1505915 0x16FA7B है। आखिरी बाइट हेक्स में 7 बी है, जो दशमलव में 123 है। ecx = 1720129 0x1A3F41 है। हेक्स में 41 321 (141) की अंतिम बाइट है।


उत्तर № 2 के लिए 1

मैं इस धारणा के तहत था (और मैं गलत हो सकता है) कि आप "जैसे स्मृति पतों में मूल्यों को धक्का नहीं दे सकते। आपको प्रतिगमन जाना होगा:"

MOV EAX, 123
MOV [EBP-4], EAX

जैसा कि मैंने कहा, मैं गलत हो सकता हूं। लेकिन इसे छोड़ दो। निर्देश सेट मैनुअल को भी देखें। यह आपको दिखाता है कि आप किस मोड पर क्या संचालन कर सकते हैं।