Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Assembler] Не трудная программка 
:(
    Опции темы
BioXaZaRD
Дата 1.6.2009, 20:09 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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    ;Конец программы/точка входа

PM MAIL   Вверх
Mikl_
Дата 2.6.2009, 03:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: нет
Всего: 14



BioXaZaRD
Для домашних заданий, курсовых, существует "Центр Помощи". smile 
PM MAIL   Вверх
dumb
Дата 2.6.2009, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 6
Всего: 158



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM MAIL   Вверх
BioXaZaRD
Дата 2.6.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 1.6.2009

Репутация: нет
Всего: нет



Тема все еще актуальна

Это сообщение отредактировал(а) BioXaZaRD - 2.6.2009, 15:49
PM MAIL   Вверх
zim22
Дата 2.6.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



Цитата(BioXaZaRD @  2.6.2009,  15:39 Найти цитируемый пост)
Тема все еще актуальна

Цитата(BioXaZaRD @  1.6.2009,  20:09 Найти цитируемый пост)
[Assembler] Не трудная программка

не трудная - сами пишите   smile  



--------------------
PM MAIL   Вверх
airyashov
Дата 2.6.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 1
Всего: 6



Я за финансы подправлю


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0699 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.