Прежде чем переходить к созданию команд Центрального процессора необходимо придумать как представляются числа с помощью байтов и битов. Например:
Прежде чем делать операции над числами A, B нужно понимать, как представляются эти числа в цифровом виде.
Можно пойти двумя путями.
1. Воспользоваться существующими и уже принятыми форматами чисел, которые используются в большинстве компьютеров.
2. Придумать свои форматы для решения своих специфических задач.
Такими специфическими задачами могут быть финансовые операции, астрономические вычисления на огромных расстояниях и др.
Финансовые операции с очень большими суммами. Например, пусть нужно сосчитать сколько триллионов в иностранной валюте ходит в мире с учетом центов. Деньги любят счет и эти большие числа в центах должны быть целыми без округлений, а значит без потерь.
В мире сейчас циркулирует около 90 триллионов долларов, округлим до 100 триллионов.
Это число 10 в степени 16 центов.
А если эту сумму перевести по курсу в японскую йену, то будет еще больше:
1 Японская йена = 0,0073244 Доллара США
1 Доллар США = 136,53 Японской йены, на 01.01.2022 по курсу ЦБ РФ.
Прибавится еще три порядка, т.е. будет
10 в степени 19 центов. Это огромное число. И таких форматов в обычных компьютерах для целых чисел нет. Конечно, деньги считают на современных ЭВМ, но помощью специальных программ, а не с помощью существующих и принятых цифровых форматов.
Поэтому здесь можно придумать свои цифровые форматы.
В астрономии принято расстояния выражать в световых годах.
Световой год – это расстояние, которое проходит свет за 1 земной год.
1 световой год = 9460730472580.8 километра или это соответствует 9,46×10^12 км.
Это тоже огромные числа, а если перевести в метры, то это будет примерно 10 в степени 15.
И здесь можно придумать свои форматы для целых чисел.
Прежде чем придумывать свои цифровые форматы
рассмотрим некоторые уже существующие и принятые форматы.
1. Формат целых чисел размером 2 байта или короткое целое:
0 в 15 разряде означает знак числа +
1 в 15 разряде означает знак числа -
Разряды 0-14 выражают абсолютное значение числа в диапазоне от 0 до 32767.
В данном случае здесь изображено число 0 со знаком +.
Это число 0 со знаком -
Это число 32767 с знаком +
Это число 32767 со знаком –
1. Форматы целых чисел размером 4 байта или длинное целое:
Знак числа будет отображаться в 31 двоичном разряде .
0 в 31 разряде означает знак числа +
1 в 31 разряде означает знак числа -
Разряды 0-30 выражают абсолютное значение числа в диапазоне от 0 до 2 147 483 647
2. Форматы целых чисел размером 8 байт и более не существуют.
3. Есть беззнаковые целые размером 2 байта в диапазоне значений от 0 до 65535.
4. Есть беззнаковые целые размером 4 байта в диапазоне значений от 0 до 4 294 967 295
5. Есть логический формат размером 1 байт с двумя значениями:
True или False
-------------------------------------------------------------------------------------
Форматы с фиксированной точкой (FixP).
Самый старший бит определяет знак числа также как в целых числах. 0 – число положительное, 1 – число отрицательное.
Положение точки только подразумевается.
Количество бит целой части определяется число k.
Количество бит дробной части определяется числом r.
Целая часть располагается слева в старших битах, дробная часть располагается справа в младших битах числа.
Значение чисел k,r задается раз и навсегда для конкретного ЦП и определяется конструктивными свойствами ЭВМ, такими как обьём ОЗУ, ширина выборки данных из ОЗУ и др.
Рассмотрим учебный пример числа с FixP, полный размер которого пусть будет равен 2 байтам.
15й бит – знак числа.
8-14 биты – целая часть числа
0-7 биты – дробная часть числа.
k = 7 (отсчет от 8 до 14)
r = 8 (отсчет от 0 до 7)
Рассмотрим диапазон значений этого учебного числа.
Максимальное значение целой части числа равно 127.
Минимальное значение целой части числа равно 0.
Минимальное не нулевое значение дробной части числа равно 2 в степени -8 или 0.00390625
Максимальное значение дробной части равно 0.99609375
Т.е. дробная часть меньше чем 0.00390625 в таком формате из 2х байт не отображается. Для этого нужен формат из 4х и более байт.
Покажем вес дробных разрядов этого учебного числа:
Вес разрядов целой части уже рассматривали ранее.
Теперь представим некоторое произвольное число +83.8796874 в формате этого учебного числа с фиксированной точкой.
Отдельно представим целую и дробную части.
Целая часть очевидно будет выглядеть так:
83 = 64 + 16 + 2 + 1
В современных ЦП числа с фиксированной точкой имеют размер 8 байт или 64 бита ( от 0 до 63).
Бит 63 – знак числа.
Целая часть имеет 31 бит (от 32 до 62), k = 31 ( от 32 до 62)
Дробная часть имеет 32 бита (от 0 до 31), r =32 ( от 0 до 31)
Максимальное значение целой части такое же как в формате целых в 4х байтах и равно: 2 147 483 647
Минимальное не нулевое значение дробной части такого числа равно:
Такой точности вполне достаточно для инженерных и научных расчетов
Надо иметь в виду, что любое произвольное число представляется в памяти компьютера с некоторым округлением, которое вызвано дискретностью представления в цифровом виде.
------------------------------------------------------------------------------------
Формат с плавающей точкой (FloP).
В основе формата лежит представление чисел в виде произведения Порядка и Мантиссы.
В формате с плавающей точкой число можно представить многими способами. Чтобы число представлялось с наибольшей точностью, его представляют в нормализованном виде. Это когда после нуля и запятой в мантиссе сразу идёт не нулевое число, например п.2 выше.
Если представлять число как в п.3 и 4, то при условии, что на мантиссу отводится 11 разрядов, в п.3 теряется один значащий разряд, а в п.4 теряется два значащих разряда (выделено красным) и это уменьшает точность представления числа, что не желательно.
В нормализованном виде формат с плавающей запятой выглядит так в десятичной Системе Счисления (СС), если на мантиссу отводится определенное количество разрядов -11 в данном случае:
После нуля и запятой идет не нулевое число.
В ЭВМ эти правила применяются к Двоичной СС.
Рассмотрим конкретный формат числа с плавающей точкой в двоичной
СС из 4х байт, который используется в ЭВМ и ПК. Это одинарная точность.
31 бит – знак всего числа
30 бит – знак Порядка. Поскольку отрицательные числа изображаются в дополнительном коде, то 30 бит входит в общее число битов Порядка.
(0-22) биты – Мантисса. Вес разрядов исчисляется так же как и в Дробной части в формате с фиксированной точкой.
(23-30) биты – Порядок. Порядок числа 2 в степени значения 8 битов 23-30
Формат числа с плавающей точкой двойной точности
63 бит- знак всего числа.
62 бит - знак Порядка. Поскольку отрицательные числа изображаются в дополнительном коде, то 62 бит входит в общее число битов Порядка.
(0-51) биты – Мантисса. Вес разрядов исчисляется так же как и в Дробной части в формате с фиксированной точкой.
(52-62) биты – Порядок. Порядок числа 2 в степени значения
11 битов (52-62).
Основные свойства форматов с плавающей точкой.
1. Формат из 4х байт или «Float32» или «Single»
Диапазон представления чисел
1.18E-38 <|X|<3.40E+38
Точность представления менее 2^-23, или менее 1.192Е-7.
Т.е. точность 7 знаков после запятой.
2. Формат из 8 байт или «Float64» или «Double»
Диапазон представления чисел
2.23E-308 <|X|< 1.79E+308
Точность представления чисел менее 2^-52, или менее 2.22E-16.
Т.е. точность 15 знаков после запятой.
3. Формат из 16 байт или «Float128» или Четверная точность
Диапазон представления чисел
3.3621E-4932 < |X| < 1.1897E+4932
Точность представления чисел менее 2^-52, или менее 1.9259E-34
Т.е. точность 34 знака после запятой.
--------------
Переведем число Пи = 3,1415926536
в формат чисел с плавающей точкой из 4х байт.
Составим таблицу с такими весами битов в соответствии с Рисунком1
Технология перевода такая.
1. 3,1415926536 – 2 = 1.1415926536 Бит 24 =1
2. 1.1415926536 – 1 = 0.1415926536 Бит 23 =1
3. 0.1415926536 < 0.5 Бит22 =0
4. 0.1415926536 < 0.25 Бит 21 =0
5. 0.1415926536 -0.125 = 0.0165926536 Бит 20 =1
6. 0.0165926536<0.0625 Бит19 = 0
7. 0.0165926536<0.03125 Бит18 = 0
8. 0.0165926536-0.015625= 0.0009676536 Бит17= 1
9. 0.0009676536<0.0078125 Бит16= 0
10. 0.0009676536<0.00390625 Бит15= 0
11. 0.0009676536<0.001953125 Бит14= 0
12. 0.0009676536<0.0009765625 Бит13= 0
13. 0.0009676536-0.00048828125=0.00047937235 Бит12= 1
14. 0.00047937235-0.000244140625= 0.000235231725 Бит11= 1
И так далее…
Получили число Пи = 11.00100100001111…
В формате с фиксированной точкой.
Проверим в интернете число Пи с фиксированной точкой:
Пи = 11.00100100001111110110
Получили отличное соответствие!
Рисунок1 по весам разрядов совпадает с форматом числа с фиксированной точкой.
Чтобы окончательно перевести полученное число Пи из формата с фиксированной точкой в формат с плавающей точкой передвинем точку в полученном числе влево на 2 разряда и умножим его на 2 в степени2:
Пи = 2^2*0.1100100100001111…
Это нормализованное число Пи.
Окончательно представляем число Пи в формате с плавающей точкой:
Есть и другие цифровые форматы, например, строковые, символьные.
Я не ставлю своей задачей рассмотреть детально все имеющиеся цифровые форматы. Основная цель – познакомить читателя с тем, с чем работает ЦП и побудить читателя к творческому подходу. Возможно, кто-то будет строить свой ЦП со своими форматами и командами. Такие примеры есть. В США в то время, когда Г.Каспаров был чемпионом мира по шахматам, двое американцев создали ЭВМ(ЦП), которая обыграла Каспарова в шахматы.
Один из них создал ЭВМ, другой написал программу. У того, кто создавал ЭВМ, на стене в кабинете висела блок-схема той ЭВМ (ЦП) и он её не прятал. На вопрос почему не прячешь, ответ был такой: всё равно никто не поймёт!
Так, что есть шанс создать свой уникальный ЦП!
Сотрудники Вычислительного Центра Главсредволговодстроя, г. Саратов, 1977-1993.
------------------------------
Если Вам понравился материал статьи, подпишитесь пожалуйста на мой канал в целом.
Для этого пройдите по ссылке ниже и нажмите кнопку "Подписаться"
https://dzen.ru/profile/editor/id/62cd3cfc63f88417d7e74b79