
- •Найти количество слов меньше первого.
- •Самое маленькое слово вывести
- •Int 21h ; ввод строки - прерывание дос
- •3. Самое маленькое слово найти.
- •Int 21h ; ввод строки - прерывание дос
- •Int 21h ; ввод строки - прерывание дос
- •Int 21h ; ввод строки - прерывание дос
- •5. Колличество слов в введенной строке.
- •6. Підрахувати кількість слів, коротших ніж останнє
- •7. Количество слов больше первого по длине
- •8. Підрахувати кількість слів праворуч найкоротшого
- •Int 21h ; ввод строки - прерывание дос
- •9. Для вывода слова
- •10. Подсчет колличества букв в слове.
- •11. Колличество слов, больше самого короткого.
- •12. Количество слов после самого короткого
- •13. Підрахувати кількість слів праворуч найбольшего.
7. Количество слов больше первого по длине
;-------------- Поле стека -------------
stk segment stack 'stack'
db 256 dup("?")
stk ends
;------------- Поле данных -------------
data segment para public 'data'
buffer db 99,102 dup ('$')
mas db 49 dup (?)
CRLF db 0dh,0ah,'$'
text db 'Please, enter a string of words',16,'$'
text1 db ' words more than ','$'
save dw ?
exc dw ?
;------------ Proc StrCon --------------
Num dw ? ; Num:=? Поле в 1 байт
StrNum db 8 dup (?), '$' ; Хранение результата перевода
Negate db ? ; Флаг отрицательности
count db 0
counter dw ?data ends
;----------- Текст программы -----------
code segment para public 'code'
assume cs:code, ds:data, es:data, ss:stk
;________________ START ________________
start:
mov ax,data
mov ds,ax
xor ax,ax
;------------- BASIC PROC --------------
xor bx,bx
lea dx,text
call WrStr
call NextL
;------------- Inputting --------------
mov ah,0ah
mov dx,offset buffer
int 21h
mov ax,03 ;функция очистки экрана
int 10h
;------------- Search end --------------
mov ax,ds
mov es,ax
cld
mov cx,100
mov al,0dh
mov di, offset buffer + 2
REPNE SCAS buffer
je F
F: mov exc,di
dec di
mov buffer[di],' '
;------------- Search space --------------
mov ax,offset buffer + 2
mov save,ax
mov mas[bx],100
t1: xor ax,ax
cld
mov cl,mas[0]
t3: mov al,' '
mov di,save
cmp di,exc
je t4
REPNE SCAS buffer
je FOUND
NOTFOUND: lea dx,text1
call WrStr
jmp t4
FOUND: xor ax,ax
mov ax,di
sub ax,save
cmp ax,1
je t2
sub di,2
push bx mov ax,di
mov bx,save
sub ax,bx
pop bx
inc al
inc bx
mov mas[bx],al
mov al,mas[0]
sub al,mas[bx]
dec al
mov mas[0],al
add di,2
mov save,di
jmp t1
t2: dec cx
mov mas[0],cl
mov save,di
jmp t3
;------------- Search max --------------
t4: xor ax,ax
mov si,1
mov al,mas[si]
mov Num,si
;------------- Search min max --------------
xor cx,cx
mov si,1
t8: inc si
cmp mas[si],al
jle t7
inc cx
t7: cmp bx,si
jne t8
;------------- Output --------------
push Num
mov Num,cx
call StrCon
lea dx, StrNum
call WrStr
lea dx,text1
call WrStr
pop Num
call StrCon
lea dx, StrNum
call WrStr
call NextL
mov dx,offset buffer + 2
call WrStr
mov ah,1 ;Функція затримання програми
int 21h
;---------------- END PROC ------------------
mov ah,4ch
int 21h
;_______________ ADD PROC ______________
;-------------- Next Line -------------NextL proc near
lea dx,CRLF
call WrStr
NextL endp
;-------------- 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
jmp p1
p2: inc count
mov bl,count
xor ax,ax
mov StrNum[bx],al
cmp bx,8
jne p2
lea si, StrNum + 8
mov ax, '$'
mov [si], al
jmp p3
p1: mov cx, 10 ;Фактор деления равен 10
mov count,0
xor bx,bx
jmp p2
p3:
lea si, StrNum + 4 ;Последний символ строки вывода
mov ax, Num ;Заносим в ax число
mov Negate, 0 ;Флаг отрицательности пока не
; установлен
cmp ax, 8000h ;Если старший бит установлен
jb p4 ; то число отрицательно
neg ax ;Возвращаем к положительной форме
mov Negate, 1 ;Устанавливаем флаг отрицательности
p4: cmp ax, 10 ;Если частное меньше 10 то
; прекратить цикл
jb p5 ; и начать рассмотрение знака
cwd ;Иначе расширить знак (для деления)
div cx ; И разделить на фактор деления
or dl, 30h ;Перевести остаток в ASCII
mov [si], dl ; И записать в строку
dec si ;Уменьший индекс
jmp p4 ;И вернуться на начало цикла
p5:
or al, 30h ;Перевести частное в ASCII
mov [si], al ; и занести в строку
cmp Negate, 0 ;Если не был установлен флаг
; отрицательности
jz p6 ;То выйти из процедуры
dec si ;Иначе еще раз уменьшить индекс mov byte ptr [si], '-' ;И записать в него значок минуса
p6:
pop si
pop bx
pop dx
pop cx
pop ax
ret ;Возврат из процедуры
StrCon endp
;________________ END __________________
code ends
end start