Сортировка и вывод строки - 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: заканчивает код программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д