For Informatics
Вещественные числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.
Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые знак, порядок и мантиссу. В наиболее распространённом формате число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа (0 — если число положительное, 1 — если число отрицательное). При этом порядок записывается как целое число, а мантисса — в нормализованном виде, своей дробной частью в двоичной системе счисления. Вот пример такого числа из 16 двоичных разрядов:
Знак | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Порядок | Мантисса | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
14 | 10 | 9 | 0 |
Знак — один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:
, где s — знак, B-основание, E — порядок, а M — мантисса.
При этом лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями.
Читайте также
5.1. Поиск на локальном компьютере Самой простой задачей поиска является поиск на локальном компьютере. В этом случае множество проблем решается автоматически, и вам остается разобраться с несколькими оставшимися: где и как искать.Если вы точно или хотя бы приблизительно
Получение сведений о компьютере С помощью базы данных CIMOM можно также определить конфигурацию операционной системы. Метод определения конфигурации подобен методу определения установленных на компьютере компонентов, поэтому будет рассмотрена лишь часть кода, с помощью
Система счисления
Если вы читаете данную статью, то, скорее всего, уже знаете об этом, но повторить стоит. Все данные в персональном компьютере хранятся в двоичной системе счисления. Это означает, что любое число необходимо представить в соответствующей форме, то есть состоящим из нулей и единиц.
Чтобы перевести привычные для нас десятичные числа к виду, понятному компьютеру, нужно воспользоваться описанным ниже алгоритмом. Существуют и специализированные калькуляторы.
Итак, для того чтобы перевести число в двоичную систему счисления, нужно взять выбранное нами значение и поделить его на 2. После этого мы получим результат и остаток (0 или 1). Результат опять делим 2 и запоминаем остаток. Данную процедуру нужно повторять до тех пор, пока в итоге также не окажется 0 или 1. Затем записываем конечное значение и остатки в обратном порядке, как мы их получали.
Именно так и происходит представление чисел в компьютере. Любое число записывается в двоичной форме, а потом занимает ячейку памяти.
Модели памяти
Директива .MODEL определяет модель памяти, используемую программой. После этой директивы в программе находятся директивы объявления сегментов ( .DATA, .STACK, .CODE, SEGMENT ). Синтаксис задания модели памяти
.MODEL модификатор МодельПамяти СоглашениеОВызовах
Параметр МодельПамяти является обязательным.
Основные модели памяти:
Модель памяти | Адресация кода | Адресация данных | Операци- онная система |
Чередование кода и данных |
TINY | NEAR | NEAR | MS-DOS | Допустимо |
SMALL | NEAR | NEAR | MS-DOS, Windows | Нет |
MEDIUM | FAR | NEAR | MS-DOS, Windows | Нет |
COMPACT | NEAR | FAR | MS-DOS, Windows | Нет |
LARGE | FAR | FAR | MS-DOS, Windows | Нет |
HUGE | FAR | FAR | MS-DOS, Windows | Нет |
FLAT | NEAR | NEAR | Windows NT, Windows 2000, Windows XP, Windows Vista | Допустимо |
Модель tiny работает только в 16-разрядных приложениях MS-DOS. В этой модели все данные и код располагаются в одном физическом сегменте. Размер программного файла в этом случае не превышает 64 Кбайт.
Модель small поддерживает один сегмент кода и один сегмент данных. Данные и код при использовании этой модели адресуются как near (ближние).
Модель medium поддерживает несколько сегментов программного кода и один сегмент данных, при этом все ссылки в сегментах программного кода по умолчанию считаются дальними (far), а ссылки в сегменте данных — ближними (near).
Модель compact поддерживает несколько сегментов данных, в которых используется дальняя адресация данных (far), и один сегмент кода с ближней адресацией (near).
Модель large поддерживает несколько сегментов кода и несколько сегментов данных. По умолчанию все ссылки на код и данные считаются дальними (far).
Модель huge практически эквивалентна модели памяти large.
Особого внимания заслуживает модель памяти flat , которая используется только в 32-разрядных операционных системах. В ней данные и код размещены в одном 32-разрядном сегменте. Для использования в программе модели flat перед директивой .model flat следует разместить одну из директив:
Желательно указывать тот тип процессора, который используется в машине, хотя это не является обязательным требованием. Операционная система автоматически инициализирует сегментные регистры при загрузке программы, поэтому модифицировать их нужно только в случае если требуется смешивать в одной программе 16-разрядный и 32-разрядный код. Адресация данных и кода является ближней ( near ), при этом все адреса и указатели являются 32-разрядными.
Параметр модификатор используется для определения типов сегментов и может принимать значения use16 (сегменты выбранной модели используются как 16-битные) или use32 (сегменты выбранной модели используются как 32-битные).
Параметр СоглашениеОВызовах используется для определения способа передачи параметров при вызове процедуры из других языков, в том числе и языков высокого уровня (C++, Pascal). Параметр может принимать следующие значения:
При разработке модулей на ассемблере, которые будут применяться в программах, написанных на языках высокого уровня, обращайте внимание на то, какие соглашения о вызовах поддерживает тот или иной язык. Используются при анализе интерфейса программ на ассемблере с программами на языках высокого уровня.
Нормальная и нормализованная форма
Нормальной формой числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале [0; 1). Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, 0,0001 можно записать в 4 формах — 0,0001×10 0 , 0,001×10 −1 , 0,01×10 −2 , 0,1×10 −3 ), поэтому распространена также другая форма записи —нормализованная, в которой мантисса десятичного числа принимает значения от 1 (включительно) до 10 (не включительно), а мантисса двоичного числа принимает значения от 1 (включительно) до 2 (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме 0) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа 0 (а заодно и некоторых других полезных чисел, таких как и ).
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, «не число», получается как результат операций типа деления нуля на ноль) и .
Название | Тип в языке программирования C | Диапазон | Биты мантиссы | Биты |
---|---|---|---|---|
Half precision | Нет | 6,10×10 -5 ..65504 | 10+1 | 16 |
Single precision | float | 3,4×10 -38 ..3,4×10 38 | 23+1 | 32 |
Double precision | double | 1,7×10 -308 ..1,7×10 308 | 52+1 | 64 |
Отрицательные числа
Теперь давайте посмотрим, как происходит представление чисел в компьютере, если они являются отрицательными. Для размещения значения, которое меньше нуля, отводится две ячейки памяти, или 16 бит информации. При этом 15 уходят под само число, а первый (крайний левый) бит отдается под соответствующий знак.
Если цифра отрицательная, то записывается «1», если положительная, то «0». Для простоты запоминания можно провести такую аналогию: если знак есть, то ставим 1, если его нет, то ничего (0).
Оставшиеся 15 бит информации отводятся под число. Аналогично предыдущему случаю, в них можно поместить максимум пятнадцать единиц. Стоит отметить, что запись отрицательных и положительных чисел существенно отличается друг от друга.
Для того чтобы разместить в 2 ячейках памяти значение больше нуля или равное ему, используется так называемый прямой код. Данная операция производится так же, как и было описано, а максимальное А = 32766, если использовать десятичную систему счисления. Сразу хочется отметить, что в данном случае «0» относится к положительным.
Знак числа Самый старший разряд хранит знак числа
Самый старший разряд хранит знак числа.
00100001 11011111
Число положительное Число отрицательное
Что называют архитектурой
Описанные фон Нейманом и его соавторами классические принципы построения вычислительных устройств применялись во всех поколениях ЭВМ. В дополнение к ним в каждом конкретном семействе (PDP, ЕС ЭВМ, Apple, IBM PC и др.) формулируются свои собственные принципы устройства, благодаря которым обеспечивается аппаратная и программная совместимость моделей. Для пользователей это означает, что все существующие программы будут работать и на новых моделях того же семейства компьютеров. В литературе общие принципы построения конкретного семейства компьютеров называют архитектурой.
К архитектуре обычно относят:
• принципы построения системы команд и их кодирования;
• форматы данных и особенности их машинного представления;
• алгоритм выполнения команд программы;
• способы доступа к памяти и внешним устройствам;
• возможности изменения конфигурации оборудования.
Стоит обратить внимание на то, что архитектура описывает именно общее устройство вычислительной машины, а не особенности изготовления конкретного компьютера (набор микросхем, тип жёсткого диска, ёмкость памяти, тактовая частота). Например, наличие видеокарты как устройства для организации вывода информации на монитор входит в круг вопросов архитектуры. А вот является ли видеокарта частью основной платы компьютера или устанавливается на неё в виде отдельной платы, с точки зрения архитектуры значения не имеет. Иначе могло бы получиться, что для интегрированной в плату видеока