assume cs:code,ds:data

data segment
arr dw 16h,4h,12h,5h
count equ 4
data ends


code segment
start:

mov ax,data
mov ds,ax

;for(i=1;i<n;i++)
; item = arr[i];
; j=i-1;
; while(j>=0 && arr[j]<item)
;   arr[j+1]=arr[j];
;   j--;
; arr[j+1]=item;


; arr = bp
; i=si , j=di
; item=ax
; n=cx


mov bp,offset arr
mov cx,count
add cx,cx

mov si,2
lbl1:
cmp si,cx
jz done
    mov ax,[si+bp]
    mov di,si
    sub di,2

    lbl2:
    cmp ax,[di+bp]
    jnb outofwhile
    cmp di,0
    jl outofwhile
         push [di+bp]
         add di,2
         pop [di+bp]
         sub di,2

     sub di,2
    jmp lbl2

   outofwhile:
   add di,2
   mov [di+bp],ax
   sub di,2
add si,2
jmp lbl1



done:
extrn showb:near
mov cx,count
mov bp,offset arr

lp1:
mov ax,[bp]
call showb
inc bp
inc bp
loop lp1


mov ax,4c00h
int 21h

code ends
end start

