Сортировка массива методом Шелла или Хоара - Assembler
Формулировка задачи:
Нужно написать програму которая будет сортировать массив из 16 елементов быстрой сортировкой(Шелла или Хоара),отсортированый массив записать у файл,найти в етом массиве и вывести наименьший парный елемент.
Решение задачи: «Сортировка массива методом Шелла или Хоара»
textual
Листинг программы
- org 100h
- jmp start
- array db 'Codding Hanter Web Programmer','$'
- len = ($ - array)-1 ;
- fName db 'data.txt',0 ; имя файла
- start: ;
- mov ah,9 ; покажем массив на экране
- mov dx,array ;
- int 21h ;
- mov ah,3Ch ; создать файл!
- mov dx,fName ;
- mov cx,20h ;
- int 21h ;
- xchg ax,bx ;
- mov ah,40h ; запись в файл!
- mov cx,len ;
- mov dx,array ;
- int 21h ;
- mov ah,3Eh ; закрыть файл!
- int 21h ;
- ;-----------------------------------------------------------------------
- mov cx,len ; сортировка массива -------------------//
- dec cx ;
- mov si,array ;
- mov di,si ;
- sort: push cx di si ;
- xor bx,bx ; флаг перестановок
- fuck: lodsw ;
- cmp ah,al ;
- jae @@1 ;
- inc bx ;
- xchg ah,al ;
- @@1: stosw ;
- dec si ;
- dec di ;
- loop fuck ;
- pop si di cx ;
- or bx,bx ; перестановки были?
- jnz sort ;
- ;-----------------------------------------------------------------------
- mov al,10 ; выводим отсортированный массив на экран
- int 29h ;
- mov ah,9 ;
- mov dx,array ;
- int 21h ;
- exit:
- xor ax,ax ;
- int 16h ;
- int 20h ;
Объяснение кода листинга программы
- Организация кода:
- Код написан на ассемблере.
- Используется диапазон адресов от 100h до 109h для переменных и массива.
- Функции обработки файлов (открытие, запись, закрытие) обернуты в функции 21h, 3Ch, 40h, 3Eh соответственно.
- Код начинается с метки
start
. - Код завершается с помощью команды перехода на метку
exit
. - В коде присутствуют комментарии, которые описывают назначение некоторых команд.
- Использование переменных:
- Переменная
len
используется для хранения длины массива. - Переменная
fName
используется для хранения имени файла. - Переменные
array
,si
,di
,bx
используются для хранения значений массива и флагов.
- Переменная
- Сортировка массива методом Шелла (Хоара):
- Код для сортировки массива начинается с метки
sort
. - Используется цикл
loop
, который выполняется до тех пор, пока не будет выполнено условие завершения цикла. - Внутри цикла выполняется алгоритм сортировки Шелла (Хоара), который сравнивает пары соседних элементов массива и меняет их местами при необходимости.
- Для обмена значениями используется команда
xchg
. - После выполнения цикла выполняется команда
pop
, чтобы восстановить значения переменныхsi
,di
иcx
. - Затем проверяется флаг
bx
, который указывает, были ли выполнены перестановки в процессе сортировки. - Если перестановки были, то цикл повторяется.
- Если перестановок не было, то код продолжает выполнение.
- Код для сортировки массива начинается с метки
- Вывод отсортированного массива на экран:
- Код для вывода отсортированного массива на экран начинается с метки
exit
. - Используется команда
int 29h
, чтобы вывести отсортированный массив на экран. - Затем выполняется команда
int 21h
, чтобы отобразить символ перевода строки. - Код завершается командой
int 16h
, чтобы завершить работу программы.
- Код для вывода отсортированного массива на экран начинается с метки
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д