Хотя... я не уверен, что я понял. Правильно ли я понимаю, что обычные компьютеры работают как-то так?:
1. BIOS (которая находится в процессоре/другой части материнской платы) заранее знает местонахождение загрузочного сектора на HDD.
2. BIOS копирует загрузочный сектор в RAM.
3. Загрузочный сектор запускается, и копирует что-то там (ну, запуск ОС, и прочее) с HDD в RAM.
4. Что-то там запускается.
На практике да, всё так и есть.
Только вторая часть 3 пункта и 4-й уже лишние, программа из загрузочного сектора может делать что ей угодно, например играть в тетрис (если код поместится в сектор). Так что обязательными являются лишь первые два пункта, с уточнением что "загрузочный сектор" не обязательно один, не обязательно на HDD (как минимум BIOS умеет его получать и с USB накопителей, и даже из локальной сети).
И все эти 4 пункта вообще никак не относятся к процессору и его проектированию. Всё что знает процессор — что при обращении за командами по адресу RESET он гарантированно получит код команды. Из ПЗУ. В котором может быть и BIOS (знающий о HDD/SDD, USB flash, SD card, LAN или ещё что-то), но может и быть просто произвольная программа (хоть игра Doom если влезет). Всё что будет происходить дальше, что за команду процессор получит первой после сброса, куда она его пошлёт, что там будет, ПЗУ или ОЗУ или ещё что — не его дело, это уже проблемы проектировщика
системы, не процессора. Процессор умеет выдать адрес и получить по нему данные (или код команды), ну или записать по нему данные, и больше его ничего не волнует, остальное дело чипсета, материнской платы, программистов BIOSа и ОС. В настольных компьютерах принята последовательность как вы привели, но это вовсе не догма, и уж тем более она никак не увязана на процессор.
А, да, BIOS находится не в процессоре, это просто ПЗУ на материнской плате, которое выдаёт байты при обращении по адресу, по которому обращается процессор после сброса или включения питания. Процессор об нём ничего не знает, кроме единственного факта: при обращении за первой командой после включения питания он её получит. Из ПЗУ или с ручных тумблеров или с фотодиодов перфоленты или ещё как угодно (это всё оставляется чипсету и/или материнской плате), ему без разницы, главное просто её получить. А тот кто её туда положил уже отвечает
головой чтобы и команда была правильной, и делала именно то что нужно (например это может быть начало процедуры чтения загрузочного сектора с HDD №0, размещённой в ПЗУ и называемой BIOS; или процедура инициализации видеокарты чтобы показать заставку игры Doom и запустить её).
Это всё если говорим об обычных универсальных процессорах. Потому что в микроконтроллерах например прямо в микросхему интегрированы и ПЗУ, и ОЗУ, и таймеры, и порты ввода-вывода, и аппаратные блоки разных протоколов (SPI, UART, I2C, CAN, LAN, контроллеры LCD и TFT, и прочее). Но и там вычислительное ядро ничего об этом всём богатстве обычно не знает, его дело читать команды из памяти, и выполняя их читать и писать данные из/в память. Всё. Попытка запихнуть в процессор всё-что-только-можно-и-плюс-всё-что-нельзя изначально тупиковая. Иерархический принцип организации доказал своё удобство и надёжность.
При этом, когда любая часть пытается прочитать/записать что-то в HDD, оно читает/записывает это что-то в RAM, которое синхронизирует это с HDD.
И это тоже к процессору никак не относится, это уже дело ОС, как она работает с HDD и памятью. Процессор всегда всё пишет только исключительно в память (ну или регистры ввода-вывода если они отделены от памяти), а дальше дело уже программиста куда это потом направить и надо ли вообще.
В процессоре нет понятия "записать в HDD", он просто не знает ничего про HDD (как и про USB и про WiFi и про LAN и т.д.), записать в HDD может захотеть
программа, а тогда это уже её (и BIOS+ОС) проблемы, как и куда она это запишет.
Еще сделал обычные циклические сдвиги.
Хм, да, про них походу забыл.
Кстати, а стоит ли сделать там изменение флага переноса (как и в основном ALU, которое меняет оба флага только после) только после начала очередного такта?
Этого я не понимаю, в такие тонкости не вдавался. Обычно надо чтобы флаг результата одной команды был доступен следующей (три команды подряд сдвига трёх регистров через перенос правильно сдвинут все три регистра как будто один 24-х битный). Исключения бывают, но неудобны и требуют сильного обоснования.
(И еще там есть специальный параметр контрольной логики, который устанавливает, менять ли флаги после операции сложения/вычитания)
А вот это я бы распространил на любые операции, чтобы можно было создавать команды, как меняющие флаги, так и не меняющие. Грубо говоря просто запрет/разрешение записи в регистр/триггеры флагов. Вовсе не обязательно закладывать все команды в двойном количестве (с и без модификации флагов), но не иметь такой возможности вовсе однозначно хуже.