PDA

Просмотр полной версии : программа на подсчёт чисел в массиве, не равных 0



Spiderman
30.04.2010, 20:44
;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[i]==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

BulldozerBSG
05.05.2010, 11:35
циклически делить на 10. к остатку от деления добавлять 30h и печатать перед предыдущим на печатаным символом. а результат сравнивать с 0. если не равен то повторить деление иначе на выход.