पहचानकर्ता के बाद '$' क्या होता है?
x86 असेंबली, & टी वाक्यविन्यास।
पहचानकर्ता के बाद '$' क्या होता है?
x86 असेंबली, & टी वाक्यविन्यास।
एटी & टी सिंटैक्स $
का मतलब है कि स्मृति पते के बजाय तत्काल स्थिरता के रूप में क्या चल रहा है। दूसरे शब्दों में,
movl $_start, %eax
% eax में प्रतीक _start
का पता लोड करता है;
movl _start, %eax
% eax में _start
के पते पर स्मृति से 4 बाइट पढ़ता है। यदि आप दोनों के डिस्सेप्लर को देखते हैं:
0: b8 00 00 00 00 mov $0x0,%eax
1: R_386_32 _start
5: a1 00 00 00 00 mov 0x0,%eax
6: R_386_32 _start
आप देख सकते हैं कि केवल अंतर ही ऑपोड है। आसान, अगर कुछ हद तक स्वयं सेवापूर्वक नाम दिया गया है, Intel® 64 and IA-32 Architectures Software Developer's Manual (आप वॉल्यूम 2 चाहते हैं, जो निर्देश सेट संदर्भ है) कहता है कि बीएफ एन्कोड के माध्यम से बी 8 को ऑपोड करता है "रजिस्टर में तुरंत 16/32-बिट स्थिर लोड करें" (यह कोड निर्धारित होने वाला है 32-बिट कोड सेगमेंट में लोड किया गया है, इसलिए यह 32-बिट लोड है; 16-बिट लोड के लिए, आपके पास "ऑपरेंड साइज ओवरराइड" उपसर्ग बाइट, 66 होगा) और ऑपोड ए 1 एन्कोड "लोड 32-बिट मात्रा ईएक्स में डीएस (या उचित उपसर्ग बाइट के साथ) से 32-बिट ऑफ़सेट निर्दिष्ट किया गया है। " ठेठ "फ्लैट" मेमोरी मॉडल के साथ, यह निर्दिष्ट 32-बिट पूर्ण पते पर लोड 32-बिट मात्रा के नैतिक समकक्ष है "लेकिन आप देख सकते हैं कि कैसे x86 को मशीन स्तर पर हास्यास्पद रूप से जटिल के रूप में अपनी प्रतिष्ठा मिली।
a: bb 00 00 00 00 mov $0x0,%ebx
b: R_386_32 _start
f: 8b 1d 00 00 00 00 mov 0x0,%ebx
11: R_386_32 _start
लोड-तत्काल अभी भी एक एक बाइट अनुदेश संकार्य गिनती नहीं के साथ किया जा सकता है (यह है:
मामले आप सोच रहे हैं में, यह यह कैसा अगर हम EBX बजाय प्रयोग किया लगेगा है बी 9 के बजाय बीबी, जैसा कि आप उम्मीद कर सकते हैं, क्योंकि आंतरिक रजिस्टर ऑर्डर एएक्स, सीएक्स, डीएक्स, बीएक्स, एसपी, बीपी, एसआई, डीआई - गंभीरता से है) लेकिन लोड-से-पूर्ण-पता अब दो है -बाइट निर्देश, 8 बी 1 डी; दूसरा बाइट वह है जो इंटेल ने "मॉडआरएम" बाइट कहा है, जो ईबीएक्स दोनों को निर्दिष्ट करता है और यह कि एक पूर्ण 4-बाइट पता निम्नानुसार है।
आम तौर पर इसका अर्थ है "तत्काल" मूल्य, यानी एक संख्या, एक अन्य रजिस्टर मूल्य के विपरीत, स्मृति से पुनर्प्राप्त कुछ इत्यादि। इसलिए, इस मामले में, यह प्रतीक _start
से जुड़े नंबर को ईएक्स रजिस्टर में ले जा रहा है ।
यह सटीक प्रश्न [ग्राउंड अप से प्रोग्रामिंग] के लिए अभ्यासों में से एक है (http://programminggroundup.blogspot.ca/2007/01/programming-from-ground-up.html)। – user240515