Отсортировать строку по возрастанию - Assembler

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

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

Помогите написать, в формате .com и отладить в debug'е (dosbox).
Ввести строку символьных данных, задавая буфер равный 25 байт. Вводить только английские символы. Отсортировать строку по возрастанию и выдать на экран в 4 строку

Решение задачи: «Отсортировать строку по возрастанию»

textual
Листинг программы
  1. ;fasm code...
  2. org 100h
  3. jmp start
  4.  
  5. start: push  0  25 250h
  6.        pop   di cx ax
  7.  
  8.        inc   ah
  9.        call  input
  10.        call  sortArray
  11.        jmp   print
  12.  
  13. input: int   21h
  14.        stosb
  15.        loop  input
  16.        ret
  17.  
  18. sortArray:
  19.        add   cx,25
  20.        mov   si,250h
  21.        xor   bx,bx
  22. @next: lodsb
  23.        cmp   al,byte[si]
  24.        jbe   @fuck
  25.        xchg  al,byte[si]
  26.        mov   byte[si-1],al
  27.        inc   bx
  28. @fuck: loop  @next
  29.        or    bx,bx
  30.        jnz   sortArray
  31.        mov   byte[si],'$'
  32.        ret
  33.  
  34. print: mov   ah,2
  35.        mov   dh,4
  36.        xor   dl,dl
  37.        int   10h
  38.        add   ah,7
  39.        mov   dx,250h
  40.        int   21h
  41.  
  42. exit:  xor   ax,ax
  43.        int   16h
  44.        int   20h

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

На языке Assembler была написана программа для сортировки массива строк. Вот список операций, которые можно выделить в этом коде:

  1. org 100h — начало работы, установка точки входа в программу.
  2. jmp start — переход к метке start.
  3. push 0 25 250h — сохранение регистров на стеке.
  4. pop di cx ax — восстановление значений регистров из стека.
  5. inc ah — увеличение значения регистра AH на единицу.
  6. call input — вызов функции ввода массива строк.
  7. call sortArray — вызов функции сортировки массива.
  8. jmp print — переход к метке print.
  9. input: int 21h — начало работы функции ввода массива строк.
  10. stosb — копирование строки из видеопамяти в буфер ввода.
  11. loop input — повторение ввода до тех пор, пока не будет введено достаточное количество символов.
  12. ret — выход из функции ввода массива строк.
  13. sortArray: — начало работы функции сортировки массива.
  14. add cx,25 — увеличение значения индекса массива на 25.
  15. mov si,250h — установка индекса начала массива.
  16. xor bx,bx — обнуление значения регистра BX.
  17. @next: lodsb — загрузка байта из массива в регистр AL.
  18. cmp al,byte[si] — сравнение текущего байта с байтом в массиве по индексу SI.
  19. jbe @fuck — если текущий байт не больше, чем байт в массиве по индексу SI, то переход к метке @fuck.
  20. xchg al,byte[si] — обмен значениями регистра AL и байта в массиве по индексу SI.
  21. mov byte[si-1],al — запись значения регистра AL в массив по индексу SI-1.
  22. inc bx — увеличение значения регистра BX на единицу.
  23. @fuck: loop @next — повторение цикла до тех пор, пока не будет выполнено условие выхода из цикла.
  24. or bx,bx — установление флага, указывающего на наличие или отсутствие элементов в массиве.
  25. jnz sortArray — если флаг равен нулю, то переход к метке sortArray.
  26. mov byte[si],'$' — замена последнего байта в массиве символом '$'.
  27. ret — выход из функции сортировки массива.
  28. print: mov ah,2 — начало работы функции вывода отсортированного массива на экран.
  29. mov dh,4 — установка значения регистра DH равным 4.
  30. xor dl,dl — обнуление значения регистра DL.
  31. int 10h — вывод строки на экран.
  32. add ah,7 — увеличение значения регистра AH на 7.
  33. mov dx,250h — установка значения регистра DX равным 250.
  34. int 21h — вывод символа на экран.
  35. exit: xor ax,ax — начало работы функции завершения работы программы.
  36. int 16h — закрытие стандартного вывода.
  37. int 20h — выход из программы.

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


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

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

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

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

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

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