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




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

Команды ПЗУ

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

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

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

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


назад далее