Быстрый ответ: разработчики процессора сначала проектируют набор команд (значения различных кодов команд, какие операнды поддерживаются и как они указываются и т.д.), А затем строят процессор, соединяя логические элементы так, чтобы реализовать этот набор инструкций.
Если бы они подключили его по-другому, набор инструкций был бы другим.
Микропрограммированные процессоры: как минимум, это некоторый тип памяти (есть несколько возможностей) как часть взаимосвязей, которые определяют, что представляет собой набор инструкций. Таким образом, изменяя содержимое этой памяти ("микрокод"), можно изменить набор команд. Я сказал "как минимум" - это может быть намного сложнее.
Если вы хотите узнать больше, я бы посоветовал начать с середины: выучить язык ассемблера для некоторой машины. Желательно не x86/x64, так как это очень сложно. Я бы выбрал ARM, если вы хотите что-то, чей язык ассемблера относительно прост в изучении, а также актуален для современных технологий.
Затем, если вы хотите узнать больше, узнайте о логических схемах: AND, OR, NOT, NAND, NOR; затем последовательные схемы, начиная с триггеров и т. д.
Когда вы начнете думать о том, как построить полноценный процессор или что-то очень простое, например, PDP-8, из этих частей вы будете думать: «Человек, это огромный и сложный процесс». Ну, это огромно. Но это не так сложно, как вы могли подумать. Сложность в основном складывается в слои: когда вы понимаете нижний уровень, вам больше не нужно беспокоиться о его деталях, просто о том, что он делает. Кроме того, есть очевидная сложность в повторении. 32-разрядный сумматор имеет примерно в 16 раз больше вентилей, чем 2-разрядный сумматор. Но если вы понимаете 2-битный сумматор, вы можете понять 32-битную версию. Это просто больше того, что вы уже видели.