
- •Найти количество слов меньше первого.
- •Самое маленькое слово вывести
- •Int 21h ; ввод строки - прерывание дос
- •3. Самое маленькое слово найти.
- •Int 21h ; ввод строки - прерывание дос
- •Int 21h ; ввод строки - прерывание дос
- •Int 21h ; ввод строки - прерывание дос
- •5. Колличество слов в введенной строке.
- •6. Підрахувати кількість слів, коротших ніж останнє
- •7. Количество слов больше первого по длине
- •8. Підрахувати кількість слів праворуч найкоротшого
- •Int 21h ; ввод строки - прерывание дос
- •9. Для вывода слова
- •10. Подсчет колличества букв в слове.
- •11. Колличество слов, больше самого короткого.
- •12. Количество слов после самого короткого
- •13. Підрахувати кількість слів праворуч найбольшего.
1.Найти количество слов меньше первого.
2.Самое маленькое слово вывести.
3.Самое маленькое слово найти.
4.Кол-во букв I.
5.Колличество слов в введенной строке.
6.Підрахувати кількість слів, коротших ніж останнє.
7.Количество слов больше первого по длине
8.Підрахувати кількість слів праворуч найкоротшого
9.Для вывода слова
10.Подсчет колличества букв в слове.
11.Колличество слов, больше самого короткого.
12.Количество слов после самого короткого.
13.Підрахувати кількість слів праворуч найбольшего.
Найти количество слов меньше первого.
STACK_ SEGMENT ; Сегмент стека
db 100 dup(?) ; резервируем 100 байт
STACK_ ENDS
DATA SEGMENT ; Сегмент данных
; выводимые сообщения
Msg_Press db 10,13,'Press any key ...$'
Msg_Res db 10,13,'Litle word is: $'
text1 db 10,13,'Number of words liter first, and all words: $'
String db 41 ; максимальная длина вводимой строки
len db 40 ; длина введенной строки
text db 41 dup(?),'$' ; введенная строка
count dw 0 ; количество слов после самого короткого
min dw ? ; длина самого короткого слова
colW dw 1 ;///////
addwr dw ?
;------------ Proc StrCon --------------
Num dw ? ; Num:=? Поле в 1 байт
StrNum db 5 dup (?),'$' ; Хранение результата перевода
counter dw ?
DATA ENDS
CODE SEGMENT ;Сегмент кода
ASSUME CS:CODE,DS:DATA,SS:STACK_ ;ассоциация сегментных регистров
start:
mov ax,data ; настройка сегментных регистров
mov ds,ax ; сегмент данных
mov es,ax ; вспомагательный сегментный регистр
cld ; очистка флага направления
; строковые операции будут проводится слева на право
mov ah,0ah ; функция ввода строки
lea dx,String ; адрес структуры вводимой строки
int 21h ; ввод строки - прерывание ДОС
; нахождение первого слова
mov ch,0 ; старший байт = 0
mov cl,len ; количество байт (символов) для сканирования
lea di,text ; адрес строки
mov al,' ' ; искомый символ
mov dx,di ; начало самого короткого слова
repne scasb
mov min,di
sub min,dx ; длина слова
dec min
find_space:
mov si,di ; запомнить адрес начала текущего слова
repne scasb ; сканировать пока не равно пробелу
; вычисление длины слова
mov bx,di ; указывает на следующий символ после найденного
sub bx,si ; вычесть адрес начала слова
jz no_min ; перейти если длина=0 (подряд 2 пробела)
inc colW ;//////
cmp cx,0 ; если просканирована вся строка
jz end_str ; перейти на метку
dec bx ; реальная длина слова, т.к. di указывал на символ
; следующий за пробелом
jz no_min ; перейти если длина=0 (подряд 2 пробела)end_str:
cmp bx,min ; сравнение длины слова (ВХ) с самым коротким
jge no_min ; если длина больше либо равна - то перейти
inc count
no_min:
cmp cx,0 ; если просканированна не вся строка
jnz find_space ; тогда перейти - продолжить сканирование
; устанавливаем после слова символ $
;вывод количества слов после самого короткого
lea dx, text1
call WrStr
mov ax,count ;количество слов меньше первого по длине
mov Num,ax
call StrCon
lea dx, StrNum
call WrStr
mov ax,colW ;////////////количество слов всего
mov Num,ax
call StrCon
lea dx,StrNum
call WrStr ;////////////////
call StrCon
; вывод сообщения о необходимости нажатия клавиши
mov dx,OFFSET Msg_press ;адрес выводимого сообщения
mov ah,09h ; функция вывода строки на экран
int 21h ; прерывание DOS
; ожидаем нажатие клавиши
mov ah,1 ; ввод символа с клавиатуры - задержка
int 21h ; чистим буфер, ждем ввода
; завершение программы
mov ah,4ch ; функция завершения программы
int 21h
;_______________ ADD PROC ______________
;-------------- Proc WrStr -------------
WrStr proc near
push ax
mov ah,09h
int 21h
pop ax
ret
WrStr endp
;-------------- Proc StrCon ------------
StrCon proc
push ax
push cx
push dx
push bx
push si
mov bx,-1
p1: inc bx
xor ax,ax mov StrNum[bx],al
cmp bx,3
jne p1
mov cx, 10
lea si, StrNum + 3
mov ax, Num
p2: cmp ax, 10
jb p3
cwd
div cx
add dl, 30h
mov [si], dl
dec si
jmp p2
p3:
add al, 30h
mov [si], al
pop si
pop bx
pop dx
pop cx
pop ax
ret
StrCon endp
;________________ END __________________
CODE ENDS
END start ; Start - метка начала исполнение программы