awesome-everything EN
↑ Обратно к восхождению

Базовый CS с нуля

Control flow: тест с множественным выбором

Суть Синтез всего unit по control flow с множественным выбором: program counter, conditional jump и флаги, fall-through, backward jump и почему loop повторяется или работает вечно.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 13 min

Шесть вопросов, проходящих через весь unit. Ни один не просит определение. Каждый просит рассуждать о том, что program counter сделает дальше — а это и есть единственный вопрос, к которому сводятся любой branch и любой loop.

Цель

Убедитесь, что вы связываете четыре урока в одну модель: program counter управляет flow, инструкция сравнения выставляет флаги, conditional jump читает один бит флага, backward jump повторяет тело, а if/else — это просто два адреса назначения для PC.

Викторина

Две работающие машины хранят одинаковые байты инструкций по одинаковым адресам, но исполняют совершенно разные последовательности инструкций. Как такое возможно?

Викторина

Выполнился CMP R0, R1, затем достигнут JNE (jump if not equal). Какую единственную часть состояния JNE реально проверяет, решая jump или fall-through?

Викторина

if/else компилируется в: CMP; conditional jump на ELSE; блок if-true; безусловный JUMP на END; ELSE: блок if-false; END. Зачем нужен безусловный JUMP после блока if-true?

Викторина

На машинном уровне в чём единственное структурное различие между скомпилированным while loop и for loop?

Викторина

Loop обратного отсчёта уменьшает счётчик и должен выйти при достижении 0, но никогда не выходит и держит CPU на 100%. Какое объяснение согласуется с тем, как машина реально исполняет loop?

Викторина

В sumPositives по [3, -1, 4] внутренний if пропускает отрицательный элемент. Когда nums[i] не положителен, что делает машина и завершается ли loop досрочно?

Итог

Весь unit — одна сквозная линия: program counter решает, что выполнится дальше, и только jump может его изменить. Сравнение выставляет флаг; conditional jump читает этот один флаг и либо прыгает, либо делает fall-through; if/else — это два адреса назначения для PC с защитным JUMP на границе; loop — это backward jump, чей conditional-тест наверху решает, упасть ли снова в тело; а loop работает вечно, когда проверяемое значение никогда не меняется. Любые branch и loop, которые вы прочтёте, сводятся к одному вопросу: куда PC указывает дальше и почему.

Продолжить восхождение ↑Control flow: тест на свободное припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.