5.3. Ввод данных

Будем принимать символы с клавиатуры с помощью функции 1 прерывания 21h. Дополним наш объектный модуль mylib.obj подпрограммами ввода десятичных и восьмеричных чисел. Нам понадобится команда умножения целых чисел

mul    si    ; dx : ax = ax * si

записанных в ax и si, результат которой будет записан в регистровую пару dx:ax, в dx – старшие, а в ax – младшие разряды результата. В модуле mylib.asm надо добавить строку

      public      get

и написать следующий текст:

< 1 > get      proc        ;ввод десятичного числа в bx

< 2 > mov       bx,0       ;очистка bx

< 3 > mov       si,10      ;десятичное число

< 4 > mov       cx,5       ;пять цифр

< 5 > next:

< 6 > mov       ah,1       ;ввод символа

< 7 > int       21h        ;с клавиатуры в al

< 8 > cmp       al,’ ‘     ;конец ввода — пробел

< 9 > je back

< 10 > mov       ah,0

< 11 > and       al,00001111b    ;значение цифры

< 12 > mov       di,ax      ;сохранить ax

< 13 > mov       ax,bx      ;умножить bx

< 14 > mul       si         ;на 10

< 15 > add       ax,di      ;значение bx*10+цифра

< 16 > mov       bx,ax      ;записать bx

< 17 > loop      next

< 18 > back:               ;в bx значение

< 19 > ret                  ;введенного числа

< 20 > get      endp