Программирование на Ассемблере



       Как провести мероприятие - БэбиБлог. |   

13.2.2 Ввод/вывод числовых данных


Для ввода числовых данных необходимо:

1. Ввести соответствующую строку.

2. Преобразовать ее в числовой вид.

Для вывода необходимо выполнить действия в обратном порядке.

Преобразование строки в число.

Пусть задана строка вида:

[<Пробелы>] [<>][<Пробелы>] Цифра [Цифра Цифра...]

Преобразовать ее в соответствующее ей число.

Для преобразования последовательности цифр в число можно использовать схему Горнера. Например, пусть необходимо строку символов  «375»

преобразовать в число. Представим число в виде:

(3 * 10 + 7) * 10 + 5. Здесь 3, 7, 5 -цифры числа, а 10

- основание системы счисления для исходного числа. Таким образом, алгоритм преобразования:

r=0;

for (i=n-1; i>=0; i--)

   r = r*10 +d[i];

Так как в общем виде числа могут быть пробелы, которые надо игнорировать, напишем макрос для игнорирования этих символов. На вход макроса подается адрес символа строки, на выходе получаем адрес ненулевого символа

macro skip address

local    l1, l2

ifidn <di>, <address>

reg       equ      esi

else

reg       equ      edi

endif

push     reg

mov     reg, address

l2:

cmp     [byte ptr reg], ‘ ’

jne       l1

inc       reg

jmp      l2

l1:

mov     address, reg

pop      reg

endm

Данный макрос подключим к файлу win.inc

Функции для преобразования строки в число и обратного преобразования представлены ниже.

Преобразование чисел при выводе

До вывода числа оно должно быть преобразовано из внутреннего представления в строковое. Для преобразования можно использовать следующие способы.

1. Число делится на 10 и остаток от деления рассматривается как очередная цифра. Деление продолжается до тех пор, пока не получим нулевое значение. Недостаток способа: цифры числа получаем, начиная с младших, перед выводом необходимо инвертирование строки или формирование строки заданной длины.

2. Число делится на 10000, 1000,... и получаем цифры числа, начиная со старших цифр. Недостаток. Требуется хранение массива или его программное формирование.




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