Assembler. Подсчет сколько раз каждое слово встречается в строке.
На данном этапе вводится предложение, записывается в файл, считаются пробелы и каждое слово записывается в строку.
my_data segment
assume cs:my_data, ds:my_data
fname db 'A_11.txt', 0 ; ASCIIZ-имя файла
string db 50 dup('*');
slovo db 50 dup('*');
len = $-string ; длина строки
ermes db 'Error'
; Код
; Создадим файл
begin: mov ax,my_data
mov ds,ax
mov ah, 3Ch ; функция ’Создать файл’
lea dx, fname ; DS:DX -> ASCIIZ-имя
mov cx,0
xor cx, cx ; без атрибутов
int 21h
jc error ; если ошибка – на обработку
; буферизованный ввод строки
push ax
mov ah, 0Ah
lea dx, string
int 21h
;поиск пробелов
mov si,2
Find:
mov cx,len
mov di,si
M:
inc di;
cmp cx,di
je N
cmp string[di],32
je N
jmp M
mov si,0
N:
mov al, string[si];
mov slovo[si],al
inc si
cmp si,di
jne N
push di
mov ah,2
mov dl,10
INT 21H
dec di
dec di
;вывод строки
mov ah, 40h ; функция записи в файл или на устройство
lea dx, slovo ; DS:DX -> записываемая строка
mov cx,si
mov bx,1
int 21h
;нашли ли все пробелы
pop di
mov si,di
cmp si,len
je Rec
jmp Find
; Запишем в файл строку
Rec:
pop ax
xor cx,cx
add string[1],2;
mov bx, ax ; сохраним дескриптор созданного файла
mov ah, 40h ; функция записи в файл или на устройство
lea dx, string
mov cl,string[1]
mov string[1],' '
mov string[0], ' '
int 21h
; Закроем файл (в BX - дескриптор)
mov ah, 3Eh
int 21h
exit: mov ax, 4C00h
int 21h
; Обработка ошибки создания файла
error:
mov ah, 9
lea dx, ermes
int 21h ; вывод сообщения ermes
jmp exit
my_data ends
end begin