मैं कुछ एमुलेटर कोड के माध्यम से पढ़ रहा हूँ और मैंने कुछ सही मायने में अजीब गिना है:
switch (reg){
case 'eax':
/* and so on*/
}
यह कैसे हो सकता है? मुझे लगा कि आप केवल switch
अभिन्न प्रकार पर ही कर सकते हैं। क्या कुछ स्थूल प्रवंचना चल रही है?
int
, इसलिए यह कानूनी है। हालाँकि, बहु-वर्ण स्थिरांक का मान कार्यान्वयन-परिभाषित है, इसलिए कोड किसी अन्य संकलक पर अपेक्षित रूप से काम नहीं कर सकता है। उदाहरण के लिए, eax
हो सकता है 0x65
, 0x656178
, 0x65617800
, 0x786165
, 0x6165
, या कुछ और।
'eax' != 'ebx'
, निश्चित रूप से, तब तक यह केवल आपके उदाहरणों में से एक या दो को विफल करता है। हालांकि कहीं न कहीं कुछ कोड हो सकता है जो प्रभाव ग्रहण करता है *(int*)("eax") == 'eax'
, और इसलिए आपके अधिकांश उदाहरणों को विफल करता है।
'eax'
बराबर 'ebx'
या से तुलना कर सकते हैं 'ax'
, और स्विच स्टेटमेंट के अनुसार काम नहीं करेगा।
'eax'
और यह निरंतर पूर्णांक मान