2012-07-28 10 views
6

इन नेट में संभावित ओपकोड क्या हैं जो किसी विधि के अंतिम निर्देश के रूप में मौजूद हो सकते हैं।किसी विधि के अंतिम निर्देश के लिए संभावित ओपकोड क्या हैं?

फिलहाल मुझे पता है कि यह

लेकिन यह यह किसी भी अन्य opcodes होने के लिए संभव है? और यदि ऐसा है तो कौन सा कोड (सी # पसंद करते हैं) उन्हें उत्पन्न करेगा?

तक "पिछले" मेरा मतलब है "अंतिम OPCODE विधि शरीर के अनुसार"

+2

"आखिरी" से, क्या आपका मतलब है कि विधि निकाय में परिभाषित अंतिम ओपोड, या क्या आपका मतलब अंतिम ऑपोड निष्पादित है? (एक विधि को नीचे से बाहर निकलने की आवश्यकता नहीं है) –

+0

@MarcGravell "विधि निकाय में परिभाषित अंतिम ओपोड"। प्रश्न – Simon

+0

कूल में स्पष्ट किया गया है, तो मुझे संदेह है कि मैंने फ्रेडरिक की पोस्ट में जो टिप्पणी जोड़ा है, उस पर लागू होता है –

उत्तर

2

throw एक विधि में पिछले opcode हो सकता है, तो संभावना है कि jmp भी उत्तीर्ण कर रहे हैं।

इसके अलावा, अगर हम एक पुनरावर्ती विधि जिसका बाहर निकलने हालत अंत में स्थित नहीं है पर विचार करें, पिछले opcode एक call या एक ret के बजाय tail.call हो सकता है।

अद्यतन: अच्छा, नहीं, यह नहीं होगा। मार्क Gravell हक उसकी टिप्पणी में बताते हैं, tail.call के लिए दस्तावेज़ का कहना है:

ढेर तर्क निम्नलिखित कॉल द्वारा स्थानांतरित किया जा रहा के अलावा रिक्त होना ही चाहिए। कॉल निर्देश के बाद निर्देश ret होना चाहिए।

अद्यतन 2:br और br.s की तरह बिना शर्त शाखा opcodes भी एक विधि के अंतिम निर्देश हो सकता है अगर इसके निकास बिंदु होता है पहले (धन्यवाद फिर मार्क)।

+1

"कॉल" के बाद भी इसके बाद एक रिट की आवश्यकता होगी, iirc; tail.call मुझे कम यकीन है (अद्यतन: "पूंछ पृष्ठ से, कॉल निर्देश के बाद निर्देश एक ret होना चाहिए")। मुझे लगता है कि "jmp" वैध है, यद्यपि। –

+2

2 को मारने के लिए दो और मैंने मारे गए: बिना शर्त शाखा: 'br' और' br.s' (विधि * बाहर निकलने * उच्चतम के साथ) - "आखिरी" (मैं ओपी से पूछूंगा) के अर्थ के आधार पर –

संबंधित मुद्दे