Отсортировать введенную строку из чисел в порядке возрастания. Не до конца понимаю работу приведенной программы - 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
После строк lea si,String / call sort происходит сортировка введенной строки. Но в String ведь на момент lea si,String лишь 254 знака ?. А сортировка происходит с введенной строкой mov ah,0ah / lea dx,MaxLen / int 21h и теперь эта введенная строка в MaxLen. Как эта строка попадает в сортировку(sort)?

Решение задачи: «Отсортировать введенную строку из чисел в порядке возрастания. Не до конца понимаю работу приведенной программы»

textual
Листинг программы
mov ah,0ah      ; Ввод строки
lea dx,MaxLen ;в dx адрес начала буфера ввода
int 21h

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

  1. Переменная ah используется как метчик для сегмента данных, а dx - как базовый регистр для работы с памятью.
  2. MaxLen - это переменная, которая содержит максимальное количество символов, которые могут быть введены пользователем.
  3. Функция int 21h используется для ввода строки. Она ожидает, пока пользователь не введет всю строку, и затем возвращает количество символов, которые были введены. Это значение затем используется для определения размера буфера ввода.
  4. После ввода строки, она сохраняется в буфере ввода.

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


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

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

6   голосов , оценка 4.167 из 5
Похожие ответы