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

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

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

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

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

textual
Листинг программы
  1. .model small
  2. .386
  3.  
  4. .data
  5. mas db 6,11,9,8,3,7,8,1,2,6
  6. len equ $-mas
  7. tmp db 0
  8.  
  9. .stack 100h
  10.  
  11. .code
  12. start:
  13.     mov ax,@data
  14.     mov ds,ax
  15.  
  16.     mov cx,len
  17.     dec cx
  18.     big:
  19.     push cx
  20.     xor si,si
  21.         cyc:
  22.             mov al,mas[si]
  23.             cmp al,mas[si+1]
  24.             jbe m1
  25.             mov bl,mas[si]
  26.             mov tmp,bl
  27.             mov bl,mas[si+1]
  28.             mov mas[si],bl
  29.             mov bl,tmp
  30.             mov mas[si+1],bl
  31.        
  32.             m1:
  33.             inc si
  34.         loop cyc
  35.  
  36.     pop cx
  37.     loop big
  38.  
  39.     mov ax,4c00h
  40.     int 21h
  41. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы