Как данные, адрес и инструкция различаются в процессоре / регистре / памяти? - PullRequest
0 голосов
/ 14 декабря 2010

Как различаются данные, адреса и инструкции в процессоре?Когда программа выполняется, как процессор различает команды, когда все находится в 0 s and 1 с, и регистр загружает оба данных, адреса?

Ответы [ 3 ]

4 голосов
/ 14 декабря 2010

Процессор делает только то, что вы говорите. Как вы заметили, процессор не может определить разницу между «данными» и «кодом» в памяти: это всего лишь последовательность байтов. То, что вы говорите, делает с этими байтами, определяет, как оно обрабатывается.

Когда программа компилируется, в сгенерированном исполняемом файле содержится информация о том, какие части являются кодом, а какие - данными. Когда программа выполняется, операционная система загружает код и данные в разные части памяти, а затем сообщает процессору начать выполнение кода в точке входа программы. Оттуда процессор выбирает первую инструкцию, выполняет ее и переходит к следующей инструкции.

Это все очень упрощенно, конечно, но я думаю, вы поняли идею.

В более старых процессорах и старых операционных системах ничто не мешает вам заставить процессор начинать выполнять инструкции, которые находятся в середине сегмента данных. Или, на самом деле, от модификации «данных» в середине сегмента кода - тем самым создавая самоизменяющийся код. Более новые процессоры и операционные системы обычно имеют некоторую форму предотвращения выполнения данных и блокируют, чтобы предотвратить изменение кода. В противном случае самоизменяющийся код может стать серьезной угрозой безопасности.

Краткий ответ: процессор обрабатывает код как код, потому что вы говорите ему. Иначе, все просто байты в памяти.

2 голосов
/ 28 июня 2011

Различные регистры помогают процессору различать различные сегменты памяти в процессе, выполняемом на компьютере. Когда программа запускается, регистр сегмента кода (cs) и указатель инструкций (ip / eip / rip) устанавливаются так, чтобы указывать, где находится код, тогда как регистр сегмента данных (DS) и один из регистров общего назначения (обычно DX). ) используются для указания на сегмент данных. Ну, это в основном архитектура Intel x86, но в целом большинство архитектур имеют регистры для разграничения области кода от области данных, а также сегмента стека. Через эти регистры процессор «знает» или способен различать кодовый адрес

0 голосов
/ 14 декабря 2010

Когда вы запускаете приложение, eip (счетчик программ) устанавливается на то место, где находятся текстовые данные вашей программы, а текстовые данные - это ваш код (0..1). Отсюда он начинает выполнять инструкции с адреса, который помещен в eip. Инструкции определяются в ПЗУ рядом с процессором (или кешем), если по какой-либо причине процессор пытается выполнить что-то, что не является инструкцией, он выдает исключение (прерывание на этом уровне). Откуда он знает, является ли это инструкция или нет, представьте, что команда foreach, которая является fetch, проверяет rom like и hashtable, чтобы увидеть, является ли она действительной инструкцией.

Это очень простой подход к проблеме, потому что многие вещи случаются XDD.

...