MV
Size: a a a
MV
SR
lp
SR
SR
AS
MP
SR
MP
MV
MP
MP
M
MV
MV
MP
で
MV
for(int i = 0; i < x; ++i) {без оптимизаций будет скомпилировано в
const int r = rand();
if(r % 2 == 0) {
first_even = r;
break;
}
}
// блок, оформляющий цикл, нужен, чтобы выйти из него по условию i >= x
block $label0
loop $label2
// определяем, выходить ли из цикла
br_if $label0
block $label1
// проверяем значение rand(), переходим в конец блока (1), чтобы присвоить значение переменной first_even, если условие сработало
br_if $label1
// увеличиваем ++i
// безусловно переходим в начало цикла
br $label2
end $label1
end $label2
// (1) присваиваем значение first_even
end $label0
MV
loop
от block
тут в направлении перехода инструкциями передачи управления. В случае loop
, br
на него (т.е. на его метку) осуществит переход в начало (т.е. на первую инструкцию после loop
), а для block
в конец. Надеюсь, хоть немного понятно объяснилMP
loop
от block
тут в направлении перехода инструкциями передачи управления. В случае loop
, br
на него (т.е. на его метку) осуществит переход в начало (т.е. на первую инструкцию после loop
), а для block
в конец. Надеюсь, хоть немного понятно объяснил