PDA

View Full Version : برنامه Counting Sort



armin0282
سه شنبه 27 اردیبهشت 1390, 19:24 عصر
سلام این برنامه رو دیشب نوشتم.این برنامه یک روش مرتب سازی هست،اینجا گذاشتم که دوستای دیگه هم استفاده کنند. اگه هم باگی داره ممنون میشم بگید!!.فقط یه مشکلی که داره اعداد 2 رقمی یا nرقمی رو نمی تونه چاپ کنه اگه کسی واسه چاپ این اعداد هم میتونه کمک کنه ازش ممنون میشم!.

در ضمن یه سوال هم در مورد این قسمت دارم.







label1:
mov al,[si]
mov [di],al
mov bx,0
add bx,[di]
add temp[bx],1
inc si
loop label1

[si] داره به اولین عنصر data1 اشاره میکنه اما من وقتی به این صورت مینوشتم برنامه جواب نمی داد و [si]رو برابر index ارایه data1 که برابر 0 هست قرار می داد که بالاخره با کد بالا کار کرد کسی مدونه چرا تکه کد زیر جواب نمی ده؟؟؟؟؟؟؟؟



lea si,data1
add temp[si],1


مثلا اگه si به 4 اشاره کنه به جای temp[4],1 قرار میده temp[0],1 کسی می دونه چرا؟؟؟

این هم کد کامل






Dseg segment
Data1 db 5,4,2,3,3,3,1,4,0,6,7,4,5,6,2,3,9,8,7,5,6,2,3,9,4, 3,5,6,7,4,8,9,5,8,3,4,5,2,4,5,6,3,4,8,9,7,5,0,0
Temp db 10 dup(0)
SData db 50 dup(0)
A db ?
ends
Sseg segment
db 50 dup(?)
ends
Cseg segment
assume SS:Sseg,DS:Dseg,CS:Cseg
begin proc far

push ax
push ds
mov ax,dseg
mov ds,ax

lea si,Data1
lea di,a


mov cx,50
;mov data1 to index temp
label1:
mov al,[si]
mov [di],al
mov bx,0
add bx,[di]
add temp[bx],1 ;shomareshe maghadire data1 va gharar dadane anha dar indexe temp step1
inc si
loop label1

mov cx,10
lea bx,temp

;jame maghadir temp ba khanehaye ghableshan step2 + print
label2:
mov ah,[bx]
add [bx]+1,ah
inc bx
loop label2

;meghdar dahi be sdata
mov cx,50
lea dx,sdata
dec si
label3:
mov al,[si]
mov [di],al
mov bx,0
add bx,[di]
sub temp[bx],1
;temp -1 and sdata[bx] = data
mov bl,temp[bx]
mov [di],bl
mov bx,0
add bx,[di]
mov sdata[bx],al
dec si
loop label3

;print Sdata
mov cx,50
lea bx,sdata
label4:
mov ah,[bx]
mov dx,ax
mov ah,0eh
or dh,30h
mov al,dh
int 10h
inc bx
loop label4

endp begin
ends
end begin