Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.190.156.80] |
|
Сообщ.
#1
,
|
|
|
.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)? |