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




Как видите, инструкция 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, мы знаем.

Арифметические команды

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

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

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

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


назад далее