Перейти к содержанию
    

Как железо "понимает" программу?

Здравствуйте,

 

Поскольку я только учусь проектировать встраиваемые системы то возникают всякие наивные вопросы. Один из них - как железо (hardware) понимает написанную на человеческом языке программу (software) во встраиваемой системе (embedded system)?

 

В книжках пишут что команда, например

 

add R2 R1

 

преобразуется в последовательность кодов которые микропроцессор исполняет. Но мне тогда непонятно откуда берутся эти коды и как микропроцессор их понимает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

копните сначала в сторону "цифровой автомат", птицу (ПТЦА - прикладная теория цифровых автоматов).

Также схемотехника - стандартная логика, регистры, мультиплексоры, счетчики, АЛУ (арифметико-логическре устройство) и т.д.

 

Тогда уже будет более-менее понятно, откуда берутся машинные циклы и сама методика выборки, дешифрации и обработки команды...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

коды придумывает изготовитель микропроцессоров. От фонаря.

Последовательность кодов какими-либо средствами записывается в память программ процессора. После специального сигнала СБРОС проц начинает своими способами вытаскивать коды команд последовательно, одну за другой. начинает он это делать обычно с самой первой по порядку команды. Но это необязательно. Адрес самой первой команды после СБРОСА производитель также сообщает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

копните сначала в сторону "цифровой автомат", птицу (ПТЦА - прикладная теория цифровых автоматов).

Также схемотехника - стандартная логика, регистры, мультиплексоры, счетчики, АЛУ (арифметико-логическре устройство) и т.д.

 

Тогда уже будет более-менее понятно, откуда берутся машинные циклы и сама методика выборки, дешифрации и обработки команды...

 

А существует ли простой и ясный ответ на мой вроде бы простой вопрос? Имеется ввиду, ответ без привлечения всей теории цифровых систем.

 

коды придумывает изготовитель микропроцессоров. От фонаря.

 

Хотя вид кода и выглядит произвольным для человека но ведь процессор знает какой код что означает. Вот откуда он это знает?

Изменено пользователем Vagant

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы чего это? Процессор - просто проигрыватель кодов. Откуда DVD player знает как надо киану ривза показывать?

Изменено пользователем DpInRock

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы чего это? Процессор - просто проигрыватель кодов. Откуда DVD player знает как надо киану ривза показывать?

 

Имелись ввиду коды команд процессора - их то он знает. А данные, конечно, разные могут быть.

Изменено пользователем Vagant

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

add R2 R1

 

преобразуется в последовательность кодов которые микропроцессор исполняет. Но мне тогда непонятно откуда берутся эти коды и как микропроцессор их понимает?

Нет процесср не поймет "add R2 R1" , он понимает только код (8 или16 разрядов в засимости от проц.)

Существуют программы именуемые ассемблерами или компиляторами, которые из "add R2 R1" делают код понятный процессору , чтобы выполнить именно эту операцию.

Для лучшего понимания почитайте например Хоровиц "энд" Хилл или Титце "энд"Шенк,

они гуляют в нете в эл. виде

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет процесср не поймет "add R2 R1" , он понимает только код (8 или16 разрядов в засимости от проц.)

 

Так вот я и стараюсь разобраться как процессор понимает коды своих команд. (После компиляции файла на языке Си или Ассемблер создаётся файл с машинными кодами, это понятно.)

 

А вот почему, например, одно 8-ми (или 16-ричное) число является кодом процессора а другое нет?

 

P.S. Спасибо, Хоровиц у меня есть - буду читать.

Изменено пользователем Vagant

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Производитель процессоров сказал - код такой-то - такая команда, сякой-то - сякая. А код эдакий - вобще не команда, а отстой. Запрещаю!!!

А производители компиляторов уже подстраиваются под конкретного производителя процессоров.

 

Ну, и программу процессор никак не понимает. Он видит из нее исключительно кусочки по одной команде. И ему глубоко наплевать на остальное.

И если вместо настоящиъх кодов ему подсунуть фигню, он все равно будет чего-то делать. В смысле, фигню. Процессор никогда не стоит без дела. Всегда извлекает команды и выполняет. (Есть особые случаи, когда он ничего не делает, но это - особые случаи).

 

И когда память команд заканчивается, он продолжает засасывать команды из воздуха.

Изменено пользователем DpInRock

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот почему, например, одно 8-ми (или 16-ричное) число является кодом процессора а другое нет?

 

P.S. Спасибо, Хоровиц у меня есть - буду читать.

Поищите древнюю книгу Б.Соучека. Микропроцессор по молекулам разжеван.

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

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

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

Структура команд, полей адресов и данных у разных процессоров крайне разнообразна. Тут можно только самые общие принципы очертить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Производитель процессоров сказал - код такой-то - такая команда, сякой-то - сякая. А код эдакий - вобще не команда, а отстой. Запрещаю!!!

А производители компиляторов уже подстраиваются под конкретного производителя процессоров.

 

Понятно. А выполнение кода команды происходит в процессоре на логическом и/или физическом уровне?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понятно. А выполнение кода команды происходит в процессоре на логическом и/или физическом уровне?

На физическом уровне все устройства в процессоре работают с двумя уровнями напряжения 0 и 3V. Если процессору подается на 8 разрядную шину 8 разных уровней напряжения,он смотрит какие из них 0V, какие 3V. И в ответ выполняет работу в соответствии с полученной информацией. И точно также выставляет на своих выводах уровни 0V и 3V в зависимости от того, какой результат его вычислений. 0V считается логическим нулем, 3V считается логической единицей.Но процессор этого не знает. Нули и единицы это для людей. Процессор работает только с напряжениями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понятно. А выполнение кода команды происходит в процессоре на логическом и/или физическом уровне?

Простите, а Вы цифровую схемотехнику где-нибудь проходили?

Чтобы разобраться с вопросом, надо знать, что такое сумматор, арифметико-логическое устройство, устройство управления, микропрограмма.

Дело в том, что любой алгоритм, изложенный формально, неважно на чем, можно представить двояко:

1. В виде параллельно-последовательной схемы.

2. В виде последовательности команд (операторов).

Что в настоящее время и происходит.

Люди, умеющие писать программы на С, выбирают микроконтроллеры, а те, кто изучил тот же С, но несколько модифицированный,

занимаются FPGA, CPLD и прочей твердотельной гадостью.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У процессора нет никаких уровней. Уровни есть у ВАС. Т.е. вы заставляете процессор делать нечто, что выражается в каком-либо конкретном выражении. К примеру. Вы заставляете его зажечь лампочку. Для этого вы даете ему съесть набор команд, которые приводят к данному событию.

 

Если лмпочка подключена к ПРОГРАММНО УПРАВЛЯЕМОМУ ВЫВОДУ микропроцессора, то существует всегда команда, с помощью которой вы можете выдать на этот вывод ЛОГИЧЕСКИЙ НОЛЬ или 1. Этот логический уровень воспринимается лампочкой как соответсвующее напряжение на своих выводах (0 или 5 вольт, например). И получив 5 вольт - она зажигается. Получив 0 вольт - гаснет.

 

В данном случае абстрагирование от уровней напряжения получило название логического уровня. Но ничем от этого уровня не отличающегося. Просто удобнее разговаривать людям. А кроме того, удобно применять математику к логическму уровню. Писанины меньше.

 

---

По опыту. Всегда помните, что любой процессор начинает выборку команд с фиксированного вполне определенного адреса (чаще всего с 0).

И именно с этого адреса должна располагаться программа. ВСЕГДА!!!!! Без всяких исключений.

Изменено пользователем DpInRock

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

коды придумывает изготовитель микропроцессоров. От фонаря.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...