Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 35
На сайте нет зарегистрированных пользователей

Пользователей: 13,361
новичок: uehuat
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование процесса поступления заявок в систему, состоящую из трёх Э...
База данных студентов на Turbo Pascal (Списки) + Пояснительная записка
Моделирование автомойки на GPSS + Отчет + Блок схемы

Лексикографическая сортировка
data segment
cnt db 0 ;количество слов
tmplen1 db 0 ;длина слова 1
tmplen2 db 0 ;длина слова 2
cmp_str1 db 255 dup(?) ;строка для сравнения 1
cmp_str2 db 255 dup(?) ;строка для сравнения 2
str_arr db 1000 dup(?) ;наш массив слов
indx_arr db 1000 dup(?) ;массив смещений слов и их длин
mlen db 064h ;максимальная длинна слова
alen db ? ;фактическая длина
strng db 255 dup(?)
ln db 13,10,'$'
flag db 0 ;флаг неравенства двух слов
tmp dw ? ;временная переменная для мусора
end_of_indx_arr dw ? ;смещение конца массива indx_arr
data ends
code segment
assume cs:code,ds:data
;---------процедура сравнения двух слов--------
compare proc far
CLD ;сравнение слева на право
xor cx,cx
mov cl,tmplen1 ;если длина слова 1
cmp cl,tmplen2 ;больше длины слова 2
ja CmpLbl1
CmpLbl2:lea di,cmp_str1
lea si,cmp_str2
repe cmpsb ;сравниваем cmp_str1 и cmp_str2
jae ext_cmp ;если длины равны и вторая больше первой то флаг не изменяется
mov flag,1 ;иначе меняем флаг
ext_cmp:ret
CmpLbl1:mov cl,tmplen2 ;то в cx заносится меньшая
jmp CmpLbl2
compare endp
;-------процедура чтения слов в массив-----------
read proc far
lea bx,indx_arr
strt:mov ah,0Ah
lea dx,mlen
int 21h ;считываем слово
mov ah,09h
lea dx,ln
int 21h ;символы начала строки и смещения влево
mov cl,alen
jcxz ext ;пустая строка?если да,то идем на ext
lea si,strng ;в si адрес смещения введенного слова
inc di
mov byte ptr [bx],cl ;в indx_arr помещаем длину слова
mov word ptr [bx+1],di ;туда же адрес смещения на само слово
add bx,3 ;переходим в indx_arr на три байта вперед
rep movsb ;копируем введенную строку из string в массив str_arr
mov byte ptr[di],'$' ;для дальнейшего вывода через 09h заполняем следующий за каждым словом байт '$'
add cnt,1 ;увеличиваем счетчик слов
jmp strt ;читаем новое слово
ext:
xor di,di
mov end_of_indx_arr ,bx ;запоминаем смещение последнего элемента в indx_arr
sub end_of_indx_arr,3
ret
read endp
;-----------процедура сортировки массива-------------------
sort proc far
xor cx,cx
lea di,cmp_str1
mov si,[bx+1] ;в si смещение на строку 1.
mov word ptr ax,[bx+1] ;в ах смещение строки 1
mov byte ptr cl,[bx] ;в cl длина строки 1
mov tmplen1,cl ;в темп длина строки 1
rep movsb ;копируем слово из массива в cmp_str1
add bl,3 ;переходим на следующее слово
lea di,cmp_str2;
mov si,[bx+1] ;в si смещение на строку 2.
push ax ;сохраняем смещение строки 1
mov ax,word ptr [bx+1] ;записываем в ax смещение строки 2
mov tmp,ax ;записываем в tmp смещение строки 2
pop ax ;возвращаем смещение строки 1
mov byte ptr cl,[bx] ;в cl длина второй строки
mov tmplen2,cl ;в tmplen2 длина второй строки
rep movsb ;копируем следующее слово из массива в cmp_str2
call compare ;процедура сравнения
cmp flag,1 ;флаг неравенства
je SrtLbl1 ;если 1 то меняем смещения местами
ext_srt: ;выход
mov flag,0 ;обнуляем флаг до следующего сравнения
ret
SrtLbl1:
push ax ;сохраняем смещение строки 1
xor ax,ax
mov al,tmplen1 ;в al длина строки 1
mov [bx],al ;во второе слово длина строки 1
pop ax ;возвращаем смещение строки 1
mov word ptr [bx+1],ax ;заносим смещение строки 1 за место смещения строки 2
sub bx,3 ;сдвигаем bx на три байта обратно к адресу первой строки
xor ax,ax
mov al,tmplen2 ;в al длина второй строки
mov [bx],al ;записывается длина второй строки в длину первой
mov ax,tmp ;в ax смещение второй строки
mov word ptr [bx+1],ax ;заносим смещение строки 2 на место строки 1
add bx,3 ;возвращаем смещение массива indx_arr обратно
jmp ext_srt
sort endp
;-----------main-------------------
main:mov ax,data
mov ds,ax
mov es,ax
xor bx,bx
lea di,str_arr ;в di смещение массива слов
call read ;чтение слов в массив
mov cl,cnt ;в cl кол-во слов в массиве
cycle2:
push cx
lea bx,indx_arr ;в bx смещение на массив смещений слов и длин
mov cx,end_of_indx_arr ;в cx адрес последнего эл-та indx_arr
cycle1:cmp cx,bx ;если смещение текущего эл-та indx_arr=последнему в indx_arr
je Main_loop_lbl ;то начинаем цикл заново с первого эл-та
push cx ;если не равно
call sort ;то вызываем сортировку
pop cx
jmp cycle1
Main_loop_lbl:
pop cx
loop cycle2 ;пвторяем вызов сортировки n*(n-1) раз, где n-кол-во эл-тов
main_ext:
xor ax,ax
xor cx,cx
mov cl,cnt
lea bx,indx_arr
;-------вывод на экран------------------
cycle3:
mov ah,09h
push cx
mov word ptr dx,[bx+1]
int 21h ;вывод слова
mov ah,09h
lea dx,ln ;вывод 0Dh,0Ah
int 21h
add bx,3 ;переход на следующее слово
pop cx
loop cycle3 ;до тех пор пока слова не кончатся(cx=0)
mov ax,4c00h
int 21h
code ends
end main
Опубликовал Kest December 03 2009 20:50:44 · 0 Комментариев · 9886 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
TelBook
DFileDeleter
Графика в проекта...
AVIwriter
Пример OpenGL гра...
Шаблон для новост...
Архив значков
Dealer
Пятнашки и крести...
CoolHints2k
Print Grid
Создание отчетов ...
AlignEdit
Flash MP3 Player ...
Переработанный пл...
Запрет гостям ск...
Карта сайта
Калькулятор [Исхо...
SearchAndReplace
Шифрование по алг...

Топ загрузок
Приложение Клие... 100772
Delphi 7 Enterp... 97809
Converter AMR<-... 20261
GPSS World Stud... 17014
Borland C++Buil... 14189
Borland Delphi ... 10267
Turbo Pascal fo... 7372
Калькулятор [Ис... 5972
Visual Studio 2... 5206
Microsoft SQL S... 3661
Случайные статьи
В факс-машинах
Почему уходит так ...
Фильтрация и сорти...
Добро пожаловать в...
Где происходит кон...
Блоки работы с при...
Поиск строки в файле
11.6. Дополнительн...
Метрики
Блокирование всплы...
База данных на пас...
Бесплатный «межгород»
Стандарт Dect
Игра в планирование
OpenGL. Пример рис...
Результаты работы...
Решения к главе 9
Профили плотности ...
Инкремент и декремент
Регистрация доменн...
База данных на пас...
Принтеры и факсы
Помещение формы в ...
Восходящий граммат...
Вычислительная мат...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?