Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 13
На сайте нет зарегистрированных пользователей

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

База данных студентов на Delphi + Microsoft SQL Server
Моделирование работы перекрёстка по регулированию движения на GPSS + Поя...
Информационная система - продуктовый магазин на Turbo Pascal (База данны...

Лексикографическая сортировка
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 Комментариев · 10576 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
PHP5. Профессиона...
DateEdit
PDJXPPack
Delphix Sample [И...
Win-Prolog 3.618
Реализация ЭЦП по...
DelphiXIsoDemo1
WAP версия сайта
C++ Builder 6 СПР...
Delphi 2005 для .NET
LaserTank [Исходн...
Удаление своего EXE
Библия хакера 2. ...
Самоучитель C++
Самоучитель PHP 4
ИНТЕРНЕТ ПРОГРАММ...
Delphi 6/7 базы д...
Работа с базами д...
Применение фильтр...
OnlineIP

Топ загрузок
Приложение Клие... 100793
Delphi 7 Enterp... 98030
Converter AMR<-... 20298
GPSS World Stud... 17060
Borland C++Buil... 14244
Borland Delphi ... 10376
Turbo Pascal fo... 7392
Калькулятор [Ис... 6082
Visual Studio 2... 5232
Microsoft SQL S... 3674
Случайные статьи
Снова об интерфейс...
Глава 2. Эпизод из...
10. Эдисон наполни...
Область Selection
Моделирование элек...
Основные принципы ...
Контроль доступа
Объемные диаграммы
О вреде и пользе м...
Label already defined
Информация о дизай...
Представления дере...
Подпрограмма Input...
Игра "Суммируйте д...
Старт и завершение...
Статические элемен...
Управление связанн...
Как полнить игрово...
Ставки онлайн в БК...
Применение техноло...
Wizard) 317RPC (Re...
Машинное представл...
Поиск файлов на De...
Invalid symbol ref...
Программирвоание: ...
Статистика



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


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