mov cl, IN_STR+1 ; количество введенных символов
ВВ: mov al, [BX] ; очередной символ строки
Cmp al,’0’ ; код символа меньше чем код нуля?
Jb NC ; да, не цифра
cmp al, ‘9’ ; код символа больше чем код девяти
Ja NC ; да, не цифра
; символ - десятичная цифра
sub al, ‘0’ ; преобразуем ASCII код в число
Mov si, ax ; индекс в массиве счетчиков COUNT
inc COUNT[si] ; увеличиваем счетчик цифр
NC: inc bx ; получить очередной символ строки
Loop BB
; Вывод результатов
Mov cx, 10
Lea bx, CIFR ; адрес таблицы преобразования цифр в ASCII
Xor si, si ; номер выводимой цифры
OUT: mov al, ‘0’
Add ax, si ; ASCII код очередной цифры с номером в si
mov OUT_STR+2, al ; в буфер вывода
mov dl, COUNT[si] ; читать количество цифр с номером в si
Mov al, dl
Push cx ;временное сохранение cx
Mov cl, 4 ; сдвиг на четыре
Shr al, cl ; выделить старшую цифру
Xlat ; ASCII старшей цифры в al
Pop cx ; восстановление cx
mov OUT_STR+4, al ; в буфер вывода
Mov al, dl ; восстановить количество цифр в al
And al,00001111b ; выделить младшую цифру
Xlat ; ASCII младшей цифры в al
mov OUT_STR+5, al ; в буфер вывода
Lea dx, OUT_STR ; подготовка к выводу строки
Mov ah, 09h ; номер функции
Int 21h ; вывод строки
Inc si ; Счетчик очередной цифры
Loop OUT
QUIT: mov ax, 4C00h ; Код завершения 0
Int 21h ; Выход в DOS
Code ends
End START
Варианты заданий