167 00D9 B8 3C01 mov ax, 3C01h ;
168 00DC 83 C2 02 add dx, 2 ;
169 00DF F8 clc
170 00E0 CD 21 int 21h ;пытаемся создать файл с этим именем
171 00E2 73 0A jnc cont2 ;все путем - продолжаем
172
173 00E4 BA 013Br mov dx, offset DenyOut
174 00E7 B4 09 mov ah, 09h
175 00E9 CD 21 int 21h ;иначе предупреждаем
176 00EB E9 0106 jmp end2 ;и выходим
177
178 00EE cont2:
179 00EE A3 0139r mov FileNumOut, ax ;логический номер созданного
180 ; файла
181 ;--- Получение позиций символов-разделитетей (возвр. каретки) --------
182
183 00F1 33 C9 xor cx, cx ;CX - счетчик положения в файле
184 00F3 BB 0966r mov bx, offset PosArray ;массив с позициями
185 ; символов возврата каретки
186 00F6 cont3:
187 00F6 53 push bx ;
188 00F7 51 push cx ;
189
190 00F8 B9 0400 mov cx, 400h ;
191 00FB BA 0166r mov dx, offset Buffer ;
192 00FE 8B 1E 0085r mov bx, FileNumIn ;
193 0102 B4 3F mov ah, 3Fh ;
194 0104 CD 21 int 21h ;читаем из файла в буфер 1024 байта
195 0106 3D 0000 cmp ax, 0 ;вышли за пределы файла?
196 0109 74 28 je cont6 ;да - переход
197
198 010B 59 pop cx ;восстанавливаем счетчики
199 010C 5B pop bx
200 010D BE 0166r mov si, offset Buffer ;получаем начало буфера
201
202 0110 cont5:
203
204 0110 80 3C 0D cmp byte ptr [si], 0Dh ;сравниваем текущий символ
205 ;в буфере с смволом возврата каретки
206 0113 75 05 jne cont4
207 0115 89 0F mov [bx], cx ;если совпал - пишем в массив,
208 0117 83 C3 02 add bx, 2 ;какую позицию в файле занимает
209 ;этот символ
210 ;сквозная нумерация позиций - через
211 ;регистр CX
212
213 011A cont4:
214 011A 41 inc cx ;переход к следующей позиции в файле
215 011B 46 inc si ;и в буфере
216 011C 48 dec ax ;буфер закончился?
217 011D 75 F1 jnz cont5 ;нет - продолжаем сравнение
218
219 011F 53 push bx ;сохраняем счетчики
220 0120 51 push cx ;
221 0121 8B 1E 0085r mov bx, FileNumIn ;
222 0125 33 C9 xor cx, cx ;
223 0127 BA 0400 mov dx, 400h ;
224 012A B8 4201 mov ax, 4201h ;сдвигаем позицию в файле на 1024
225 012D CD 21 int 21h ;символа
226 012F 59 pop cx
227 0130 5B pop bx ;восстанавливаем счетчики
228 0131 EB C3 jmp cont3 ;продолжаем считывание
229
230 ;---- Преобразование позиций в длины строк -------------------------
231
232 0133 cont6:
233 0133 59 pop cx ;по окончании файла записываем
234 0134 5B pop bx ;в массив позицию последнего
235 0135 89 0F mov [bx], cx ;символа
236
237 0137 BB 0966r mov bx, offset PosArray ;на начало массива
238 013A 8B 07 mov ax, [bx] ;позиция первого символа ВК
239 013C 8B D0 mov dx, ax ;
240
241 013E cont9:
242 013E 8B 4F 02 mov cx, [bx+2] ;позиция следющего символа
243 0141 83 F9 00 cmp cx, 0 ;не был ли предыдущий последним?
244 0144 74 11 je cont7 ;да - выходим
245 0146 2B CA sub cx, dx ;полная длина строки с символами
246 ;ВК и перевода строки
247 0148 3B C8 cmp cx, ax ;строка длиннее предыдущей?
248 014A 7E 02 jle cont8
249 014C 8B C1 mov ax, cx ;если да - она новый эталон
250 014E cont8:
251 014E 83 C3 02 add bx, 2 ;
252 0151 8B 17 mov dx, [bx] ;запоминаем позицию для использования
253 0153 89 0F mov [bx], cx ;а в массиве заменяем позицию длиной
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.