Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проги.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
25.08 Кб
Скачать

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