Отсортировать введенную строку из чисел в порядке возрастания. Не до конца понимаю работу приведенной программы - Assembler/TASM
Формулировка задачи:
.model small .stack 100h .data MaxLen db 254 ; Буфер строки формата функции 0ah int 21h Len db ? String db 254 dup(?) NL db 13,10,'$' ; Перевд строки .code ; Процедура сортировки ; SI = указатель на начало стоки, терминированной 0dh sort proc cld ; Направление сканирования - вперёд mov di,si ; Сортировка выбором - заполнение с начала m1:cmp byte ptr[di],0dh ; Внешний цикл, проверка окончания строки je FinSort mov ah,[di] ; Инициализация минимума mov dx,di ; и его индекса mov si,di ; Инициализаци внутреннего цикла inc si m2:cmp byte ptr[si],0dh ; Поиск минимального из неотсортированных элементов je Next ; Дошли до конца строки - прекратить поиск lodsb ; Загрузка очередного символа cmp al,ah ; Сравнение с минимумом jnb m2 ; Меньше - обновить минимум и его индекс mov ah,al mov dx,si dec dx jmp m2 Next: ; Обмен ведущего и минимального элемента mov al,[di] xchg al,ah stosb ; Запись отсортированного (минимального) элемента mov si,dx ; Запись ведущего элемента на место минимума mov [si],ah jmp m1 ; Искать следующий минимум из оставшихся FinSort:ret endp ; Основная программа start: mov ax,@data mov ds,ax mov es,ax mov ah,0ah ; Ввод строки lea dx,MaxLen int 21h lea dx,NL ; Переход на новую строку mov ah,9 int 21h lea si,String ; Сортировка call sort xor bh,bh ; Замена терминатора с 0dh на $ mov bl,Len lea si,String mov byte ptr[bx+si+1],'$' mov ah,9 ; Вывод результата lea dx,String int 21h xor ah,ah ; Ожидание нажатия клавиши int 16h mov ax, 4c00h ; Завершение программы int 21h end start
Решение задачи: «Отсортировать введенную строку из чисел в порядке возрастания. Не до конца понимаю работу приведенной программы»
textual
Листинг программы
mov ah,0ah ; Ввод строки lea dx,MaxLen ;в dx адрес начала буфера ввода int 21h
Объяснение кода листинга программы
- Переменная
ah
используется как метчик для сегмента данных, аdx
- как базовый регистр для работы с памятью. MaxLen
- это переменная, которая содержит максимальное количество символов, которые могут быть введены пользователем.- Функция
int 21h
используется для ввода строки. Она ожидает, пока пользователь не введет всю строку, и затем возвращает количество символов, которые были введены. Это значение затем используется для определения размера буфера ввода. - После ввода строки, она сохраняется в буфере ввода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д