Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Assembler
Перезагрузить страницу Написание программы для поиска слов
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Belldandy Belldandy вне форума
Member
 
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.06.2003
По умолчанию Написание программы для поиска слов - 07.06.2003, 17:13

она ищет в словах одну букву..как мне сделать чтобы она все-таки искала две буквы в словах и выводила только их на экран (так она выводи слова в которых есть хоть первая буква сочетания
Код:
  DSEG SEGMENT
;    индивидуальные данные - начало
k    DW ?
j    DW ?
A    DB 'ro'
N    DW ?
POLE DB 20 dup(?),'$'
PRT3 DB 'Nomer slova => '
BUFFER1 DB 6 dup(?)
DB 10,13, '$'
;  индивидуальные данные - конец
USER_STRING DB 100,101 dup(?)
TEXT1BW DB 'нет точки или ? или !',10,13,'$'
TEXT2BW DB 'неверный символ-'
SYMBW DB ?
db 10,13,'$'
BWC DB ?
symb db ' ,:-.!?'
stroka DB 100 dup(?)
DB 10,13,'$'
prt1 DB 'введите предложение:',10,13,'$'
prt2 DB 'ввели предложение:',10,13,'$'
Prob db ' $'
NEW_LINE db 13,10,'$';перевод строки
Buffer db 6 dup (?),'$'
DSEG ENDS
Stacks segment
dw 140 dup (?)
Stacks ends
CODES SEGMENT
MAIN PROC FAR
Assume CS:codes, DS:dseg, SS:stacks,ES:dseg
Mov AX,Dseg
Mov DS,AX mov ES,AX
CLD
LEA DX,prt1
Call PRT;печать 'введите предложение: '
lea DI,STROKA ; очистили STR
mov CX,100
call CLEAR_STR
CALL READ_KEYS ; ввели строку в USER_STRING 
lea DI,STROKA
mov SI,DX
REP movsb      ; переписали строку в STROKA
lea DX,PRT2
call prt 
lea DX,stroka
call prt
; индивидуальная часть программы - начало
;i -> BX
mov N,1
lea BX,STROKA
BL5:
mov k,BX
call END_WORD
mov j, BX
mov SI,k
mov AH, A
cmp byte ptr[SI],AH
JE BL8
JMP BL12
BL8:
lea DI, POLE; ochistka POLE
mov CX,20
call CLEAR_STR
;perepis' slova v POLE
mov    CX,BX; podschet dlini slova
sub    CX,SI
inc    CX
lea    DI,POLE
REP    movsb
;pechat' slova
lea DX, POLE
call PRT
push BX
mov AX,N
lea BX,BUFFER1
call convba
pop BX
lea DX,PRT3
call PRT
call NL
BL12:
inc N
call BEG_WORD
cmp BWC,0
je BL5
FIN:
;  индивидуальная часть программы - конец
Mov AH,4CH
Int 21h
MAIN ENDP
;*********************************************************
CLEAR_STR proc;адрес начала очищаемого поля в DI push AX; количество символов в CX
push DI
push CX
mov    AL,' '
REP    STOSB
pop    CX
pop    DI
pop    AX
RET
CLEAR_STR ENDP
;*********************************************************
CONVBA PROC
;преобразует из формата с фиксированной точкой в формат цифровой
push CX
push DX; сохраним регистры, которые будем портить
push SI
push AX
Mov CX,6; т.к. состоит из 6 байтов
C10:Mov byte PTR [BX],' '; переслать ' ' по адресу, на кот. указывает BX Inc BX              ; увеличить на 1 адрес BX
Loop C10;    от содержимого СХ вычит. 1. Если СХ>0, то на С10
Mov SI,10;    чтобы получить число посл.
OR AX,AX;    полож. число или отриц. (логическое сложение)
JNS C20;    перейти если число отрицательное
NEG AX;    сделали его положительным
C20:xor DX,DX; сложение по модулю 2
Div SI;    АХ/SI (AX-частное, DX-остаток)
Add DX,30h;    чтобы распечатать
Dec BX;    вернемся в предыдущий байт
Mov [BX],DL;    DL -> по адресу регистра ВХ
OR AX,AX;    проверка, что в АХ
JNZ C20;    если не 0, то на С20
POP AX;    вернем из стека АХ (он был последним)
OR AX,AX
JNS C30
Dec BX
Mov byte PTR [BX],'-'; перешлем "-" по адресу ВХ C30:POP SI
POP DX
POP CX
RET; возврат в основную процедуру
CONVBA endp
;*********************************************************
PRT PROC push AX Mov AH,09h Int 21h POP AX RET
PRT ENDP
;*********************************************************
PRN PROC    ;печать числа push BX push DX
LEA BX,Buffer
CALL CONVBA
Mov DX,BX
CALL PRT
POP DX
POP BX
RET
PRN ENDP
;********************************************************
NL proc; перевод строки
push AX
push DX
lea DX,NEW_LINE
mov AH,09h
int 21h
pop DX
pop AX
ret
NL endp
;*******************************************************
READ_KEYS proc   ; ввод строки в поле USER_STRING. Процедура
push AX;  возвращает в DX - адрес начала введенной строки
lea    DX,USER_STRING ;  а в СХ - количество введенных символов
mov    AH,0Ah
int    21h
sub    CH,CH
mov    CL,USER_STRING+1
ADD    DX,2
pop    AX
RET
READ_KEYS endp
;*********************************************************
END_WORD proc push SI push AX xor CX,CX BEGEW:
push CX mov CX,7 Lea SI,SYMB COMP:
MOV AH,[SI]
CMP AH,[BX]
JE FINEW
INC SI
LOOP COMP pop CX inc BX inc CX JMP BEGEW
FINEW: pop CX dec BX pop AX pop SI RET END_WORD ENDP
;*******************************************************
BEG_WORD proc push DX push AX lea DX,STROKA add DX,100 mov BWC,0
inc BX    ; рнонход на следующий символ после последнего в слове
mov AL,[BX]
cmp AL,'?' ; сравнение символа с ? либо ! либо . - это конец строки
je KONBW
cmp AL,'!'
je KONBW
cmp AL,'.'
je KONBW
cmp AL,' '  ; сравнение с пробелом
je PROBBW
cmp AL,','  ;    сравнение с ,
je GOPROBBW ;    если запятая, то проверить наличие далее пробелов
cmp AL,'-'  ;    сравнение с -
je GOPROBBW
cmp AL,':'  ; сравнение с :
je GOPROBBW
jmp INVSYMBBW ;  неверный символ
GOPROBBW:
inc BX; следующим должен быть пробел
cmp byte ptr[BX],' '
jne INVSYMBBW ; если не пробел - то это неверный символ
PROBBW:; пропуск пробелов до начала следующего слова
inc BX
cmp BX,DX
jl M1BW
jmp ERRZICLBW  ; в конце предложения нет . либо ? либо !
M1BW:
cmp byte ptr[BX],' '
je PROBBW
jmp ENDPRBW
ERRZICLBW:
LEA DX,TEXT1BW
CALL PRT mov BWC,1
jmp ENDPRBW INVSYMBBW:
LEA DX,TEXT2BW mov AH,[BX] mov SYMBW,AH call PRT
mov BWC,1
jmp ENDPRBW KONBW:
mov BWC,1 ENDPRBW:
pop AX
pop DX
ret
BEG_WORD endp
;*********************************************
CODES ENDS
END MAIN
Ответить с цитированием
  (#2 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 10.06.2003, 18:10

Код:
;============
        mov   SI, k
        mov   AH, A
        cmp   byte ptr [SI], AH
        jne   NotEqual
        inc   SI
        mov   AH, A+1
        cmp   byte ptr [SI], AH
        JE    BL8
NotEqual:
        JMP   BL12
;===========
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написание программы на С++ werovulv C++ Builder 2 17.05.2011 21:33
Дан текст, для каждого из слов указать, сколько раз оно встречается среди слов текста wekze C++ Builder 8 19.02.2011 10:27
Написание программы. gvidofd Задания за деньги 1 21.05.2008 14:28
программы для поиска файлов SalliVaH Софт и программы 1 15.09.2007 16:58
Написание программы для USB jaguarevg Visual C++ 4 17.05.2006 17:07
Написание программы сортировка слов по алфавиту Andreyyy Вопросы начинающих программистов 20 02.05.2006 10:40
Написание программ по сортировке слов с столбцы imported_Logan Вопросы начинающих программистов 9 13.01.2006 23:06
Как написать PERL для поиска слов в строке L1nk C++ Builder 1 19.10.2005 14:42
Настройка поиска и удаления при написании программы Настёна Вопросы начинающих программистов 2 07.10.2005 21:06
Написание программы для поиска файлов на дисках bobstail Visual C++ 1 05.05.2004 12:08
Написание функции для поиска значения imported_Irinka Lisp 2 25.03.2004 14:38
Написание программы на C++ *Юльчик* .NET 0 01.01.1970 04:00



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов