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