Сортировка массива

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
bazay
Сообщения: 1
Зарегистрирован: 14 дек 2010, 20:06

Помогите пожалуйста. Мне нужно отсортировать массив по возрастанию. У меня есть исходник, но мне нужно чтобы массив вводился с клавиатуры.

______________--________________________________



<1> ;prg_12_5.asm
<2> MASM
<3> MODEL small
<4> STACK 256
<5> .data
<6> mes1 db 0ah,0dh,'Исходный массив — $',0ah,0dh
<7> ;некоторые сообщения
<8> mes2 db 0ah,0dh,'Отсортированный массив — $'
,0ah,0dh
<9> n equ 9 ;количество элементов в массиве,
;считая с 0
<10> mas dw 2,7,4,0,1,9,3,6,5,8 ;исходный массив
<11> tmp dw 0 ;переменные для работы с массивом
<12> i dw 0
<13> j dw 0
<14> .code
<15> main:
<16> mov ax,@data
<17> mov ds,ax
<18> xor ax,ax
<19> ;вывод на экран исходного массива
<20> mov ah,09h
<21> lea dx,mes1
<22> int 21h ;вывод сообщения mes1
<23> mov cx,10
<24> mov si,0
<25> show_primary:;вывод значения элементов
<26> ;исходного массива на экран
<27> mov dx,mas[si]
<28> add dl,30h
<29> mov ah,02h
<30> int 21h
<31> add si,2
<32> loop show_primary
<33>
<34> ;строки 40-85 программы эквивалентны следующему
;коду на языке С:
<35> ;for (i=0;i<9;i++)
<36> ; for (j=9;j>i;j--)
<37> ; if (mas>mas[j])
<38> ; {tmp=mas;
<39> ; mas=mas[j];
<40> ; mas[j]=tmp;}
<41> mov i,0 ;инициализация i
<42> ;внутренний цикл по j
<43> internal:
<44> mov j,9 ;инициализация j
<45> jmp cycl_j ;переход на тело цикла
<46> exchange:
<47> mov bx,i ;bx=i
<48> shl bx,1
<49> mov ax,mas[bx] ;ax=mas
<50> mov bx,j ;bx=j
<51> shl bx,1
<52> cmp ax,mas[bx] ;mas ? mas[j] — сравнение
<53> jle lesser ;если mas меньше,
;то обмен не нужен и переход на продвижение
;далее по массиву
<54> ;иначе tmp=mas, mas=mas[j], mas[j]=tmp:
<55> ;tmp=mas
<56> mov bx,i ;bx=i
<57> shl bx,1 ;умножаем на 2, так как
;элементы — слова
<58> mov tmp,ax ;tmp=mas
<59>
<60> ;mas[i]=mas[j]
<61> mov bx,j ;bx=j
<62> shl bx,1 ;умножаем на 2, так
;как элементы — слова
<63> mov ax,mas[bx] ;ax=mas[j]
<64> mov bx,i ;bx=i
<65> shl bx,1 ;умножаем на 2, так как как
;элементы — слова
<66> mov mas[bx],ax ;mas[i]=mas[j]
<67>
<68> ;mas[j]=tmp
<69> mov bx,j ;bx=j
<70> shl bx,1 ;умножаем на 2, так как
;элементы — слова
<71> mov ax,tmp ;ax=tmp
<72> mov mas[bx],ax ;mas[j]=tmp
<73> lesser: ;продвижение далее по
;массиву во внутреннем цикле
<74> dec j ;j--
<75>;тело цикла по j
<76> cycl_j:
<77> mov ax,j ;ax=j
<78> cmp ax,i ;сравнить j ? i
<79> jg exchange ;если j>i, то переход на обмен
<80> ;иначе на внешний цикл по i
<81> inc i ;i++
<82> cmp i,n ;сравнить i ? n — прошли до
;конца массива
<83> jl internal ;если i
<85> ;вывод отсортированного массива
<86> mov ah,09h
<87> lea dx,mes2
<88> int 21h
<89> prepare:
<90> mov cx,10
<91> mov si,0
<92> show: ;вывод значения элемента на экран
<93> mov dx,mas[si]
<94> add dl,30h
<95> mov ah,02h
<96> int 21h
<97> add si,2
<98> loop show
<99> exit:
<100> mov ax,4c00h ;стандартный выход
<101> int 21h
<102> end main ;конец программы
Ответить