Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






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




В памяти ЭВМ все данные хранятся с использованием двоичной системы счисления, где каждый двоичный разряд (бит) может принимать только значение 0 или 1. Беззнаковые целые числа. Наиболее просто представляются беззнаковые целые числа – на следующем рисунке сверху показано 8-разрядное двоичное число, соответствующее десятичному 155, а снизу – интерпретация его разрядов.

               
27 26 25 24 23 22 21 20

Разряды числа принято нумеровать справа налево (то есть от младшего к старшему) начиная с нуля. Целые числа со знаком. Положительное число хранится в принципе точно так же, как и беззнаковое, только в два раза уменьшается диапазон значений. Дело в том, что старший бит числа теперь служит признаком того, что число отрицательное, и реально число разрядов становится на 1 меньше. Для представления отрицательных чисел недостаточно просто поставить 1 в старший бит - используется более сложный подход – вычисление так называемого дополнительного кода числа. Если число X задано в двоичной системе, то его дополнительный код можно найти следующим простым способом: 1. Инвертировать все биты в числе 2. Прибавить к числу единицу. Если будет перенос за пределы разрядной сетки, игнорировать. Вещественные числа в памяти компьютера представляются в форме с плавающей точкой. Форма с плавающей точкой использует представление вещественного числа R в виде произведения мантиссы m на основание системы счисления р в некоторой целой степени n, которую называют порядком: R = m * р^n;

Вариант записи, в которой перед десятичной точкой стоит ровно одна ненулевая цифра, называется нормализованным представлением, а его получение - нормализацией. Для числа 15.73 нормализованным представлением будет 1.573 * 10^1, где 1.573 – мантисса, 1 – показатель степени (иногда еще его называют порядок). Порядок указывает, на какое количество позиций и в каком направлении должна «переплыть», т.е. сместиться десятичная точка в мантиссе. Отсюда название «плавающая точка». В стандарте IEEE 754-1985 описаны 3 формата вещественных чисел.

Формат Описание
С одинарной точностью (в masm - REAL4, в С++ - float) Длина 32 бита, из них слева направо: 1 бит – знак, 8 битов – показатель степени, 23 бита – дробная часть мантиссы. Диапазон примерно от 2-126 до 2127 (и отрицательные)
С двойной точностью (в masm - REAL8, в C++ - double) Длина 64 бита, из них слева направо: 1 бит – знак, 11 битов – показатель степени, 52 бита – дробная часть мантиссы. Диапазон примерно от 2-1022 до 21023 (и отрицательные)
Расширенное с двойной точностью (в masm - REAL10, в C++ - long double) Длина 80 бит, из них слева направо: 1 бит – знак, 16 битов – показатель степени, 63 бита – дробная часть мантиссы. Диапазон примерно от 2-16382 до 216383 (и отрицательные)

В состав FPU входят 8 80-разрядных регистров R0-R7. Эти регистры организованы в виде стека, поэтому напрямую к ним обращаются редко – обычно используют относительные имена ST(0) – ST(7) или вообще применяют команды, не требующих указания регистров. Здесь ST(0) – вершина стека (один из 8 регистров), ST(1) – элемент в стеке перед ним и т.д. Типичный пример вычисления выглядит так. В стек помещается операнд из памяти. Затем выполняется операция, где второй операнд указывается в её аргументе. Либо можно второй операнд также поместить в стек и затем выполнить операцию над обоими аргументами в стеке. После выполнения вычислений результат с вершины стека передаётся в память. Fld – поместить в стек вещественное число из памяти, fild – поместить в стек целое число из памяти (преобразовав в вещественное), fst – скопировать число с вершины стека в память, fstp - скопировать число с вершины стека в память и удалить из стека, fist - скопировать число с вершины стека в память в целочисленную ячейку, округлив до целого. Арифметические команды: fadd – сложение, fsub – вычитание, fdiv – деление, fmul - умножение и др. Пример вычисления суммы двух вещественных чисел.

include masm32rt.inc

.data

out_format BYTE "%f", 0

var_a REAL8 1.5

var_b REAL8 2.3

sum REAL8?

.code

main PROC

fld var_a;поместить в стек

fadd var_b;сложить

fst sum;результат с вершины стека – в память

invoke crt_printf, ADDR out_format, sum

exit

main ENDP

end main

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных