Сборник по задачам и примерам Assembler



         

Вывод целых десятичных чисел из диапазона 0..999 999 999 999 999 999



Вывод целых десятичных чисел из диапазона 0..999 999 999 999 999 999

Этот способ вывода основан на возможности сопроцессора работать с упакованными десятичными числами. Выше мы уже рассматривали преобразование десятичных чисел в двоичное представление с использованием этой возможности. Система команд сопроцессора содержит команду FBSTP, которая сохраняет десятичное число из вершины стека сопроцессора в области памяти с одновременным преобразованием этого числа в формат десятичного числа. Область памяти, в которую происходит сохранение, должна быть описана директивой DT. Важно отметить, что команда FILD, с помощью которой вы будете помещать целое число в сопроцессор для дальнейшего преобразования, трактует целые числа как числа со знаком. Поэтому попытка задать целое число в виде Offffh (с единичным старшим разрядом операнда) приведет к тому что в стек сопроцессора будет помешено значение со всеми вытекающими отсюда последствиями для результата преобразования.

;prg06_09.asm - программа вывода целого десятичного числа

:из диапазона 0..999 999 999 999 999 999 на экран.

¦.Вход: выводимое значение - в поле string_bin_dword.

¦.Выход: вывод десятичного числа из диапазона 0. .999 999 999 999 999 999 на экран.

.data

:поле string_bin_dword содержит выводимое значение - с помощью идентификаторов.

:вводимых директивой label, это значение может трактоваться как значение

различной разрядности:

string_bin_byte label byte

string_bin_word label word

string_bin_dword label dword

string_bin_qword dq 0de0b6b3a763ffffh :зададим максимально возможное

¦.для сопроцессора двоичное целое со знаком

;в string_pack исходное значение из string bin_dword в упакованном десятичном формате string_pack dt О len_string_pack=$-string_pack adr_string_pack dd string_pack string db 20 dup (0) максимальный результат состоит из 18 десятичных цифр

len_string-$-string adr_stringdd string

.code

:.........преобразуем bin->dec

finit

fild string_bin_qword ;заносим в сопроцессор двоичное целое число fbstp string_pack извлекаем упакованное десятичное :.........распакуем........................................




Содержание  Назад  Вперед