Сортировка и вывод строки - Assembler

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

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

Здравствуйте уважаемые пользователи CyberForum.ru Возникла небольшая проблема, не как не могу решить задачу для Assebler masm. Помогите пожалуйста... Желательно с кратким объяснением, что бы понять..

Задача:

Ввести строку символьных данных, задавая буфер равный 12 байт. Переставить символы в строке следующим образом: первый символ на место последнего, второй символ на место предпоследнего, предпоследний на место второго, а последний на место первого. Выдать полученную строку символов в 10 строку экрана, начиная с 30 позиции.

Решение задачи: «Сортировка и вывод строки»

textual
Листинг программы
  1. title prim0
  2.  
  3. DOD     Segment
  4. nma     label       byte
  5. max     db          13 ; 12 символов и возврат каретки
  6. len     db          ?
  7. buf     db          12 dup(' '), 0Dh, '$'
  8. DOD     ends
  9.  
  10. STO     Segment      Stack
  11.         DB           128 DUP(?)
  12. STO     ends
  13.  
  14. CSC     Segment
  15. PR      PROC         FAR
  16.         ASSUME       DS:DOD,CS:CSC,SS:STO
  17.         PUSH         DS
  18.         SUB          AX,AX
  19.         PUSH         AX
  20.         MOV          AX,DOD
  21.         mov          ds,ax
  22.      
  23.         ;Очистка экрана
  24.         mov          ax,0600h
  25.         mov          bh,07
  26.         mov          cx,0000
  27.         mov          dx,184fh
  28.         int          10h
  29.  
  30.         ;Позиция курсора
  31.         MOV AH,02     ; Курсор
  32.         MOV BH,00    
  33.         MOV DH,13     ;Строка
  34.         MOV DL,37    ;Столбец
  35.         INT 10H
  36.  
  37.         ;Ввод текста
  38.         mov          ah,0Ah
  39.         lea          dx,nma
  40.         int          21h
  41.  
  42.         mov          cx,6         ; 12 символов в строке - 6 пар
  43.         lea          si,buf       ; Указывает на начало строки
  44.         lea          di,buf+12    ; Указывает сразу за концом строки
  45. m1:     dec          di
  46.         mov          al,[si]      ; Взяли символ из левой части строки
  47.         xchg         al,[di]      ; Поменяли символы
  48.         mov          [si],al      ; Взяли символ из правой половины строки
  49.         inc          si
  50.         loop         m1
  51.  
  52.         ;Позиция курсора
  53.         mov          ah,02
  54.         mov          bh,00
  55.         mov          dh,10 -1
  56.         mov          dl,30 -1
  57.         int          10h
  58.        
  59.         ;Вывод
  60.         mov          ah,09h
  61.         lea          dx,buf
  62.         int          21h
  63.         ret
  64. pr      endp
  65.  
  66. csc     ends
  67.  
  68.         end pr

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

Код на языке Assembler содержит следующие элементы:

  1. Описание сегментов:
    • DOD: сегмент данных, используется для хранения строк и других данных
    • STO: сегмент стека, используется для временного хранения значений
    • CSC: сегмент кода, содержит процедуры и основные команды
  2. Процедура PR:
    • В первой части процедуры происходит очистка экрана и установка позиции курсора
    • Затем выполняется ввод текста с помощью функции BIOS
    • Далее следует сортировка строки с использованием алгоритма пузырька
    • В конце процедуры выполняется вывод отсортированной строки
  3. Названия и значения переменных:
    • nma: метка, указывает на начало строки, которую необходимо отсортировать
    • max: переменная, содержит максимальное количество символов в строке (13)
    • len: переменная, содержит фактическое количество символов в строке
    • buf: буфер, используется для временного хранения строки и её сортировки
  4. Команды:
    • PUSH: сохраняет значение регистра на вершине стека
    • SUB: выполняет вычитание двух регистров
    • MOV: перемещает значение из одного регистра в другой
    • ASSUME: задает сегменты, используемые в процедуре
    • POS: устанавливает позицию курсора на экране
    • INPUT: выполняет ввод символов с клавиатуры
    • XCHG: меняет значения двух регистров
    • LOOP: выполняет повторяющийся блок команд
    • RET: возвращает управление в вызывающую процедуру
    • ENDP: заканчивает описание процедуры
    • END: заканчивает код программы

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


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

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

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

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

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

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