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