Сортировка массива целых чисел по возрастанию - 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
Объяснение кода листинга программы
- Объявление модели small.
- Указание, что будет использоваться архитектура 386.
- Объявление секции данных.
- Объявление переменной mas, которая является массивом целых чисел и содержит элементы 6, 11, 9, 8, 3, 7, 8, 1, 2, 6.
- Объявление переменной len, которая равна длине массива mas (количество элементов).
- Объявление переменной tmp, которая равна 0 и будет использоваться для временного хранения значений при сортировке.
- Объявление стека размером 100h.
- Объявление секции кода.
- Начало программы (метка start).
- Загрузка адреса данных в регистр ax.
- Перемещение значения регистра ax в регистр ds для установки базового адреса данных.
- Загрузка значения len (длины массива) в регистр cx.
- Уменьшение значения регистра cx на 1.
- Метка big для цикла сортировки.
- Сохранение значения регистра cx на стеке.
- Обнуление значения регистра si для использования во внутреннем цикле.
- Метка cyc для внутреннего цикла сортировки.
- Загрузка значения элемента массива mas[si] в регистр al.
- Сравнение значения регистра al с значением элемента массива mas[si+1].
- Если значение регистра al меньше или равно значению mas[si+1], переход к метке m1.
- Загрузка значения элемента массива mas[si] в регистр bl.
- Сохранение значения регистра bl в переменную tmp.
- Загрузка значения элемента массива mas[si+1] в регистр bl.
- Загрузка значения переменной tmp в регистр bl.
- Сохранение значения регистра bl в элемент массива mas[si].
- Сохранение значения переменной tmp в элемент массива mas[si+1].
- Метка m1 для продолжения выполнения внутреннего цикла.
- Увеличение значения регистра si на 1.
- Уменьшение значения регистра cx на 1.
- Повторение внутреннего цикла, пока значение регистра cx не станет равным 0.
- Извлечение сохраненного значения регистра cx со стека.
- Уменьшение значения регистра cx на 1.
- Повторение внешнего цикла, пока значение регистра cx не станет равным 0.
- Загрузка значения 4C00h (код завершения программы) в регистр ax.
- Вызов прерывания 21h для завершения программы.
- Конец программы (метка end start).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д