मैं रिचर्ड सी। डेटर द्वारा "80x86 असेंबली भाषा और कंप्यूटर आर्किटेक्चर का परिचय" शीर्षक वाला पाठ्यपुस्तक पढ़ रहा हूं < P> मुझे स्मृति के बारे में एक सवाल है 'mov'e opcode यहां पाठ का हिस्सा मैं भी जिक्र कर रहा हूं:
"आकृति 4.1 नीचे जारी रखने के लिए, अगली पंक्ति तात्कालिक-स्मृति-चाल के लिए है। इन निर्देशों में से प्रत्येक के पास ऑपोड C6, एक मॉड आरआर / एम बाइट, अतिरिक्त है पता बाइट्स (यदि आवश्यक हो), और अंत में एक बाइट जिसमें तात्कालिक ऑपरेंड शामिल है। ऊपर वर्णित के रूप में मेमोरी-टू-रजिस्टर चाल के लिए पते को एन्कोड किया गया है। उदाहरण के लिए, उदाहरण के लिए, छोटे से संपर्क स्मृति में एक बाइट का संदर्भ देता है अनुदेश mov smallcounter, 100 को इकट्ठा किया जाता है, कोडल ऑब्जेक्ट कोड के 7 (3 + 4) बाइट उत्पन्न करेगा, C6 05 xx xx xx xx 64 , जहां Xx xx xx xx मेमोरी में पते का प्रतिनिधित्व करता है, और 64 का बाइट-साइज हैक्स संस्करण 100 है। मॉडरेड / एम बाइट 05 00 000 101, डायरेक्ट मेमोरी एड्रेसिंग के लिए मॉड = 00 और आर / एम = 101 Reg फ़ील्ड के साथ की जरूरत नहीं है और 000 के लिए सेट है। एक और उदाहरण के रूप में, mov BYTE PTR [edx], -1 पर विचार करें स्मृति गंतव्य के साथ अप्रत्यक्ष मोड रजिस्टर। Opcode अभी भी है सी 6 और तत्काल बाइट (जो हमेशा कॉम Es पिछले) अब -1 के लिए एफएफ है दूसरा बाइट ModR / M बाइट मोड = 00 के साथ अप्रत्यक्ष रजिस्टर के लिए, Reg = 000 (अप्रयुक्त), और आर / एम = 010 ईडीएक्स के लिए, 00 000 010 या 02 बना रहा है। ऑब्जेक्ट कोड सी 6 02 एफएफ के लिए है "पृष्ठ 9 2, अध्याय 4, खंड 1 - डेटा की प्रतिलिपि
चित्रा 4.1 - हकदार बाइट गंतव्य के साथ चलन निर्देश - चार स्तंभों वाला एक चार्ट है, पहला स्थान गंतव्य, स्रोत सूची दूसरी, Opcode लिस्टिंग तीसरा, और चौथा वस्तु ऑब्जेक्ट कोड के बाइट्स की सूची। उपरोक्त हिस्से की चार्ट में रेखा भी उल्लेख कर रही है: गंतव्य: स्मृति बाइट स्रोत: तत्काल बाइट Opcode: ऑब्जेक्ट कोड के C6 बाइट: 3 +
मुझे यह सब माफ़ करने के लिए माफ़ कर दो, लेकिन मैं आपके लिए चाहता हूं और मैं उसी पृष्ठ पर रहूंगा जो मेरी किताब कह रही है। मैं छोटे से संपर्क के साथ भाग को समझता हूं, लेकिन मुझे क्या परेशान करता है, यह है कि mov BYTE PTR [edx] के लिए ऑब्जेक्ट कोड , -1 स्मृति में किसी पते के बिना है। यह अप्रत्यक्ष मोड में है, इसलिए edx ले जा रहा है एक सूचक के रूप में जगह है, तो ऑब्जेक्ट कोड में स्मृति में पता क्यों नहीं है यह भी इंगित कर रहा है? क्या यह केवल चर के लिए है जैसे कि छोटे से क्वंटर के opcode का कोई पता है? अन्य कथन के मुकाबले तुलना में छोटी सी < के लिए जिस तरह से यह opcode है, समग्र रूप से क्यों?
धन्यवाद, -Dan
ऑब्जेक्ट कोड मेमोरी में पता नहीं है क्योंकि उस पते को असेंबली / लिंक समय में नहीं जाना जा सकता है।
स्मृति संशोधित किए जाने वाले पते को तब तक ज्ञात नहीं किया जाता जब तक कि निर्देश निष्पादित नहीं किया जाता है। Opcodes कहते हैं, "एडीएक्स रजिस्टर से ऐडोडोड बाइट्स की बजाय एड्रेस रिकॉर्डेड से एड्रेस प्राप्त करें।"
ओपरोड बाइट्स को देखें।
C6 05 Xx xx xx xx एफएफ & lt; - xx xx xx xx c6 02 एफएफ & lt; - एडीएक्स रजिस्टर में आयोजित पते पर स्टोर एफएफ पते पर मान स्टोर करें इसलिए प्राप्त करने के बजाय एपोडोड्स से पता, सीपीयू को एडीएक्स रजिस्टर से गंतव्य पता मिलता है।
एक और चीज के बारे में सोचने के लिए यह कोड:
mov edx, offset smallCounter mov बाइट पीटीआर [एडीएक्स], 100 एक ही बात करता है
< कोड> mov बाइट पीटीआर [छोटे से कंट्रायर], 100 ठीक है, सिवाय इसके कि पूर्व में ईडीएक्स रजिस्टर को संशोधित करता है। लेकिन दोनों smallCounter पर स्मृति में मूल्य 100 स्टोर करते हैं।
यह चीजों को स्पष्ट करने में मदद करता है?
No comments:
Post a Comment