SAVEREG macro push ax push bx push cx push dx push si push di endm RESAVEREG macro pop di pop si pop dx pop cx pop bx pop ax endm ;************************ data segment arr dw 10,9,8,7,6,5,4,3,2,1 n dw 18 m dw 10 data ends ;************************ code segment ;------------------------ main proc far assume cs:code, ds:data start: push ds sub ax, ax push ax mov ax, data mov ds, ax ;------------ ;sort ;------------ ;si,di index ;ax temp mov si, 0 mov di, 0 loop1: cmp si, n jge OUTER1 ;init loop2 mov ax, si add ax, 2 mov di, ax loop2: cmp di, n jg OUTER2 mov ax, arr[si] cmp ax, arr[di] jle DO_NOTHING xchg ax, arr[di] mov arr[si], ax DO_NOTHING: add di, 2 jmp loop2 OUTER2: add si, 2 jmp loop1 OUTER1: mov cx, m mov di, 0 PRINT_LOOP: mov ax, arr[di] mov dx, 0 call print_dec add di, 2 loop PRINT_LOOP ;read key from the keyboard mov ah, 0 int 16h ret ;--------------------- ;get_oct function ;must pass ax, dx print_dec proc near SAVEREG mov cx, 0 mov bx, 10 GET_NUM_LOOP: div bx push dx mov dx, 0 inc cx cmp ax, 0 jne GET_NUM_LOOP PRINT: pop dx add dx, 30h mov ah, 02h int 21h loop PRINT ;enter and change line mov dl, 0dh mov ah, 02h int 21h mov dl, 0ah mov ah, 02h int 21h RESAVEREG ret print_dec endp main endp ;------------------------ code ends ;************************ end start