Правда ли, что процессор никогда ничего не извлекает из памяти напрямую? - PullRequest
3 голосов
/ 30 марта 2011

Я слышал, что процессор просто выбирает инструкцию из регистра EIP, а не напрямую из памяти.

Но AFAIK, EIP просто сохраняет адрес следующей инструкции, сама инструкция все еще находится в памяти. Если ЦП никогда не извлекает память, как он может знать, что на самом деле является следующей инструкцией?

UPDATE

Кстати, я знаю, что есть архитектуры x86, x64, x87, но которые принадлежат x86-64, x86 или x64 ??

Ответы [ 4 ]

1 голос
/ 30 марта 2011

Ну, я не знаю смысла вашего вопроса.

Да, процессор (в широком смысле этого слова) извлекается из памяти.Он имеет ряд устройств управления памятью (для обработки строк кэширования и конвейеризации).Фактически, «конвейер» помещает инструкции в кэш L1.Действительно, сам процессор инструкций только получает оттуда.Процессор в действительности, вероятно, никогда даже не смотрит на EIP (если инструкция не использует его непосредственно в качестве операнда).

Таким образом, реальный ответ будет таким: найдите статью из Википедии о конструкции процессора i86 и получите мяч.Вы сможете точно знать, что и где происходит.

Приветствия

1 голос
/ 30 марта 2011

EIP (Extended Instruction Pointer) должен содержать адрес инструкции.Это просто способ сохранить вкладку, какая инструкция обрабатывается в данный момент (или иногда какая инструкция обрабатывается следующей).

Сами инструкции хранятся в памяти (HDD, RAM, Cache) и должныбыть выбранным процессором.

Возможно, то, что вы слышали, означало, что, поскольку обычно используется так много уровней кэшей, выборке достаточно доступа к ОЗУ.

1 голос
/ 30 марта 2011

Простой ответ на ваш вопрос: «Нет, это не правда».

Изображение не очень простое из-за кэширования, конвейера команд, предсказания ветвлений и т. Д. Однако указатель команд - это просто указатель. Он не хранит коды операций.

0 голосов
/ 30 марта 2011

Не так в этом смысле.Процессор обращается к памяти через кеш, так что вы можете сказать, что он не делает это напрямую.(Также канал DMA может передавать данные между памятью и вводом-выводом, не затрагивая ЦП).

Да, CS: EIP указывает на память, на следующую команду для выполнения, но вы также можете использовать прямые адреса, например (загрузить содержимое адреса 0x0800 в регистр AX, по умолчанию это относительно сегмента DS):

MOV AX,[0x0800]
...