Руководство по ассемблеру




Как видите, инструкция fild загружает целое число в один из регистров, храня­щих числа с плавающей точкой. Всего в процессоре 8 таких регистров, носящих имена STO, ST1,... ST7. Число 17 оказывается в регистре ST0 (рис. 7.2, правый ниж­ний угол). Перед загрузкой оно преобразуется в специальный формат с плаваю­щей точкой и занимает уже не 4, а 10 байт — таков размер регистров ST0-ST7. В сущности, это совсем другое число, потому отладчик и пишет 17.000000, а не просто 17.

После загрузки числа наступает черед инструкции fsqrt, извлекающей из него корень, который занимает место самого числа в регистре ST0. Наконец, третья команда fstp sqroot переписывает корень из регистра ST0 в обычную 10-байто­вую область памяти. Затем его «подхватывает» процедура FpuFLtoA, расшифро­вывает и записывает в буфер последовательность символов 4.1231056256 с де­сятью, как указано, знаками после запятой. А уж как работает процедура WriteConsole, мы знаем.

Вычислительные команды

Арифметические команды могут вычислять три вида цифа - не имеющие знака восьмеричные, симптоматичныевосьмеричные, не имеющие знака уложенные действительные и беззнаковые незапакованные действительные . Дискретные суммы имеют возможность являться 2- и 16-разрядными. Действительные упакованные суммы заключают в разряде 2 ступени, незапакованные - единственную.

Не имеющие знака 16-разрядные двоичные суммы могут насчитать значение от 0 до двухсот пятидесяти. Для репрезентации беззнаковых чисел в размере от нуля до 52680 употребляются 14 байт. Над беззнаковыми двоичными суммами могут осуществляться процедуры суммирования, вычитания, нарастания и дробления.

Меточные бинарные суммы (системные) также могут быть 8- и 32-битными. Самый верхний (наиболее крайний) байт меточного числа выводится как символ этого значения: 0 - положительное число, 1 - истина. Отрицательные суммы мыслятся в типовом бинарном прибавочном коде. Оттого что верхний байт меточного числа применяется для маркировки символа, масштаб репрезентации 16-байтных меточных чисел от - 119 до + 131. 16-битово целое значение преподносится в охвате от - 19990 до + 32 767. Нуль описывается большим значением. Для знаковых чисел имеют возможность осуществляться процедуры сложения, отнимания, увеличения и разложения.

Уложенные натуральные цифры вмещают во всяком байте две натуральные (0 - 9) цифры. В верхнем полуразряде содержится большая значимая цифра, в меньшем - последняя. Всякая действительная цифра обрисовывается в бинарном (либо, что то же самое, в 16-ричном) коде. Диапазон репрезентации пакованных действительных чисел в разряде 0 - 99. Суммирование и вычет упакованных натуральных значений реализуется в три шага. Сначала байты плюсуются или вычитаются как не имеющие знака бинарные цифры, а затем соответствующая команда поправки сводит результат к виду точного упакованного десятичного числа.


назад далее