Лабораторная работа по "Программированию"
Автор: Инга А • Июнь 28, 2020 • Лабораторная работа • 1,243 Слов (5 Страниц) • 360 Просмотры
.386P
PUBLIC LAB5
.MODEL FLAT, C
_TEXT SEGMENT
LAB5 PROC
PUSH EBP
MOV EBP, ESP
mov esi, DWORD PTR[EBP+8]; исходный текст
mov ecx, [EBP+12]
xor edx, edx
;====================================================================(считаю количество слов с одинаковой первой и последней буквой)
v1:
mov al, [esi]; кладу в al первую букву слова
mov [EBP+28], al; кладу эту же букву в переменную в си
jmp c11; перехожу в c11
c1:
mov al, [esi];
c11:
mov bl, [esi+1]; кладу в bl букву после обрабатываемой
cmp bl, ' '; сравниваю её с пробелом
je probel1; если равна перехожу в probel1
cmp bl, '.'; сравниваю её с точкой
je tochka1; если равна перехожу в tochka1
jmp prostobukva1; если не пробел и не точка, то слово не закончилось, перехожу в prostobukva1
tochka1:
mov al, [EBP+28]; кладу в al первую букву обрабатываемого слова
mov bl, [esi]; кладу в bl последнюю букву обрабатываемого слова
cmp al, bl; сравниваю их
jne konec1; если не равны, перехожу в konec1
inc edx; если равны прибавляю 1 к количеству слов с одинаковыми первой и последней буквами
jmp konec1; перехожу в konec1
probel1:
mov al, [EBP+28]; кладу в al первую букву обрабатываемого слова
mov bl, [esi]; кладу в bl последнюю букву обрабатываемого слова
inc esi; перехожу в массиве следующий символ(пробел)
cmp al, bl; сравниваю буквы
jne lastbukva1; если не равны перехожу в lastbukva1
inc edx; если равны прибавляю 1 к количеству слов с одинаковыми первой и последней буквами
jmp lastbukva1; перехожу в lastbukva1
prostobukva1:
xor al, al; обнуляю
xor bl, bl; обнуляю
inc esi; перехожу в массиве следующий символ
loop c1; лупаюсь в с1
lastbukva1:
xor al, al; обнуляю
xor bl, bl; обнуляю
inc esi; перехожу в массиве следующий символ
loop v1; лупаюсь в v1
konec1:
mov ebx, [EBP+24]; кладу количество слов с одинаковой первой и последней буквой в переменную в си
mov [ebx], edx; кладу количество слов с одинаковой первой и последней буквой в переменную в си
;===================================================================(считаю количество слов с одинаковой первой и последней буквой)
xor eax, eax
xor edx, edx
xor ebx, ebx
;========================================(переношу во второй массив слова с одинаковыми первой и последней буквой)
mov esi, DWORD PTR[EBP+8]; первый массив
mov edx, DWORD PTR[EBP+20]; третий массив
mov ecx, 0; сейчас ecx будет счетчиком букв в обрабатываемом слове
v2:
mov edi, DWORD PTR[EBP+16]; массив одного слова
mov al, [esi]; кладу в al первую букву слова из первого текста
mov [edi], al; кладу эту же букву в массив одного слова
mov [EBP+28], al; кладу эту же букву в переменную в си
inc ecx; прибавляю 1 к счетчику букв в слове
jmp c22; перехожу в c22
c2:
mov al, [esi]; кладу в al НЕ первую букву слова
mov [edi], al; кладу эту же букву в массив одного слова
inc ecx; прибавляю 1 к счетчику букв в слове
c22:
mov bl, [esi+1]; кладу в bl букву после обрабатываемой
cmp bl, ' '; сравниваю её с пробелом
je probel2; если равна перехожу в probel2
cmp bl, '.'; сравниваю её с точкой
je tochka2; если равна перехожу в tochka2
jmp prostobukva2; если не пробел и не точка, то слово не закончилось, перехожу в prostobukva2
tochka2:
mov al, [EBP+28]; кладу в al первую букву обрабатываемого слова
mov bl, [esi]; кладу в bl последнюю букву обрабатываемого слова
cmp al, bl; сравниваю их
jne konec2; если не равны, перехожу в konec2
jmp mas4; если равны перехожу в mas4
probel2:
mov al, [EBP+28]; кладу в al первую букву обрабатываемого слова
mov bl, [esi]; кладу в bl последнюю букву обрабатываемого слова
inc esi; перехожу в первом массиве на следующий символ(пробел)
cmp al, bl; сравниваю буквы
jne ttt; если не равны перехожу в ttt
jmp mas3; если равны перехожу в mas3
prostobukva2:
xor al, al; обнуляю
xor bl, bl; обнуляю
...