serj_nsk
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Помогите вставить в эту базу данных сортировку по любому из атрибутов до вторника желательно!! оч буду признателен text segment 'code' assume cs:text, ds:data stdout=1 stdin=0 CR=13 LF=10 myproc proc mov AX, data mov DS, AX mov si,0 ;устанавливаем цвет фона и символов mov ah,06h mov al,0 mov bh,20h mov ch,0 mov cl,0 mov dh,24 mov dl,79 int 10h mov ah,06h mov al,0 mov bh,30h mov ch,7 mov cl,0 mov dh,24 mov dl,79 int 10h ;вывод меню mov ah,40h mov bx,stdout mov cx,fonlen mov dx,offset fon int 21h mov ah,40h mov bx,stdout mov cx,menulen mov dx,offset menu int 21h ;открытие файла mov AH, 3dh mov al,2 mov CX, 0 mov DX, offset filename int 21h mov handle, AX nn: mov ah,01 int 21h ;Выбор пункта меню нажатием соответствущей клавиши. ;При нажатии 1-5 переход на соответствующую метку cmp al,'1' je cc cmp al,'2' je vvod cmp al,'3' je vivod cmp al,'4' je vv cmp al,'5' je exit1 call error cc: ;создание файла mov ah,06h mov al,0 mov bh,30h mov ch,7 mov cl,0 mov dh,24 mov dl,79 int 10h mov ah,02h mov bh,0 mov dh,6 mov dl,0 int 10h mov AH, 3ch mov CX, 0 mov DX, offset filename int 21h mov handle, AX next: call continuec ;вывод сообщения об ошибке, если нажата клавиша не из диапазона 1-5 error: mov ah,06h mov al,0 mov bh,30h mov ch,7 mov cl,0 mov dh,24 mov dl,79 int 10h mov ah,02h mov bh,0 mov dh,6 mov dl,0 int 10h ;Вывод сообщения об ошибке mov ah,40h mov bx,stdout mov cx,erlen mov dx,offset er int 21h call continuec vivod: call vivod1 vv: call vv1 exit1: call exit ;добавление новой строки в конец файла vvod: mov ah,06h mov al,0 mov bh,30h mov ch,7 mov cl,0 mov dh,24 mov dl,79 int 10h mov ah,02h mov bh,0 mov dh,6 mov dl,0 int 10h ;смещаем указатель на конец файла mov ah,42h mov al,2 mov bx,handle mov cx,0 mov dx,0 int 21h mov ah,40h mov bx,stdout mov cx,lennum mov dx,offset nummes int 21h mov ah,3Fh mov bx,stdin mov cx,500 mov dx,offset buf1 int 21h sub ax,2 mov actlen1,ax ;дописывание нулей в начало если длина номера меньше 3 mov cx,3 sub cx,ax cmp cx,0 je next5 cicl4: push cx mov ah,40h mov bx,handle mov cx,1 mov dx,offset nul int 21h pop cx loop cicl4 next5: ;Вывод номера строки на экран mov ah,40h mov bx,handle mov cx,actlen1 mov dx,offset buf1 int 21h ;Вставка пробела mov ah,40h mov bx,handle mov cx,1 mov dx,offset pr int 21h ;Введения названия театра mov ah,40h mov bx,stdout mov cx,namelen mov dx,offset namep int 21h ;ввод новой строки с клавиатуры mov ah,3Fh mov bx,stdin mov cx,500 mov dx,offset buf int 21h sub ax,2 mov actlen,ax ;записываем строку в файл без 2-х последних символов перехода на новую строчку mov ah,40h mov bx,handle mov cx,actlen mov dx,offset buf int 21h ;дополняем строку пробелами, чтобы длина записи была равна 80 mov cx,21 sub cx,actlen sub cx,2 cicl1: mov ah,40h mov bx,handle push cx mov cx,1 mov dx,offset pr int 21h pop cx loop cicl1 ;Введение даты создания театра mov ah,40h mov bx,stdout mov cx,datalen mov dx,offset datap int 21h ;ввод новой строки с клавиатуры mov ah,3Fh mov bx,stdin mov cx,500 mov dx,offset buf int 21h sub ax,2 mov actlen,ax ;записываем строку в файл без 2-х последних символов перехода на новую строчку mov ah,40h mov bx,handle mov cx,actlen mov dx,offset buf int 21h ;дополняем строку пробелами, чтобы длина записи была равна 21 mov cx,21 sub cx,actlen sub cx,2 cicl11: mov ah,40h mov bx,handle push cx mov cx,1 mov dx,offset pr int 21h pop cx loop cicl11 ;Введение имени города mov ah,40h mov bx,stdout mov cx,gorodlen mov dx,offset gorod int 21h ;ввод новой строки с клавиатуры mov ah,3Fh mov bx,stdin mov cx,500 mov dx,offset buf int 21h sub ax,2 mov actlen,ax ;записываем строку в файл без 2-х последних символов перехода на новую строчку mov ah,40h mov bx,handle mov cx,actlen mov dx,offset buf int 21h ;дополняем строку пробелами, чтобы длина записи была равна 20 mov cx,20 sub cx,actlen sub cx,2 cicl12: mov ah,40h mov bx,handle push cx mov cx,1 mov dx,offset pr int 21h pop cx loop cicl12 ;Введение имени режиссера mov ah,40h mov bx,stdout mov cx,rejlen mov dx,offset rej int 21h ;ввод новой строки с клавиатуры mov ah,3Fh mov bx,stdin mov cx,500 mov dx,offset buf int 21h sub ax,2 mov actlen,ax ;записываем строку в файл без 2-х последних символов перехода на новую строчку mov ah,40h mov bx,handle mov cx,actlen mov dx,offset buf int 21h ;дополняем строку пробелами, чтобы длина записи была равна 20 mov cx,20 sub cx,actlen sub cx,2 cicl13: mov ah,40h mov bx,handle push cx mov cx,1 mov dx,offset pr int 21h pop cx loop cicl13 ;добавление символа перевода на следующую строку mov ah,40h mov bx,handle mov cx,2 mov dx,offset en int 21h call continuec ;вывод всего содержимого файла vivod1: ;очистка экрана mov ah,06h mov al,0 mov bh,30h mov ch,7 mov cl,0 mov dh,24 mov dl,79 int 10h ;позиционирование курсора mov ah,02h mov bh,0 mov dh,6 mov dl,0 int 10h mov ah,40h mov bx,stdout mov cx,2 mov dx,offset en int 21h ;перевод указателя на начало файла mov ah,42h mov al,0 mov bx,handle mov cx,0 mov dx,0 int 21h ;Считывание в buf содержимого файла mov ah,3Fh mov bx,handle mov cx,1500 mov dx,offset buf2 int 21h mov actlen2,ax ;Вывод buf на экран mov ah,40h mov bx,stdout mov cx,actlen2 mov dx,offset buf2 int 21h call continuec ;удаление строки vv1: mov ah,40h mov bx,stdout mov cx,delslen mov dx,offset dels int 21h ;Ввод номера удаляемой строки mov ah,3fh mov bx,stdin mov cx,80 mov dx,offset buf3 int 21h ;Создание вспомогательного файла mov AH, 3ch mov CX, 0 mov DX, offset filename1 int 21h mov handle1, AX ;Цикл сравнения строк в файле с удаляемой mov cx,30 mov di,0 cicl2: ;Сохраняем значение cx mov n,cx ;Смещение указателя на размер 1 записи(80) mov ah,42h mov al,0 mov bx,handle mov cx,0 mov dx,di int 21h ;Считывание файла mov ah,3fh mov bx,handle mov cx,80 mov dx,offset buf1 int 21h mov actlen1,ax add di,80 ;Сравнение номера строк в цикле по 1 символу mov si,0 mov cx,3 cicl3: mov bh,buf3[si] mov bl,buf1[si] cmp bh,bl jne next3 inc si loop cicl3 ;Если символы не совпадают то переходим на метку, не выводя строку во вспомагательный файл call next2 next3: ;Вывод строки во вспомагательный файл mov ah,40h mov bx,handle1 mov cx,actlen1 mov dx,offset buf1 int 21h next2: ;Восстановления количества повторений в цикле mov cx,n loop cicl2 ;Закрытие исходного файла mov ah,3eh mov bx,handle int 21h ;Закрытие вспомагательного файла mov ah,3eh mov bx,handle1 int 21h ;Удаление исходного файла mov AH, 41h mov CX, 0 mov DX, offset filename int 21h ;Замена основного файла вспомагательным push ds pop es mov ah,56h mov dx,offset filename1 mov di,offset filename int 21h ;Открытие основного файла mov AH, 3dh mov al,2 mov CX, 0 mov DX, offset filename int 21h mov handle, AX ;Закрашивание области на экране и изменения цвета символов mov ah,06h mov al,0 mov bh,30h mov ch,7 mov cl,0 mov dh,24 mov dl,79 int 10h ;Позиционирования курсора mov ah,02h mov bh,0 mov dh,6 mov dl,0 int 10h continuec: mov ah,40h mov bx,stdout mov cx,2 mov dx,offset en int 21h jmp nn exit: ;закрытие файла mov ah,3eh mov bx,handle int 21h ;выход из программы mov AX, 4C00h int 21h myproc endp text ends data segment n dw 0 buf db 2000 dup (0) actlen dw 0 buf1 db 2000 dup (0) actlen1 dw 0 buf2 db 2000 dup (0) actlen2 dw 0 buf3 db 2000 dup (0) actlen3 dw 0 nul db '0' fon db 'Teatri Rossii',CR,LF fonlen equ $-fon nummes db CR,LF,'Vvedite nomer stroki:',CR,LF lennum equ $-nummes menu db '1.Sozdat new fail',CR,LF,'2.Vstavit stroku',CR,LF,'3.Vivesti dannie na ekran',CR,LF,'4.Udalit stroku',CR,LF,'5.Exit',CR,LF,'Viberite menu, najav klavishi 1-5:',CR,LF menulen equ $-menu er db CR,LF,'Oshibka vvoda. Povtorite popitku:',CR,LF erlen equ $-er namep db CR,LF,'Vvedite nazvanie teatra:',CR,LF namelen equ $-namep datap db CR,LF,'Vvedite datu sozdaniya:',CR,LF datalen equ $-datap gorod db CR,LF,'Vvedite gorod:',CR,LF gorodlen equ $-gorod rej db CR,LF,'Vvedite imya glavnogo rejissera:',CR,LF rejlen equ $-rej en db CR,LF namen db ? dels db CR,LF,'Vvedite nomer stroki, dlya udaleniya',CR,LF delslen equ $-dels handle dw ? handle1 dw ? filename db 'teatri.txt',0 filename1 db 'teatri.in',0 pr db ' ' mas dw 100 dup(0) data ends stack1 segment para stack 'stack' db 128 dup (?) stack1 ends end myproc |