![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
BioXaZaRD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 1.6.2009 Репутация: нет Всего: нет |
Задание такое:
Ввести строку из нескольких слов, разделённых пробелами. Слова включают в произволь-ном порядке цифры, строчные и прописные латинские буквы. Отредактированная строка включает слова, начинающиеся с прописной буквы (остальные строчные). Цифры из слов должны быть удалены. Программу защитить паролем. Что работает: 1. Есть защита поролем 2. Все слова начинаются с заглавной буквы Что нужно сделать: 1.Нужен цикл чтобы удалить цифры из строки (допустим есть строка с цифрами, мы ее должны заного переписать - но уже без них) 2.Если буква внутри слова заглавная она должна стать маленькой Вот код программы: %TITLE "Лабораторная работа №2" IDEAL MODEL small STACK 256 ;Макроопределения descrip_in = 0 ;Дескриптор стандартного ввода descrip_out = 1 ;Дескриптор стандартного вывода descrip_err = 2 ;Дескриптор стандартной ошибки (экрана) DATASEG ;============Данные лр============== msg Db 13,10,'‚ўҐ¤ЁвҐ бва®Єг: ' msg_len = $-msg Buf DB 80,00,80 DUP(?) Buf2 DB 80,00,80 DUP(?) msg_buf DB 13,10,'Ћвд®а¬ вЁа®ў п бва®Є : ' msg_buf_len = $-msg_buf actual_len DW ? ;========Данные пароля============== password DB 'pass' ;Пароль pass_len = $-password string DB 80 DUP(?) promt DB 13,10,'‚ўҐ¤ЁвҐ Ї а®«м: $' OK DB 13,10,'‚л ўўҐ«Ё ўҐал© Ї а®«м!$' ;=================================== CODESEG Start: mov ax,@data ;Установка в ds адреса mov ds,ax ;сегмента данных ;========Ввод пароля=========== eror: jmp begin ;Повторить ввод пароля begin: mov ah,09h ;Вывод запроса на ввод пароля mov dx,offset promt ;Адрес запроса int 21h ;Введём пароль mov bx,0 ;Инициализация индексирования ввода pass: mov ah,08h ;Функция ввода символа в AL без эха int 21h cmp al,13 ;<Enter> ? je compare ;Да, на сравнение mov [string+bx],al ;Нет, сохраним символ mov ah,02 mov dl,'*' ;Запишем на экран * int 21h inc bx jmp pass ;Повторять ;Сравнение введённого пароля с действительным (сравнение строк) compare: push ds ;Установить ES на сегмент данных pop es mov di,offset string ;ES:DI- начало string mov si,offset password ;DS:SI- начало password cld ;DF=0- просмотр вперёд mov cx,pass_len ;Установить счётчик сравнения repe cmpsb ;{ds:si - es:di}. Сравнивать, пока символы двух ;строк совпадают, но не более CX раз) jne eror ;Строки не равны ;Вывод сообщения ОК, подтверждающего правильность пароля mov ah,09h mov dx,offset OK int 21h ;===Вывод служебного сообщения msg mov ah,40h ;Функция вывода mov bx,descrip_err mov cx,msg_len ;Длина сообщения mov dx,offset msg ;Адрес сообщения int 21h ;===Ввод строки с клавиатуры в буфер Buf=== mov ah,0Ah ;Функция ввода mov bx,descrip_in ;mov bp, offset Buf2 mov dx,offset Buf ;Адрес буфера int 21h ;mov di, offset Buf2+1 mov si, offset Buf+1 mov cl,[si] ;Счётчик элементов строки mov ch, 0 mov si,offset Buf+2 ;mov di,offset Buf+2 l2: mov si, offset buf+2 ;mov di, offset buf+2 mov al,[si] sub al,20h mov [si],al ;mov [di],al jmp filter2 ;=========Цикл2 по преобразованию строки=========== filter2: mov al,[si] ;Возьмём символ inc si ;inc di cmp al,' ' ;если пробел? jz probel ;Да, не преобразовывать loop filter2 ;Цикл jmp l1 probel: mov al,[si] sub al,20h mov [si],al ;mov [di],al jmp filter2 ;================================================ l1: ;Вывод служебного сообщения msg_buf mov ah,40h ;Функция вывода mov bx,descrip_err mov cx,msg_buf_len ;Длина сообщения mov dx,offset msg_buf ;Адрес сообщения int 21h ;Вывод на экран mov ah,40h ;Функция вывода mov bx,descrip_out mov si, offset Buf+1 mov cl,[si] ;Длина сообщения mov dx,offset Buf+2 ;Адрес сообщения int 21h Exit: mov ax,4C00h ;Функция DOS 4Сh: выход из программы int 21h ;Вызов DOS. Останов END Start ;Конец программы/точка входа |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: нет Всего: 14 |
BioXaZaRD,
Для домашних заданий, курсовых, существует "Центр Помощи". ![]() |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 6 Всего: 158 |
Для домашних заданий, курсовых, существует "Центр Помощи".
Тема перенесена! |
|||
|
||||
BioXaZaRD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 1.6.2009 Репутация: нет Всего: нет |
Тема все еще актуальна
Это сообщение отредактировал(а) BioXaZaRD - 2.6.2009, 15:49 |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 16 Всего: 69 |
не трудная - сами пишите ![]() |
|||
|
||||
airyashov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 1.7.2008 Репутация: 1 Всего: 6 |
Я за финансы подправлю
-------------------- icq:3(один)7748666 mail:airyashov( а )inbox.ru |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |