- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
;------------------------------------------------------------------------------------
; Задача. Подсчитать максимальную длину слова входного
; текста. Слово - это последовательность символов, отличных от
; пробела. Длина текста и слова не более 80 символов.
;------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------
; Макроопределения
; Вызов функции DOS, вызывается функция с номером f.
; Внимание! Изменяется содержимое регистра ah.
_f macro f
mov ah,f
int 21h
endm
;--------------------------------------------------------------------------
; Вывод текста на экран
; Текст находится в памяти по адресу adr и завершается символом "$".
_puts macro adr_str
push ax
push dx
lea dx, adr_str
_f 9
pop dx
pop ax
endm
;------------------------------------------------------------------------
assume cs:code, ds:data ; назначение регистров
; сегмента команд и сегмента данных
;------------------------------------------------------------------------
; Сегмент данных
data segment para public 'data'
soob1 db 13,10,'Error open input file',13,10,'$'
soob2 db 13,10,'Error create output file',13,10,'$'
soob3 db 13,10,'Error read file',13,10,'$'
soob4 db 13,10,'Error write file',13,10,'$'
soob5 db 13,10,'Error close input file',13,10,'$'
soob6 db 13,10,'Error close output file',13,10,'$'
name_in db 'input.txt',0
name_out db 'output.txt',0
nom_in dw ?
nom_out dw ?
in_buf db 80 dup(?)
out_buf db 'Max dlina slova = '
maxdl db 62 dup( ' ')
data ends
;-------------------------------------------------------------
; Сегмент кода
code segment para public 'code'
main proc
mov ax,data ; инициализация pегистpа
mov ds,ax ; сегмента данных
b1: lea dx,name_in ; Открытие входного файла
mov al,0
_f 3Dh
jnc b2 ; Файл открылся
_puts soob1 ; Файл не открылся
jmp v
b2: mov nom_in,ax ; N вх.файла
lea dx, name_out ; Открытие выходного файла
mov al,1
_f 3Dh
jnc b3 ; Файл открылся
lea dx,name_out ; Создание выходного файла
mov cx,0
_f 3Ch
jnc b3 ; Создание успешное
_puts soob2 ; Файл не создался
jmp v2
b3: mov nom_out,ax ; N вых.файла
xor ax,ax
push ax ; выходной параметр - к-во введ-х байтов в стек
call vvod ; Ввод записи
jnc b4 ; Ввод успешный
_puts soob3 ; Файл не читается
jmp v1
b4: ;pop ax ; результат - к-во введ-х байтов в ах
;push ax ; входной параметр - к-во введ-х байтов
lea dx,maxdl ; входной параметр – адрес результата
push dx
call obrab ; Обработка данных
call vivod ; Вывод записи
jnc v1 ; Вывод успешный
_puts soob4 ; Файл не записывается
v1: mov bx,nom_out ; Закрытие выходного файла
_f 3Eh
jnc v2 ; Закрытие успешное
_puts soob6 ; Файл не закрылся
v2: mov bx,nom_in ; Закрытие входного файла
_f 3Eh
jnc v
_puts soob5 ; Файл не закрылся
v:
_f 4Ch ; Выход в DOS
main endp
vvod proc ; Ввод записи
push bp
mov bp,sp
push ax