18+ Некоторые материалы сайта могут содержать информацию, запрещенную для детей.

Запись от AZM на субдомене electronics-and-mechanics
Все записи на субдомене: Электроника и механика (записки от AZM)

Микроконтроллеры и компьютеры - процессор, АЛУ и его связь с внешним миром...
Процессор и АЛУ
Процессор - это устройство, которое может считывать байты из памяти, из портов ввода-вывода, и менять состояние байт так же в памяти или в портах ввода вывода.

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

Главные узлы процессора это:
АЛУ (арифметически-логическое устройство) - то, что получая некие байты на входе определяет что сделать с другими байтами;
Шина данных/адреса - то, что забирает байты из памяти, портов и передаёт эти байты АЛУ.

Схематично процессор выглядит так:
Иллюстрация: что внутри процессора, схематично

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

Если пояснить словами и по-простому, то будет так:
Счётчик адреса - человек, который постоянно смотрит на часы и как только меняется показание минут, произносит в слух это число.
Буфер шины адреса и буфер шины данных - это человек перед которым разложены листочки бумаги (байты) на каждом листочке его номер (адрес) и число (значение байта) если ему назвать номер листочка (адрес), то он прочитает вслух число с листочка (информацию из байта).
АЛУ - человек с калькулятором, и таблицей (набором команд ассемблера), в которой написано что делать когда он слышит то или иное число, кроме того он может сказать буферу шины адреса и данных зачеркнуть на листочке по адресу такому-то число и записать туда новое, которое он произнесёт.
Каждый раз, когда счётчик адреса называет новое число буфер шины и адреса берёт бумажку с этим адресом, читает число, которое на ней написано, АЛУ согласно этому числу делает то, что написано в наборе команд в ответ говорит результат.

Рассмотрим на примере.
Скажем мы условились, что у нас есть такой набор команд:
1 = набрать на калькуляторе число которое будет названо после этого
2 = нажать на калькуляторе кнопку "+"
3 = нажать на калькуляторе кнопку "-"
4 = нажать на калькуляторе кнопку "="
Теперь нам надо написать программу, которая будет делать вот такое математическое действие:
100+80-15
Соответственно бумажки "памяти" у нас выглядят так:
Адрес: 0 == Значение в байте: 1 (набрать на калькуляторе что будет названо потом)
Адрес: 1 == Значение в байте: 100 (это число АЛУ наберёт на калькуляторе)
Адрес: 2 == Значение в байте: 2 (нажать на кнопку "+")
Адрес: 3 == Значение в байте: 1 (набрать на калькуляторе что будет названо потом)
Адрес: 4 == Значение в байте: 80 (это число АЛУ наберёт на калькуляторе)
Адрес: 5 == Значение в байте: 3 (нажать на кнопку "-")
Адрес: 6 == Значение в байте: 1 (набрать на калькуляторе что будет названо потом)
Адрес: 7 == Значение в байте: 15 (это число АЛУ наберёт на калькуляторе)
Адрес: 8 == Значение в байте: 4 (нажать на кнопку "=")

Мы написали на бумажке с таблицу команд, на других бумажках (в памяти) написали адреса и команды, посадили человека с часами и человека который будет читать бумажки и считать на калькуляторе.
Теперь если человек с часами начнёт называть 0, 1, 2, 3, 4, 5, 6, 7, 8, человек который отвечает за адрес и данные начнёт считывать с листочков цифры, а человек с калькулятором будет всё делать согласно набору команд, то у нас в итоге получится результат функции: 100+80-15.

Собственно вот так и работает процессор, что персонального компьютера, что микроконтроллера.

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

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

Кроме простых регистров, в которых мы можем хранить свои промежуточные результаты, в процессорах есть специальные регистры, каждый бит такого регистра многое значит для процессора или программиста.
Такие регистры:
Флаговый (регистр статуса) - его биты показывают что произошло при выполнении предыдущей команды.
Управляющий - здесь указано что процессору разрешил программист а что запретил (в некоторых процессорах это не регистр а некоторые биты регистра статуса).
Регистр адреса - здесь храниться адрес ячейки памяти из которой будет взята следующая команда с приходом очередного тактового импульса (помните человека с часами?).
Регистр указателя вершины стека - здесь храниться адрес ячейки памяти в которую специальными командами мы можем на время сохранять содержимое тех или иных регистров процессора (помните - регистров не так много а иногда нужно считать много разных чисел, для этого нужен такой "ход конём" как стек).

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

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

Если у нас 16-ти битный процессор, то каждый регистр состоит у него из двух байт, если 32-х битный то из четырёх байт и он соответственно может оперировать сразу всеми байтами в регистре, за одну команду.
Для чего это надо?
Для работы с числами больше чем от 0 до 255.
Если с помощью 8 бит мы можем записать число от 0 до 255, то имея 16 бит, мы можем уже записать число от 0 до 65535, ведь теперь биты будут обозначать:
1, 2, 4, 8, 16, 32, 64, 128 - первые 8 бит
256, 512, 1024, 2040, 4096, 8192, 16384, 32768 - вторые 8 бит.

Хорошо, пусть у нас 8-ми битный процессор, а мы решили сложить 2 числа 240 и 250, что будет в результате, ведь их сумма (490) не "влезет" в 8-ми битный регистр!
Будет переполнение регистра в котором мы ожидали получить результат.
Там попросту окажется число 234.
Почему так?
Процессор честно сложит 240 и 250, однако после того как значение суммы "перевалит" за 255, он начнёт снова отсчитывать сумму с нуля, и именно это число и окажется в результате, но что бы сообщить о таком принеприятнейшем событии как переполнение, процессор установит бит "было переполнение" в регистре статуса.
Как это происходит?
490 в виде бит (бинарного числа), это:
111101010
соответственно младшие 8 бит (считая слева на право), это:
11101010
или не что иное как 234.
Куда делся 9-й бит?
[1]11101010
бит в квадратных скобочках переместился в регистр статуса, сообщая нам о переполнении.
Как видите, пока ничего сложного, всё в рамках арифметики начальных классов школы.
Если затрудняетесь переводить биты в десятичные числа, просто пользуйтесь калькулятором, который это умеет (например, под Windows это калькулятор HC (HOD Calculator)).

Процессор микроконтроллера или компьютера и его связь с внешним миром
Теперь пришло время посмотреть на более детальную схему процессора и то, как он связан с внешним миром:
Иллюстрация: микропроцессор - как он связан с внешним миром

Надеюсь, теперь стало всё ещё чуть более понятно.

Добавлено: 4730 дн 5 час 20 мин 48 сек назад | Внесений правок: 0 | Последняя правка: нет данных



Электроника и механика (записки от AZM)