Как в процессоре реализовано исполнение команд?
Я знаю схему простого компьютера. Его элементы, АЛУ, регистры, кэш, декодирование команд, разбиение их на элементарные операции (о них и речь, как они выполняются?).
Возьмем команду JNE (jump not equal). Что бы ее исполнить, процессор должен взять результат cmp и послать $eip, счетчику команд (моторчику) новый импульс, равный метке.
Как моторчик посчитает, сколько импульсов он получил, его либо нужно связать с АЛУ, либо встроить собственный счетчик импульсов. И это только 1 команда. Как процессор поймет, что ему делать, когда он получит другую команду, PUSH например (ее двоичный код, условно 11110000) ?
Если жестко забить ~400 x86 команд, то получится очень сложная архитектура. Следовательно, должен быть какой то интерпретатор, про который я слышал, но не смог найти информации. Получается рекурсия, интерпретатор команд для ассемблерных команд.
Если кто то знает книги по тематике "как собрать компьютер из транзисторов и установить туда простейшую ОС", то буду признателен.
Я читал книги Таненбаума и "Код, тайный язык информатики", понял не все.
Прошу прощения, что все намешано в кашу.
Сложность современного процессора слишком велика, чтобы поместиться в мозг одного человека. Поэтому сейчас архитектуру процессора делает множество инженеров.
Это вы еще не читали про реализацию многопоточности, прогнозирование ветвлений, многоуровневый кеш и др. штуки
есть аппаратный дешифратор/декодер команд, он опкод команды преобразует в физические "импульсы" бегающие по проводам и управляющие работой "железных" модулей проца.
в современных процах чтобы не раздувать декодер команд (в каком-то x86 он начал занимать чуть ли не половину кристалла) , использут транслятор команд который команды x86 распиливает в набор простых команд risc-процессора и отправляет их исполнятся на железные risc-процессоры.
трансляция определяется микрокодом и работа процессора может быть изменена заменой микрокода.
То есть все ~400 команд преобразуются к элементарным операция и исполняются непосредственно на железе, без всяких интерпретаторов/трансляторов?
А интерпретатор/транслятор нужен нужен только что бы разобрать команду на набор более мелких операций?
david_shiko, не все.
в ентих 400 команда есть к примеру и команды копирования содержимого двух регистров которые которые "проще" распилить уже не возможно.
а так да. на набор "более простых/эффективных операций".
Автор написал "Я знаю схему простого компьютера". Возможно он имел в виду что видел картинку или диаграмму.
Устройство работы процессоров изучают на курсах системотехники. И изучают их не с ассемблера а с логических элементов коньюнкции-дизьюнкции-инверсии. Шифраторы-дешифраторы мультиплексоры-демультиплексоры. Триггеры. Общий курс электроники.
Вобщем автору гуглить следующие теги : Электроника. Системотехника.
Там будет глубокое погружение. Deep dive.
А так вот с налёта и с наскока. Почитав про ассемблер - нельзя понять как работает CPU. Тоже самое что "порулив машиной" - нельзя понять принцип работы дизельного двигателя.
Вы невнимательно прочли. Гуглил я про все это дело года 2 назад. Прочел пару книг.
И я мог собрать сумматор, как и все элементы, которые вы перечислили (сейчас подзабыл).
Меня интересует не физическая природа, напряжение и предотвращение сбоев, а цифровая. В данном вопросе я как раз обозначил, что в моем пазле не сходится 1 деталь, которая в книге не рассматривается, реализация команд.
Системотехника - старая дисциплина, думаю, она потеряла свою актуальность.