PDA

View Full Version : این برنامه مشکلش چیه،رشته ها را وارد آرایه می کنه ولی سورت نمی کنه!



imani1983
چهارشنبه 08 دی 1389, 10:46 صبح
با سلام

اگه با masm اجرا بشه 10رشته را وارد آرایه می کنه ولی سورت نمی کنه!از برنامه خارج می شه.
ولی با Emu8086 تا رشته چهارم را می گیره و تو printing_string proc ارور می ده! از همه دوستان خواهش می کنم کمک کنند%
.model small
.data
maxlen db 26
actlen db ?
str1 db 26 dup(?)
msg1 db 0dh,0ah,'please enter your names(max. 20 names): ',0dh,0ah,'$'
msg2 db 0dh,0ah,'result is : ',0dh,0ah,'$'
names db 20 dup(25 dup(' '),0dh,0ah),'$'
crlf db 0dh,0ah,'$'
countrn db 20
.code
main proc
mov ax,@data
mov ds,ax
mov es,ax
lea dx,msg1
call print_string
call read_names
call sort
lea dx,msg2
call print_string
lea dx,names
call print_string
mov ah,4ch
int 21h
main endp

read_string proc
mov ah,10
mov dx,offset maxlen
int 21h
ret
read_string endp

print_string proc
mov ah,09h
int 21h
ret
print_string endp

read_names proc
lea bp,names
mov cx,20
read_loop:
lea dx,crlf
call print_string
call read_string
push cx
mov di,bp
lea si,str1
mov cl,actlen
or cl,cl
jz end_read
mov ch,0
rep movsb
pop cx
add bp,27
loop read_loop
jmp end_pro
end_read:
pop cx
sub countrn,cl
end_pro:
ret
read_names endp

sort proc
lea si,names
mov cl,countrn
or cl,cl
jz end_sort
dec countrn
mov ch,0
or cl,cl
jz end_sort
loop1:
mov di,si
add di,27
push cx
loop2:
call compare
add di,27
loop loop2
pop cx
add si,27
loop loop1
end_sort:
ret
sort endp
compare proc
push cx
push di
push si
mov cx,25
repe cmpsb
jcxz end_cmp
jb end_cmp
pop si
push si
lea di,str1
mov cx,25
rep movsb
pop di
pop si
push si
push di
mov cx,25
rep movsb
pop si
pop di
push di
push si
lea si,str1
mov cx,25
rep movsb
end_cmp:
pop si
pop di
pop cx
ret
compare endp
end main

imani1983
پنج شنبه 09 دی 1389, 13:22 عصر
دوستان لطفاً کمک کنید من به این برنامه نیاز دارم%:قلب:

asadegha
دوشنبه 13 دی 1389, 03:12 صبح
or cl,cl براي چي نوشتيش؟ اين خط كه اصلا كاري با cl نداره. هر چيزي رو با خودش خق كني ميشه خودش.

x + x = x
1 + 1 = 1
0 + 0 = 0

اصلا روال sort رو برام توضيح بده چيكار كردي؟

shecarchi
دوشنبه 13 دی 1389, 03:21 صبح
or cl,cl براي چي نوشتيش؟ اين خط كه اصلا كاري با cl نداره. هر چيزي رو با خودش خق كني ميشه خودش.

x + x = x
1 + 1 = 1
0 + 0 = 0
چون هر دو عملوند یکسان هستن تاثیری روشون نمیذاره ولی روی فلگ ها تاثیر میذاره که میشه تو دستورات پرش ازشون استفاده کرد