मुझे वर्तमान में ऑपरेटरों के साथ नई समस्या का सामना करना पड़ रहा है। निम्नलिखित कोड का उपयोग करके, मैं आउटपुट बनाना चाहता हूं जो सी # में if ... else
जोड़ी का उपयोग करते समय समान होगा।सी # प्रतिबिंब: यदि ... और?
var method = new DynamicMethod("dummy", null, Type.EmptyTypes);
var g = method.GetILGenerator();
g.Emit(OpCodes.Ldstr, "string");
g.Emit(OpCodes.Ldstr, "string");
g.Emit(OpCodes.Call, typeof(String).GetMethod("op_Equality", new Type[]{typeof(string), typeof(string)}));
g.Emit(OpCodes.Ldc_I4, 0);
g.Emit(OpCodes.Ceq);
g.Emit(OpCodes.Brtrue_S,);
var action = (Action)method.CreateDelegate(typeof(Action));
action();
Console.Read();
मेरे प्रश्न हैं:
- मैं एक निर्देश का पता शाखा opcodes के लिए एक पैरामीटर के रूप में यह पारित करने के लिए कैसे मिल सकता है?
- वहाँ
BR
औरBR_S
,Brtrue
औरBrtrue_S
,Brfalse
औरBrfalse_S
और इसी तरह के निर्देश के बीच कोई अंतर है?
धन्यवाद।
जैसा कि अन्य ने उल्लेख किया है, शाखा निर्देशों के "_S" संस्करण 4-बाइट ऑफ़सेट के बजाय 1-बाइट लेते हैं। यदि आप जानते हैं कि आपकी शाखा हमेशा उपलब्ध सीमा के भीतर होगी (-128 बाइट्स +127 बाइट्स), तो आप उन्हें उपयोग करके अधिक कॉम्पैक्ट कोड प्राप्त करेंगे, हालांकि यदि आप उन्हें ऑफ़सेट के साथ लेबल पर कूदने के लिए उपयोग करने का प्रयास करते हैं इस सीमा, प्रतिनिधि बनाने के दौरान एक अपवाद फेंक दिया जाएगा। – Iridium