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

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

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

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

Задача:

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

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

textual
Листинг программы
title prim0
 
DOD     Segment
nma     label       byte
max     db          13 ; 12 символов и возврат каретки
len     db          ?
buf     db          12 dup(' '), 0Dh, '$'
DOD     ends
 
STO     Segment      Stack
        DB           128 DUP(?)
STO     ends
 
CSC     Segment
PR      PROC         FAR
        ASSUME       DS:DOD,CS:CSC,SS:STO
        PUSH         DS
        SUB          AX,AX
        PUSH         AX
        MOV          AX,DOD
        mov          ds,ax
     
        ;Очистка экрана
        mov          ax,0600h
        mov          bh,07
        mov          cx,0000
        mov          dx,184fh
        int          10h
 
        ;Позиция курсора
        MOV AH,02     ; Курсор
        MOV BH,00     
        MOV DH,13     ;Строка
        MOV DL,37    ;Столбец
        INT 10H 
 
        ;Ввод текста
        mov          ah,0Ah
        lea          dx,nma
        int          21h
 
        mov          cx,6         ; 12 символов в строке - 6 пар
        lea          si,buf       ; Указывает на начало строки
        lea          di,buf+12    ; Указывает сразу за концом строки
m1:     dec          di
        mov          al,[si]      ; Взяли символ из левой части строки
        xchg         al,[di]      ; Поменяли символы
        mov          [si],al      ; Взяли символ из правой половины строки
        inc          si
        loop         m1
 
        ;Позиция курсора
        mov          ah,02
        mov          bh,00
        mov          dh,10 -1
        mov          dl,30 -1
        int          10h
       
        ;Вывод
        mov          ah,09h
        lea          dx,buf
        int          21h
        ret
pr      endp
 
csc     ends
 
        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