Найти тему

Бушков А.А. Статья 8. Команды Центрального Процессора (ЦП).

Оглавление

В статье 7 «Цифровые форматы» мы познакомились, как представляются числа в цифровом виде. Были рассмотрены форматы целых чисел, чисел с фиксированной точкой и чисел с плавающей точкой.

Теперь мы можем строить Команды ЦП, зная, как выглядят числа в цифре.

Напомню, что Система Команд ЦП почти одинаковая для всех современных Процессоров типа Intel, AMD и других производителей, так как на всех этих ЦП работают различные Операционные системы типа Windows, а также различные приложения типа Word, Exel, PhotoShop, AutoCad. Число таких команд чуть более 200. Это Команды, которые впервые доступны пользователю, т.е. программисту. По-другому их называют Ассемблер.

Это третий уровень команд в ЦП. Первый уровень – Комадны АЛУ. Второй уровень – Микрокоманды. Третий уровень – это система Команд ЦП Ассемблер. Есть еще один уровень программирования в ЦП – это стандатризированные команды Ввода-Вывода. В машинах серии ЕС ЭВМ их называли Канальными командами, там за Ввод-Вывод отвечали электронные системы, которые назывались Каналами Ввода- Вывода. Каналы Ввода-Вывода это были отдельные электронные блоки вне Центрального Процессора. В современных ЦП за Ввод-Вывод отвечает чип Северный мост.

Также надо иметь в виду, что Команды ЦП могут быть

1. Одноадресные

2. Двухадресные

3. Трехадресные

Это связано с тем, что в Команде нужно задать адреса, где находится в ОЗУ первый операнд А, второй операнд В , и дрес в ОЗУ куда надо поместить результат операции. Смотрите ниже:

Сделаем небольшой экскурс в прошлое и назовём ЭВМ, которые имели различную систему адресации:

1. «БЭСМ-6» Одноадресная Обьём ОЗУ 64 Кбайт

2. «М-222» Трехадресная Обёьм ОЗУ 16-32 Кбайт

3. «Минск-32» Одно и двухадресная Обьём ОЗУ 16-64 Кбайт

4. «Наири-3-1» Перем. до 3х адресов Оббём ОЗУ 12-64 Кбайт

5. «Мир-3» Переменная Обьём ОЗУ 16-64 Кбайт

6. «ЕС-1020» Двухадресная Обьём ОЗУ 128-256 Кбайт

7. «ЕС-1035» Двухадресная Обьём ОЗУ 1-3 Мбайт

Что значит Трехадресная система команд или по другому Трехадресная ЭВМ? Это значит, что в одной арифметической команде должно находится сразу три адреса ОЗУ – двух операндов и адрес результата.

В Двухадресной системе команд задается адрес первого операнда и адрес второго операнда. Результат помещается на место первого операнда.

В Одноадресной системе команд задается Адрес Второго операнда. Первый операнд уже находится в специальном регистре М – в Магазине. Результат помещается в Магазин.

В современных ЦП используется одноадресная система команд и вот почему.

В Прошлых ЭВМ обьём ОЗУ был небольшим. И длина адреса одного операнда в ОЗУ с обьёмом до 64 Кбайт равна 16 битам.

Сейчас обьём ОЗУ достигает несколько Гигабайт.

Длина адреса для одного операнда в ОЗУ в 4 Мбайта равна 32 битам

Длина адреса для одного операнда в ОЗУ в 1 Терабайт равна 40 битов.

Чем больше обьём ОЗУ, тем длиннее адрес операнда.

Поэтому в Прошлых ЭВМ еще допускались двух и трехадресные системы команд.

Длина самой команды при Трехадресной системе команд для ОЗУ более 4 Мбайт была была бы более 15 байтов.

В современных ЭВМ применяется в основном одноадресная система команд чтобы длина самой команды ЦП не была очень длинной.

Проиллюстритруем как делается умножение в целых числах.

Пусть А=179 В=173

Перемножим эти числа, как это делает ЦП.

Нам нужно найти E =A * B

Представим их в двоичном коде размером в 1 байт:

А = 10110011 В=10101101

Делаем умножение столбиком, как учили в школе.

Бит 0 = 1 в строке 2 числа В. Умножение на 1 даёт то же самое число.

1. Умножаем бит 0 (=1) в строке 2 числа В на всё число А в строке 1 и записываем результат в строку 3 начиная с бита 0.

2. Умножение на 0 даёт 0. Умножаем бит 1 (=0) в строке 2 числа В на число А в строке 1. Получаем все нули. Записываем их в строке 4,начиная с бита 1 влево.

3. Умножаем бит 2 (=1) в строке 2 числа В на всё число А в строке 1 и записываем результат в строку 5 начиная с бита 2 влево

4. Умножаем бит3 (=1) в строке 2 числа В на всё число А в строке 1 и записываем результат в строку 6 начиная с бита 3 влево

5. Умножаем бит 4 (=0) в строке 2 числа В на число А в строке 1. Получаем все нули. Записываем их в строке 7,начиная с бита 4 влево

6. Умножаем бит5 (=1) в строке 2 числа В на всё число А в строке 1 и записываем результат в строку 8 начиная с бита 5 влево.

7. Умножаем бит6 (=0) в строке 2 числа В на число А в строке 1. Получаем все нули. Записываем их в строке 9,начиная с бита6 влево.

8. Умножаем бит7 (=1) в строке 2 числа В на всё число А в строке 1 и записываем результат в строку 10 начиная с бита 7 влево.

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

-3

1. Копируется число А.

2. Число А ставится в нижестоящую строку после числа В со сдвигом влево в тот битовый разряд равный 1 как у числа В, на который было произведено умножение числа А.

3. Получаем столько строк из числа А со сдвигом влево сколько битов, равных 1, есть у числа В.

4. Складываем все строки согласно двоичной СС.

Это тоже схематический и иллюстративный пример.

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

Этот пример отвечает на вопрос, почему ЦП делает вычисления в двоичной системе счисления?

Ответ: потому, что умножение на 1 даёт тот же результат. Это значит, что умножение как таковое не производится, а просто делается копия числа А и оно складывается само с собой, каждый раз с необходимым сдвигом влево. Управляет сдвигом влево число В.

Все шаги, которые мы рассмотрели в этом примере, а именно : копирование, сдвиг влево, арифметическое сложение, выполняет АЛУ. В составе команд АЛУ есть все эти операции. Пишется микропрограмма для операции сложения из кодов микрокоманд. Эта микропрограмма и делает умножение, как в примере.

Все остальные команды ЦП, впервые доступные программисту (ассемблер), представляют собой микропрограммы. Одной команде соответствует одна микропрограмма. Её пишут разработчики ЦП. В алгоритмах микропрограмм возможны ошибки, человеческий фактор присутствует.

В 1994 году фирма Intel выпустила на рынок процессор Pentium, который делал ошибку в делении чисел с плавающей точкой, а именно:

4195835.0 / 3145727.0 = 1.333 820 449 … правильное значение

4195835.0 / 3145727.0 = 1.333 739 068 … ошибочное значение

Ошибку исправили путем исправления кода микропрограммы.

Необходимо учесть при разработке кодов команд ЦП (ассемблера), что код команды пишется в старшем байте и код команды выражает две функции:

1. Смысл действия команды

2. Длину команды в байтах.

Длина команды нужна для формирования адреса следующей команды. К адресу текущей команды прибавляется длина текущей команды в байтах.

Сотрудники Вычислительного Центра Главсредволговодстроя г. Саратов, 1977-1993.

Калашников Василий Иппатович, Порошин Борис Викторович, Белоусов Николай Васильевич, дочь Калашникова В.И.   на рыбалке на Волге
Калашников Василий Иппатович, Порошин Борис Викторович, Белоусов Николай Васильевич, дочь Калашникова В.И. на рыбалке на Волге
Морозов Александр, Суранова Марина, Колгин Михаил, Гущина Ольга, Литвинцева Света, ресторан Волга, Новый 1991 год.
Морозов Александр, Суранова Марина, Колгин Михаил, Гущина Ольга, Литвинцева Света, ресторан Волга, Новый 1991 год.

------------------------------

Если Вам понравился материал статьи, подпишитесь пожалуйста на мой канал в целом.

Для этого пройдите по ссылке ниже и нажмите кнопку "Подписаться"

https://dzen.ru/profile/editor/id/62cd3cfc63f88417d7e74b79