Сортировка массива методом Шелла или Хоара - Assembler

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

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

Нужно написать програму которая будет сортировать массив из 16 елементов быстрой сортировкой(Шелла или Хоара),отсортированый массив записать у файл,найти в етом массиве и вывести наименьший парный елемент.

Решение задачи: «Сортировка массива методом Шелла или Хоара»

textual
Листинг программы
  1. org 100h
  2. jmp start
  3.  
  4. array   db  'Codding Hanter Web Programmer','$'
  5. len     =   ($ - array)-1     ;
  6. fName   db  'data.txt',0      ; имя файла
  7.  
  8. start:                        ;
  9.        mov   ah,9             ; покажем массив на экране
  10.        mov   dx,array         ;
  11.        int   21h              ;
  12.  
  13.        mov   ah,3Ch           ; создать файл!
  14.        mov   dx,fName         ;
  15.        mov   cx,20h           ;
  16.        int   21h              ;
  17.        xchg  ax,bx            ;
  18.        mov   ah,40h           ; запись в файл!
  19.        mov   cx,len           ;
  20.        mov   dx,array         ;
  21.        int   21h              ;
  22.        mov   ah,3Eh           ; закрыть файл!
  23.        int   21h              ;
  24. ;-----------------------------------------------------------------------
  25.        mov   cx,len           ; сортировка массива -------------------//
  26.        dec   cx               ;
  27.        mov   si,array         ;
  28.        mov   di,si            ;
  29. sort:  push  cx di si         ;
  30.        xor   bx,bx            ; флаг перестановок
  31. fuck:  lodsw                  ;
  32.        cmp   ah,al            ;
  33.        jae   @@1              ;
  34.        inc   bx               ;
  35.        xchg  ah,al            ;
  36. @@1:   stosw                  ;
  37.        dec   si               ;
  38.        dec   di               ;
  39.        loop  fuck             ;
  40.        pop   si di cx         ;
  41.        or    bx,bx            ; перестановки были?
  42.        jnz   sort             ;
  43. ;-----------------------------------------------------------------------
  44.        mov   al,10            ; выводим отсортированный массив на экран
  45.        int   29h              ;
  46.        mov   ah,9             ;
  47.        mov   dx,array         ;
  48.        int   21h              ;
  49.  
  50. exit:
  51.        xor   ax,ax            ;
  52.        int   16h              ;
  53.        int   20h              ;

Объяснение кода листинга программы

  1. Организация кода:
    • Код написан на ассемблере.
    • Используется диапазон адресов от 100h до 109h для переменных и массива.
    • Функции обработки файлов (открытие, запись, закрытие) обернуты в функции 21h, 3Ch, 40h, 3Eh соответственно.
    • Код начинается с метки start.
    • Код завершается с помощью команды перехода на метку exit.
    • В коде присутствуют комментарии, которые описывают назначение некоторых команд.
  2. Использование переменных:
    • Переменная len используется для хранения длины массива.
    • Переменная fName используется для хранения имени файла.
    • Переменные array, si, di, bx используются для хранения значений массива и флагов.
  3. Сортировка массива методом Шелла (Хоара):
    • Код для сортировки массива начинается с метки sort.
    • Используется цикл loop, который выполняется до тех пор, пока не будет выполнено условие завершения цикла.
    • Внутри цикла выполняется алгоритм сортировки Шелла (Хоара), который сравнивает пары соседних элементов массива и меняет их местами при необходимости.
    • Для обмена значениями используется команда xchg.
    • После выполнения цикла выполняется команда pop, чтобы восстановить значения переменных si, di и cx.
    • Затем проверяется флаг bx, который указывает, были ли выполнены перестановки в процессе сортировки.
    • Если перестановки были, то цикл повторяется.
    • Если перестановок не было, то код продолжает выполнение.
  4. Вывод отсортированного массива на экран:
    • Код для вывода отсортированного массива на экран начинается с метки exit.
    • Используется команда int 29h, чтобы вывести отсортированный массив на экран.
    • Затем выполняется команда int 21h, чтобы отобразить символ перевода строки.
    • Код завершается командой int 16h, чтобы завершить работу программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5

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

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

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