; output message
message macro mes
mov ah,9
lea dx,mes
int 21h
endm
;output numbers
output macro num
mov ah,2
mov dl,num
add dl,'0'
int 21h
endm
dseg segment
table db 9,-22,-5,48,8,12,3,23,7,1
ten db 00001010b
count db 0
msg db 'Isxodnii massiv',10,13,'$'
msg2 db 10,13,'Massiv - resultat',10,13,'$'
dseg ends
;---------------------
cseg segment
assume cs:cseg, ds:dseg
start: mov ax,dseg
mov ds,ax ; init segment data
message msg
double:
inc count
mov cx,10
mov bx,0
mov si,0
;-----------------------
;-----------------------
m:
mov al,table[si]
cmp al,0
je nol
jl mensch
mov dl,'0'
mov ah,0
push dx
;---------------
c1: div ten ;pri vtorom proxode delit nekorrektno
;--------------
mov dl,ah
mov dh,0
push dx
cmp al,0
je vix
mov ah,0
jmp c1
vix:
m1: pop dx
cmp dl,'0'
je vix1
mov dh,0
add dl,'0'
mov ah,2
int 21h
jmp m1
vix1:
jmp z
mensch:
mov bl,al
mov ah,2
mov dl,'-'
int 21h
neg bl ;modul' chisla
mov dl,'0'
mov dh,0
push dx
mov al,bl
mov ah,0
m3: div ten
mov dl,ah
mov dh,0
push dx
cmp al,0
je vix3
mov ah,0
jmp m3
vix3:
m4: pop dx
cmp dl,'0'
je vix4
add dl,'0'
mov ah,2
int 21h
jmp m4
vix4:
jmp z
nol: mov ah,2
mov dl,'0'
int 21h
z: mov ah,2 ;probel
mov dl,' '
int 21h
;-------------------
;------------------
inc si
loop m
cmp count,2
je exi
;----------------------
mov si,0
mov di,1
jmp input
now:
inc si
mov di,si
inc di
now1:
input: mov ah,table[si]
cmp ah,table[di]
jl next
mov al,table[si]
mov ah,table[di] ;zamena
xchg al,ah
mov table[si],al
mov table[di],ah
next:
inc di
cmp di,10
jb now1
cmp si,9
jae exit
jmp now
exit:
;------------------
message msg2
jmp double
exi:
mov ah,1
int 21h
mov ah,4ch
int 21h
cseg ends
end start
некорректное деление
Приветствую. Возникла проблема в следующем. Ниже приведен листинг, в нем если разбить код на блоки, то в 1 блоке выводится массив чисел, 2 блок сортировка массива и далее снова на 1 блок, и вот в нем некорректное деление(причем чисел больших девяти)...... Проверял в отладчике раз 5. Не знаю что делать. Попробуйте у себя кто нибудь этот код. И посоветуйте что делать.
Напрашивается предположение о выходе за край массива, поскольку переменная, на которую делим, находися в памяти сразу за ним.
Автору совет - получше оформлять исходники, структурировать программу - поди на следующий день не разберёшься, что написал. Смысловых меток надо побольше и комментариев, хотя бы к кускам кода.
Хранить строчку в стеке и выводить посимвольно - не лучший вариант, лучше обрабатывать всё сразу и выводить 9-й функцией. Если надо, запощу готовую стандартную процедуру int2str
Одинаковые куски кода хорошо бы вынести в процедуры, вообще поработать над структурой программы.