Микрокод - это еще один уровень абстракции, помимо машинного кода. Фактический процессор выполняет микрокод, а механизм перевода на лету преобразует машинный код в микрокод. Это делается по ряду причин, включая более быстрые, более мелкие процессоры, упрощение создания сложного процессора с меньшим количеством отладок и обратную совместимость. Например, набор команд x86 содержит некоторые инструкции по обработке строк, которые используются редко. Однако для обеспечения обратной совместимости они должны быть доступны в современных процессорах x86. Вместо того, чтобы фиксировать путь выполнения для этих инструкций, они преобразуются в микрокод и выполняются. Это экономит кремний, оставаясь при этом обратно совместимым.
Где находятся оба типа программ во время выполнения?
Машинный код находится в кеше (после извлечения из ОЗУ). Микрокод находится в кеше микрокода, в зависимости от конкретной архитектуры машины. Кэш может быть достаточно большим, чтобы вместить достаточное количество микрокода для хранения преобразованного микрокода из максимально возможной инструкции машинного кода, или это может быть больший кэш, в котором хранятся преобразованные результаты многих машинных кодов, так что ему не нужно повторно преобразовывать все машинный код на каждой итерации для маленьких циклов.
В некоторых архитектурах преобразованный микрокод нигде не хранится - модуль выборки / перевода просто выплевывает серию инструкций микрокода на основе текущего исполняемого машинного кода. В этом случае микрокод выполняется из какого-либо ПЗУ, а машинный код, по сути, является индексом в ПЗУ, указывая на последовательность инструкций микрокода, которые необходимо выполнить, чтобы полностью выполнить инструкцию машинного кода.
Есть ли у 1: 1 сопоставление с инструкциями true-op языка ассемблера?
Машинный код и код сборки, как правило, соответствуют 1: 1 инструкциям по сборке. Это зависит от ассемблера. Ассемблеры высокого уровня могут иметь большой набор макросов, которые позволяют написать одну строку кода сборки, и ассемблер создаст несколько машинных кодов.
Но в целом «чистый» язык ассемблера может быть преобразован непосредственно в машинный код с помощью таблицы набора команд в руководстве процессора.
Я не уверен, что вы подразумеваете под «настоящими инструкциями». Возможно, вы можете объяснить ссылку.
Формат любого из них определяется архитектурой процессора?
Формат как машинного кода, так и микрокода определяется архитектурой процессора.