;kontr 2
model small
.data
mas db 20 dup (?) ;mass
i db 0 ;counter
mes db "kol-vo chisel v massive ne ravnux 0 - ",'$'
.stack
.code
start:
mov ax,@data
mov ds,ax
xor ax,ax
mov cx,20 ;mass length
mov si,0 ;mass counter
enter_mas:
mov ah,1h
int 21h
mov mas[si],al
inc si
cmp si,cx
jne enter_mas
xor si,si ;clear counter
compare:
cmp si,cx ;end of the array check
je exit
cmp mas[si],30h ;NULL compare
je equal
jne not_equal
not_equal:
inc i
inc si
jmp compare
;if mas==0
equal:
inc si
jmp compare
exit:
mov ah,09h ;print the message
lea dx, mes
int 21h
mov ah,02h
mov dl,i
;print the number of NULL-elements
add dl,30h ; если цифры до 9, прибавляем 30h
int 21h
mov ax, 4c00h ;exiting
int 21h
end start
возникла проблема: что делать, если чисел, не равных нулю, больше чем 9? до 9 всё выводится нормально, а если 10 и больше - оно выдаёт символы вместо цифр. Как преобразовать в правильный код, подскажите please
программа на подсчёт чисел в массиве, не равных 0
Модератор: Andy
-
- Сообщения: 270
- Зарегистрирован: 09 янв 2010, 04:14
- Контактная информация:
циклически делить на 10. к остатку от деления добавлять 30h и печатать перед предыдущим на печатаным символом. а результат сравнивать с 0. если не равен то повторить деление иначе на выход.