assume cs:code,ds:data

data segment
arr dw 14h,7h,8h,2h
count equ 4
data ends


code segment
start:

mov ax,data
mov ds,ax

;for(i=0;i<n;i++)
; min=i;
; for(j=i+1;j<n;j++)
;    if(arr[j]<arr[min])  
;	min=j; 
; swap(arr[i],arr[min]);


; i=si,di=j
; arr=bp
; min=dx used as di (by pushing di bfore opn and then popping it back)
; n=cx


mov bp,offset arr
mov cx,count
add cx,cx

mov si,0
lbl1:
cmp si,cx
jz done
   mov dx,si
  
   mov di,si
   add di,2
   lbl2:
   cmp di,cx
   jz outofinner
        mov bx,[di+bp]
        push di
        mov di,dx
        cmp bx,[di+bp]
        pop di
	   jnb lnot
	   mov dx,di
    lnot:
    add di,2
    jmp lbl2

   outofinner:

   push di
   mov di,dx
   mov bx,[si+bp]
   xchg bx,[di+bp]
   mov [si+bp],bx
   pop di

add si,2
jmp lbl1

done:	


mov cx,count
;bp is still the same
extrn showb:near


lp1:
mov ax,[bp]
call showb
add bp,2
loop lp1




mov ax,4c00h
int 21h


code ends
end start
