Сортировка массива целых чисел по возрастанию - Assembler

Узнай цену своей работы

Формулировка задачи:

Отсортировать заданный массив целых чисел А(I) в порядке возрастания их значений. I=1,2,...,10. В ассемблере я полный 0, прошу помощи, хотя бы примерный код. Чтобы хоть с чего то начать...
model small ;модель памяти
.stack 100h ;сегмент стека
.data       ; сегмент данных
argument1 equ
len equ 10  ;количество элементов в mas
mas db 1,11,9,8,3,7,8,0,2,6
res db 10 dup(?)
.code        ;сегмент кода
Вот дальше темный лес...(

Решение задачи: «Сортировка массива целых чисел по возрастанию»

textual
Листинг программы
.model small
.386
 
.data
mas db 6,11,9,8,3,7,8,1,2,6
len equ $-mas
tmp db 0
 
.stack 100h
 
.code
start:
    mov ax,@data
    mov ds,ax
 
    mov cx,len
    dec cx
    big:
    push cx
    xor si,si
        cyc:
            mov al,mas[si]
            cmp al,mas[si+1]
            jbe m1
            mov bl,mas[si]
            mov tmp,bl
            mov bl,mas[si+1]
            mov mas[si],bl
            mov bl,tmp
            mov mas[si+1],bl
        
            m1:
            inc si
        loop cyc
 
    pop cx
    loop big
 
    mov ax,4c00h
    int 21h
end start

Объяснение кода листинга программы

  1. Объявление модели small.
  2. Указание, что будет использоваться архитектура 386.
  3. Объявление секции данных.
  4. Объявление переменной mas, которая является массивом целых чисел и содержит элементы 6, 11, 9, 8, 3, 7, 8, 1, 2, 6.
  5. Объявление переменной len, которая равна длине массива mas (количество элементов).
  6. Объявление переменной tmp, которая равна 0 и будет использоваться для временного хранения значений при сортировке.
  7. Объявление стека размером 100h.
  8. Объявление секции кода.
  9. Начало программы (метка start).
  10. Загрузка адреса данных в регистр ax.
  11. Перемещение значения регистра ax в регистр ds для установки базового адреса данных.
  12. Загрузка значения len (длины массива) в регистр cx.
  13. Уменьшение значения регистра cx на 1.
  14. Метка big для цикла сортировки.
  15. Сохранение значения регистра cx на стеке.
  16. Обнуление значения регистра si для использования во внутреннем цикле.
  17. Метка cyc для внутреннего цикла сортировки.
  18. Загрузка значения элемента массива mas[si] в регистр al.
  19. Сравнение значения регистра al с значением элемента массива mas[si+1].
  20. Если значение регистра al меньше или равно значению mas[si+1], переход к метке m1.
  21. Загрузка значения элемента массива mas[si] в регистр bl.
  22. Сохранение значения регистра bl в переменную tmp.
  23. Загрузка значения элемента массива mas[si+1] в регистр bl.
  24. Загрузка значения переменной tmp в регистр bl.
  25. Сохранение значения регистра bl в элемент массива mas[si].
  26. Сохранение значения переменной tmp в элемент массива mas[si+1].
  27. Метка m1 для продолжения выполнения внутреннего цикла.
  28. Увеличение значения регистра si на 1.
  29. Уменьшение значения регистра cx на 1.
  30. Повторение внутреннего цикла, пока значение регистра cx не станет равным 0.
  31. Извлечение сохраненного значения регистра cx со стека.
  32. Уменьшение значения регистра cx на 1.
  33. Повторение внешнего цикла, пока значение регистра cx не станет равным 0.
  34. Загрузка значения 4C00h (код завершения программы) в регистр ax.
  35. Вызов прерывания 21h для завершения программы.
  36. Конец программы (метка end start).

Оцени полезность:

12   голосов , оценка 3.75 из 5
Похожие ответы