|
||||||||||||||||||
Часть 2. Вычисления с плавающей точкой.Часть 2. Вычисления с плавающей точкой. Вычислить значение выражения a+b/c I. Значения -19,10,-26 будут храниться в 16-ричной системе. Для решения задачи необходим ввод значений с плавающей точкой, которые будут записаны в формате IEEE754. Для записи отрицательных чисел используется дополнительный код. Запишем в таком формате число -19. Первый бит обозначает знак числа, так как число -19 – отрицательное, то первый бит равен 1. Переведём -19 в двоичную систему счисления: -1910=-100112 Нормализованный вид: -1.00112*24. Следовательно экспонента=4, а мантисса -1.0011. Биты со 2 по 9 отведены под экспоненту. Экспонента равна 4+127=13110= 100000112. Оставшиеся 23 бита отводят для мантиссы. У нормализованной двоичной мантиссы первый бит всегда равен 1. Мантисса = 00110000000000000000000. Таким образом, после преобразования по стандарту IEEE754 число -19 будет иметь вид – 110000011001100000000000000000002. Переведём в hex = 0xC1980000. II. Аналогично проделаем данные действия с числами 10, -26. Получим: 10=0x41200000, -26=0xC1D00000 III. Входные значения хранятся в переменных a, b, c, результат в a. IV. Выполнение программы осуществляется по формуле a/(b+c). Переведём это выражение в постфиксную нотацию – bc+a/ (для понимания алгоритма работы с сопроцессором). V. Текст программы. 1) fld dword [a]; берём переменные из стека 2) fld dword [b] 3) fld dword [c] 4) fadd; cумма b и c 5) fst dword [b]; полученное значение записывается в b 6) fdiv; деление a на b 7) fst dword [a]; записываем результат деления в a 8) ret 9) section .data 10) a dd 0xC1980000 11) b dd 0x41200000 12) c dd 0xC1D00000 13) ret I. Результаты работы программы на наборах входных данных. II. Трассировочная таблица
Результат 1,1875 – совпадает с вычислениями вручную.
|
||||||||||||||||||
|