1
У меня вопрос о CIL. Что такое команда beq
(Филиал, если таковая имеется) в CIL?Ветвление в CIL
Я читал об этом здесь: List of CIL instructions
У меня вопрос о CIL. Что такое команда beq
(Филиал, если таковая имеется) в CIL?Ветвление в CIL
Я читал об этом здесь: List of CIL instructions
beq target
В передает управление инструкции («скачки»), чтобы предназначаться, если два верхних значения на стеке равны. Это то же самое, что и инструкция ceq
, за которой следует brtrue target
. Данный метод:
static int BranchTest(int value1, int value2)
{
if (value1 == value2)
{
return SomeMethod(0);
}
else
{
return SomeMethod(1);
}
}
это может быть (но это только examplatory код) переводится на:
.method private hidebysig static
int32 BranchTest (
int32 value1,
int32 value2
) cil managed
{
// ...
IL_0000: ldarg.0 // load value1 on stack
IL_0001: ldarg.1 // load value2 on stack
IL_0002: beq IL_000b // compare and jump conditionaly
IL_0004: ldc.i4.1
IL_0005: call int32 ConsoleLeak.Program::SomeMethod(int32)
IL_000a: ret
IL_000b: ldc.i4.0
IL_000c: call int32 ConsoleLeak.Program::SomeMethod(int32)
IL_0011: ret
}
Вы говорите, что вы полностью понимаете все остальные инструкции * кроме * 'beq'? Если да, то что с ним вы считаете непонятным/не согласным с другими инструкциями? Или мы должны ожидать поток вопросов, каждый из которых касается одной инструкции? –
Остальное кажется довольно ясным, но я не понимаю концепции ветвления. – BendEg
Если (a == b) goto –