Задано текст из 32 символов, состоящий из слов, разделенных одним пробелом. Определить количество слов и количество согласных букв в каждом слове.

.386; Директива определения типа микропроцессора

. Model flat, stdcall; задачи линейной модели памяти
; И соглашения ОС Windows
option casemap: none;отличие малых и больших букв

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\fpu.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\fpu.lib

ExitProcess proto: DWORD
BSIZE equ 30

. Data; директива определения данных
_a dword 3.0; сохранение в 32-разрядной ячейке памяти переменной х
_sum dword 0
sum dword 0
temp_ecx dd 0
mas1 db ‘Privet kak dela u tebya’
mas2 db ‘qwrtpsdfghjklzxcvbnmQWRTPSDFGHJKLZXCVBNM’
st1 db «Вывод количества слов:» 0
st2 db 10 dup (?), 0
ifmt db «Количество слов в тексте =% d. Количество согласных букв =% d», 0

. Code; директива начала кода
_start:
lea edi, mas1
mov ecx, 23
mov edx, 0
kol:
mov al, ‘ ‘
mov ebx, ecx
repne scasb
sub ebx, ecx
. IF (ebx> 2)
inc _sum
. ENDIF
add ecx, 0
jnz kol
lea edi, mas1
mov ecx, 23
m1:
mov al, ‘ ‘
mov bl, [edi]
xor al, bl; проверка слова
jz m2
mov temp_ecx, ecx; хранения регистра
mov ecx, 40
lea esi, mas2
mov al, [esi]
_S1:
. IF (al == bl); сложная условие
inc sum;подсчет количества согласных букв
jmp _mm1

. ELSE; иначе
inc esi; расчет адреса нового числа
mov al, [esi]
loop _S1; перейти, если ecx? 0

. ENDIF
_mm1: mov ecx, temp_ecx ;возврат счетчика
_m1:
cld
inc edi
loop m1
jmp m3

m2:
mov edx, 0
jmp _m1

m3:
mov edx, _sum
mov eax, sum; перемещения числа согласных букв

invoke wsprintf, \
ADDR st2, \
ADDR ifmt, \
edx, eax; вывод содержимого
invoke MessageBox, \
NULL, \
addr st2, \
addr st1 \
MB_OK
invoke ExitProcess, 0
end _start; окончания программы

Реклама

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.