Сортировка массива целых чисел по возрастанию - 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).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д