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
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