Звичайно, стан перевіряється щоразу. Але до моменту його перевірки це вже далеко в процесі роботи процесора. Тим часом, інші інструкції також вступили в трубопровід і знаходяться на різних етапах виконання.
Зазвичай за умовою негайно слідує умовна інструкція гілки, яка або розгалужується, якщо умова оцінюється як ІСТИНА, або пропадає, якщо умова оцінюється на ЛІЖНУ. Це означає, що є два різних потоки інструкцій, які можуть бути завантажені в конвеєр після інструкції про стан та інструкції гілки, залежно від того, чи умова оцінюється як ІСТИНА, або ЛЖА. На жаль, одразу після завантаження інструкції про стан та інструкції з гілки, процесор ще не знає, до чого оцінюватиметься умова, але він все ще повинен продовжувати завантажувати матеріали в конвеєр. Таким чином, він вибирає один із двох наборів інструкцій, що ґрунтуються на здогаді щодо того, до чого оцінюватиметься умова.
Згодом, коли інструкція про стан подорожує вгору по трубопроводу, настав час його оцінювати. У той час процесор з'ясовує, правильно чи неправильно його здогадка.
Якщо здогад виявляється правильним, то гілка пішла в потрібне місце, а правильні вказівки були завантажені в трубопровід. Якщо виявиться, що здогад був невірним, то всі вказівки, які були завантажені в конвеєр після інструкції з умовною гілкою, були невірними, їх потрібно відкинути, а отримання інструкцій має розпочатися знову з потрібного місця.
Поправка
У відповідь на коментар StarWeaver, щоб дати уявлення про те, що повинен зробити процесор, щоб виконати одну інструкцію:
Розглянемо щось таке просте, як те, MOV AX,[SI+10]
що ми люди наївно вважаємо "завантаження AX словом у SI плюс 10". Приблизно, процесор повинен:
- випромінювати вміст ПК ("реєстр лічильників програм") на шину адреси;
- читати опкод інструкції з шини даних;
- приріст ПК;
- розшифруйте опкод, щоб зрозуміти, що з ним робити;
- випромінювати вміст ПК на адресну шину;
- читати операнд інструкцій (у цьому випадку 10) з шини даних;
- приріст ПК;
- подати операнда та СІ в суматор;
- випромінюють результат суматора на адресну шину;
- зчитування AX з шини даних.
Це колосальні 10 кроків. Деякі з цих кроків будуть оптимізовані навіть у непровідних процесорах, наприклад, CPU майже завжди збільшуватиме ПК паралельно з наступним кроком, що легко зробити, тому що ПК - це дуже, дуже особливий реєстр, який є ніколи не використовується для будь-якої іншої роботи, тому немає можливості суперечок між різними частинами ЦП за доступ до цього конкретного реєстру. Але все-таки нам залишається 8 кроків для такої простої інструкції, і зауважте, що я вже припускаю певну ступінь витонченості від імені процесора, наприклад, я припускаю, що не буде потрібен цілий додатковий крок для суматор фактично здійснить додавання до того, як результат можна буде прочитати з нього,
Тепер, врахуйте, що існують більш складні режими адресації, як MOV AX, [DX+SI*4+10]
, і навіть набагато складніші інструкції, як-от, MUL AX, operand
які насправді виконують петлі всередині процесора для обчислення їх результату.
Отже, моя думка в тому, що метафора "атомного рівня" далеко не підходить для рівня інструкцій процесора. Це може бути придатним для рівня ступінчастості трубопроводу, якщо ви не хочете заглиблюватися вниз до фактичного рівня логічного воріт.