Радио-86РК/Радио 03-91/Сортировка/Таблица 3
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Автор: M. ОВЕЧКИН |
Таблица 3 ;СОРТИРОВКА СПИСКА НА РУССКОМ ЯЗЫКЕ ; (ДОПУСТИМЫ ЦИФРОВЫЕ ДАННЫЕ). ;ПРЕДПОЛАГАЕТСЯ,ЧТО СЧЕТЧИК PSR ;ХРАНИТ ЧИСЛО СИМВОЛОВ СТРОКИ; ;СТРОКИ РАСШИРЕНЫ; ;В BUF3 НАХОДИТСЯ АДРЕС КОНЦА СПИСКА. ;СРАВНЕНИЕ ИДЕТ ОТ НАЧАЛА СТРОКИ. JMP NEWO ; ПЕРЕЙТИ К СОРТИРОВКЕ WYH: POP D ; LDA FL ; БЫЛ ЛИ ОБМЕН? ORA А ; JZ 0F86CH ; XRA А ; БЫЛ,СБРОСИТЬ ПРИЗНАК STA FL ; ОБМЕНА. ;ОЧЕРЕДНОЙ ПРОСМОТР СПИСКА NEWO: LHLD BUF ; ЗАПОМНИТЬ ИСХОДНЫЙ SHLD BUF1 ; АДРЕС ТЕКСТОВОГО БУФЕРА. ; ПРОСМОТР СТРОК NEW1: LHLD BUF1 ; ВСТАТЬ НА НАЧАЛО XCHG ; ТЕКУЩЕЙ СТРОКИ. LHLD BUF1 ; ВЫЧИСЛИТЬ АДРЕС LDA PSR ; НАЧАЛА INR А ; СЛЕДУЮЩЕЙ CALL SUM ; СТРОКИ. SHLD BUF2 ; СОХРАНИТЬ. PUSH D ; ПРОВЕРИТЬ ВЫХОД CALL STR2 ; ЗА ПРЕДЕЛЫ СПИСКА JNC WYH ; ЕСЛИ KOHEЦ,TO ПРОВЕРИТЬ POP D ; НАЛИЧИЕ ОБМЕНА. R0: LDAX D ; СИМВОЛ ТЕКУЩЕЙ СТРОКИ- СРI 60Н ; БУКВА РУССКОГО АЛФАВИТА? JC N1 ; ЕСЛИ "ДА",ТО R1: MOV А,М ; СИМВОЛ СЛЕДУЮЩЕЙ СРI 60Н ; СТРОКИ- БУКВА РУССКОГО JC N1 ; АЛФАВИТА? R2: PUSH D ; ДА,ПЕРЕКОДИРОВАТЬ PUSH Н ; СИМВОЛЫ LDAX D ; ДЛЯ CALL PER ; СОРТИРОВКИ XCHG ; POP Н ; PUSH Н ; MOV А,М ; CALL PER ; LDAX D ; НОВЫЙ КОД СИМВОЛА SUB М ; ТЕКУЩЕЙ СТРОКИ POP Н ; МЕНЬШЕ НОВОГО POP D ; КОДА СИМВОЛА JMP N2 ; ПОСЛЕДУЮЩЕЙ? N1: LDAX D ; SUB М ; РАВЕН,ВЗЯТЬ СЛЕДУЮЩИЕ M2: JZ PUZZ ; позиции СТРОК. JM CORR ; МЕНЬШЕ :ОБМЕН НЕ НУЖЕН, ;ОБМЕН ПО РЕЗУЛЬТАТУ СРАВНЕНИЯ ПЕРВЫХ ПОЗИЦИЙ PUZ1: MVI А,0FFН ;ИНАЧЕ УСТАНОВИТЬ ПРИЗНАК STA FL ; ОБМЕНА LDA PSR ; MOV С,А ; И LHLD BUF1 ; XCHG ; ПОМЕНЯТЬ СТРОКИ LHLD BUF2 ; МЕСТАМИ. PO: MOV 8, M ; LDAX D ; MOV M,A ; MOV A,B ; STAX D ; INX D ; INX H ; DCR C ; JNZ PO ; JMP CORR ; ; ПРОДОЛЖЕНИЕ СРАВНЕНИЯ ОСТАЛЬНЫХ ПОЗИЦИЙ PUZ2: INX H ; ПОДГОТОВИТЬ СЛЕДУМИЕ INX D ; ПОЗИЦИИ СТРОК. LDAX D ; СРI 0DН ; ЕСЛИ КОНЕЦ СТРОКИ,ТО JNZ RO; CORR: LHLD BUF2 ; ПОСЛЕДУЮЩУЮ СТРОКУ SHLD BUF1 ; СДЕЛАТЬ ТЕКУЩЕЙ. JMP NEW1 ; СОРТИРОВАТЬ. ;ПРЕОБРАЗ0ВАНИЕ КОДА СИМВОЛА ДЛЯ СРАВНЕНИЯ PER: SUI 60Н ; ВЗЯТЬ LXI Н,ТАВ1 ;НОВЫЙ КОД SUM: MVI В,0 ; СИМВОЛА. MOV С,А ; DAD В ; RET ; ;ПРОВЕРКА КОНЦА СПИСКА STR2: LHLD BUF3 ; АДРЕС СЛЕДУЮВЕй DCX H ; СТРОКИ СПИСКА XCHG ; СРАВНИТЬ LHLD BUF2 ; С АДРЕСОМ ПОСЛЕДНЕЙ MOV А,Н ; "00Н" СТРОКИ СМР D ; RNZ ; MOV A,L ; СМР Е ; RET ; ;БУКВЫ РУССКОГО АЛФАВИТА,УПОРЯДОЧЕННЫЕ ;ПО ОТНОШЕНИЮ К КОДУ ASCII TABL: DB 1DH,00H,01H,16H ; Ю,А,Б,Ц DB 04Н,05Н,14Н,0ЗН ; Д,Е,ф,Г DB 15Н,08Н,09Н,0АН ; X,И,Й,К DB 0ВН,0СН,0DН,0ЕН ; Л,М,Н,О DВ 0FH,1EH,10H,11H ; П,Я,Р,С DB 12H,13H,06H,02H ; Т,У,Ж,В DВ 1АН,1ВН,07Н,18Н ; Ь,Ы,3,Ю DB 1СН,19Н,17Н,1FН ; Э,Щ,Ч,DEL BUF: DW 2100H ;исходный АДРЕС Т кетового БУФЕРА BUF1: DW 0 ; АДРЕС НАЧАЛА ТЕКУЧЕЙ СТРОКИ BUF2: DW 0 ; АДРЕС НАЧАЛА СЛЕДУЮЩЕЙ СТРОКИ BUF3: DW 0 ; АДРЕС КОНЦА РАСВИРЕННОГО СПИСКА PSR: DB 0 ; СЧЕТЧИК "МАХ" ЧИСЛА СИМВОЛОВ СТРОКИ FL: DВ 0 ; ФЛАГ ОБМЕНА END ; <+> -А-Я(г), 0-9 <L) -ДАТ <R) - РУС