1 dseg segment
2 source_data dw ?,-1,3,6,1,5
3 count equ $-source_data
4 dseg ends
5 cseg segment
6 assume cs:cseg , ds:dseg
7 start:
8 mov ax , dseg
9 mov ds , ax
10
11 mov bx , count ;外循环指针
12 sub bx ,2
13
14 next_loop:
15 mov ax , [bx]
16 mov di , bx ;mark
17 mov si , bx ;内循环指针
18 sub si , 2
19 jz next_label
20 find_next:
21 mov dx , [si]
22 cmp dx , ax
23 jge next
24 mov ax , [si]
25 mov di , si
26 next: sub si , 2
27 jnz find_next
28 cmp di , bx
29 je next_label
30 mov ax , [bx]
31 mov dx , [di]
32 xchg ax , dx
33 mov [bx] , ax
34 mov [di] , dx
35 next_label:
36 sub bx , 2
37 jnz next_loop
38
39 mov ax , 4c00h
40 int 21h
41
42 cseg ends
43 end start