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