254 0155 EB E7 jmp cont9 ;и повторяем до конца
255
256 ;Теперь надо точнее проверить первую строку
257
258 0157 cont7:
259 0157 BB 0966r mov bx, offset PosArray ;проверим первую строку
260 015A 83 07 02 add word ptr [bx], 2 ;первая мерялась без ПС и с
;нуля
261 015D 39 07 cmp [bx], ax
262 015F 7E 02 jle l4 ;сверяемся с длиннейшей
263 0161 8B 07 mov ax, [bx] ;и при необходимости заменяем
264
265 0163 2D 0002 l4: sub ax, 2 ;получаем истинную длину максимальной
266 0166 A3 1136r mov MaxLength, ax ;и сохраняем ее
267
268 0169 53 push bx ;
269
270 016A 8B 1E 0085r mov bx, FileNumIn ;логический номер файла-источника
271 016E 33 C9 xor cx, cx ;
272 0170 33 D2 xor dx, dx ;
273 0172 B8 4200 mov ax, 4200h ;
274 0175 CD 21 int 21h ;переносим метку на начало файла
275 0177 C7 06 1138r 0000 mov CurrentPos, 0
276
277 017D cont11:
278 017D 5B pop bx ;
279 017E 8B 0F mov cx, [bx] ;получаем длину текущей строки
280 0180 53 push bx ;
281 0181 83 E9 02 sub cx, 2 ;корректируем
282 0184 8B 1E 0085r mov bx, FileNumIn
283 0188 BA 0166r mov dx, offset Buffer
284 018B B8 3F00 mov ax, 3F00h ;зачитываем строку в буфер
285 018E CD 21 int 21h ;в AX - число считанных байт
286
287 0190 03 D0 add dx, ax ;переходим в конец строки
288 0192 8B 0E 1136r mov cx, MaxLength
289 0196 2B C8 sub cx, ax ;в СХ - разница между максимальной
290 0198 74 0C jz l6 ;и текущей строкой
291
292 019A 8B DA mov bx, dx ;будем танцевать от BX
293 019C C6 07 20 l1: mov byte ptr [bx], 20h ;дополним считанную
;строку пробелами
294 019F 43 inc bx ;следующая позиция
295 01A0 49 dec cx ;сколько еще осталось
296 01A1 83 F9 00 cmp cx, 0
297 01A4 75 F6 jne l1 ;продолжаем до конца
298
299 01A6 C6 07 0D l6: mov byte ptr [bx], 0Dh ;в конец допишем возврат
;каретки
300 01A9 43 inc bx
301 01AA C6 07 0A mov byte ptr [bx], 0Ah ;и перевод строки
302
303 01AD 5B pop bx ;массив длин
304 01AE 8B 17 mov dx, [bx] ;получаем длину текущей строки
305 01B0 01 16 1138r add CurrentPos, dx ;вычисляем следующую
;позицию в файле
306 01B4 53 push bx ;сохраняем
307 01B5 8B 16 1138r mov dx, CurrentPos ;куда ствить указатель
308 01B9 8B 1E 0085r mov bx, FileNumIn ;логический номер файла-источника
309 01BD 33 C9 xor cx, cx
310 01BF B8 4200 mov ax, 4200h
311 01C2 CD 21 int 21h ;и сдвигаем метку в файле на эту длину
312
313 01C4 8B 1E 0139r l5: mov bx, FileNumOut ;логический номер
; выходного файла
314 01C8 8B 0E 1136r mov cx, MaxLength ;длина дополненной строки
315 01CC 83 C1 02 add cx, 2 ;с учетом ВК и ПС
316 01CF BA 0166r mov dx, offset Buffer ;откуда брать строку
317 01D2 B8 4000 mov ax, 4000h
318 01D5 CD 21 int 21h ;пишем в файл
319
320 01D7 33 C9 xor cx, cx ;с тем же файлом
321 01D9 33 D2 xor dx, dx
322 01DB B8 4202 mov ax, 4202h ;в конец его
323 01DE CD 21 int 21h ;сдвигаем указатель
324
325 01E0 5B pop bx ;массив длин
326 01E1 83 C3 02 add bx, 2 ;следующий элемент
327 01E4 83 3F 00 cmp word ptr [bx], 0 ;не последний ли?
328 01E7 74 03 je cont10 ;если последний - заканчиваем
329 01E9 53 push bx
330 01EA EB 91 jmp cont11 ;иначе продолжим
331
332 01EC cont10:
333 01EC 8B 1E 0139r mov bx, FileNumOut
334 01F0 B4 3E mov ah, 3Eh
335 01F2 CD 21 int 21h ;закрываем выходной файл
336
337 01F4 end2:
338 01F4 8B 1E 0085r mov bx, FileNumIn
339 01F8 B4 3E mov ah, 3Eh
340 01FA CD 21 int 21h ;закрываем файл-источник
341
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.