فوری-جست و جوی دودیی

mitra77

عضو جدید
سلام.لطفا اگه میشه بهم کمک کنید ممنون.
کسی برنامه ی جست و جوی دودویی به زبان اسمبلی رو بلده اگه کمکم کنید ممنون می شم.
این برنامه ی جست و جوی دودوییه کسی می تونه بگه کجای برنامه دارای اشکاله؟ممنون

;to perform binary search on an array

.model small


.data
d1 db 13,10,'Enter Array Siz :$'
siz db ?
d2 db 13,10,'Enter Number :$'
d3 db 13,10,'Enter Number to find :$'
num db ?
d4 db 13,10,'FOUND'
d5 db 13,10,'NOT FOUND'
arr db 10 dup(?)
hi db ?
lo db ?
mid db ?

.code
.startup
;get the array size
mov dx,offset d1
mov ah,9
int 21h

call get_no
mov si,0
;input the array
xor si,si
mov cl,siz

L1:
mov dx,offset d2
mov ah,9
int 21h

call get_no
mov al,cl
cbw
cmp si,ax
jne b
inc si
loop L1
;get the number to be searched
b: mov dx,offset d3
mov ah,9
int 21h

call get_no
mov num,dl
;now search the array
;first initialize lo,hi and mid
xor ax,ax
mov bl,siz
mov hi,bl
mov lo,0
mov al,hi
add al,lo
shr al,1
mov mid,al
;at most size/2 passes
mov cl,mid
L2:
xor dx,dx
mov dl,mid
mov si,dx
mov bh,arr[si]
mov bl,num
cmp bh,bl
je FOUND
jb LESS
;bh > bl or arr[mid] > num
mov lo,dl
mov al,lo
add al,hi
shr al,1
mov mid,al

LESS:
mov hi,dl
mov al,hi
add al,lo
shr al,1
mov mid,al
loop L2

;if it reaches here then the number wasn't found
NOT_FOUND:
mov dx,offset d5
mov ah,9
int 21h
jmp FINISH

FOUND:
mov dx,offset d4
mov ah,9
int 21h

FINISH:
.exit

get_no proc near
MOV AH,01H
INT 21H
SUB AL,30H
MOV DL,AL
SHL DL,4

INT 21H
SUB AL,30H
ADD DL,AL
ret
get_no endp

end
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
با سلام،
چه عجب یکی پیدا شد که برنامه ی آماده نخواد! برنامه تون رو با کمی تغییر تو تاپیک "برنامه های نوشته شده" گذاشتم! می تونید از اون جا بردارید!
نکته این که همه ی تغییراتی که من دادم ناشی از اشتباه شما نبوده و بعضی هاش فقط به سلیقه ی من برمی گرده!
موفق باشید!
 

Similar threads

بالا