mov ax, @data ; заносим в AX адрес начала сегмента данных
mov es, ax ; и из AX помещаем его в ES
mov di, offset source2 ; в DI адрес строки куда копировать
rep movsb ; копируем
mov bx, dx ; сохраним в регистр BX значение DX
inc si ; в SI адрес начала копируемой строки
_no_second_source:
; копируем в строку destination символы, находящиеся после пробела
xor ch, ch ; обнуляем CH
mov cl, byte ptr ds:[80h] ; в CL заносим количество символов в командной строке
add cx, 82h ; корректируем CX так, чтобы получилось количество символов после пробела
sub cx, bx ; корректируем CX так, чтобы получилось количество символов после пробела
dec cx
mov ax, @data ; заносим в AX адрес начала сегмента данных
mov es, ax ; и из AX помещаем его в ES
mov di, offset destination ; в DI адрес строки куда копировать
rep movsb ; копируем
mov ax, @data ; заносим в AX адрес начала сегмента данных
mov ds, ax ; и из AX помещаем его в DS
; сброс атрибутов файла источника source1
mov ax, 4301h ; в AX номер функции "установка атрибута файла"
xor cx, cx ; обнуляем CX - это будущий атрибут
mov dx, offset source1 ; в DX адрес строки, содержащей путь к файлу
int 21h ; прерывание 21h - вызов функции MS-DOS
; открываем файл source1
mov ah, 3dh ; в AH номер функции "открытие файла"
xor al, al
mov dx, offset source1 ; в DX адрес строки, содержащей путь к файлу
int 21h ; прерывание 21h - вызов функции MS-DOS
mov si, ax ; сохраняем дескриптор файла источника в регистре SI
; сздаём файл destination
mov ah, 3ch ; в AH номер функции "создание файла"
xor cx, cx
mov dx, offset destination ; в DX адрес строки, содержащей путь к файлу
int 21h ; прерывание 21h - вызов функции MS-DOS
mov di, ax ;сохраняем дескриптор файла назначения в регистре DI
mov dx, offset buffer ;в DX адрес буфера
; копируем файл source1
_copy1_loop:
; читаем из файла источника
mov ah, 3fh ; в AH номер функции "чтение из файла"
mov bx, si ; в BX дескриптор файла
mov cx, 1024 ; в CX сколько байт читать
int 21h ; прерывание 21h - вызов функции MS-DOS
cmp ax, 0 ; если в буфере пусто
jz _copy1_end ; выходим
;пишем в файл назначения то, что прочитали в буфер
mov cx, ax ; в CX количество прочитанных байт
mov ah, 40h ; в AH номер функции "запись в файл"
mov bx, di ; в BX дескриптор файла
int 21h ; прерывание 21h - вызов функции MS-DOS
jmp _copy1_loop ; повториь
_copy1_end:
; закрываем файл source1
mov ah, 3eh ; в AH номер функции "закрыть файл"
mov bx, si ; в BX дескриптор файла
int 21h ; прерывание 21h - вызов функции MS-DOS
cmp bp, 0 ; если BP = 0
je _no_source2 ; то второго файла нет, пропускаем копирование
; сброс атрибутов файла источника source2
mov ax, 4301h ; в AX номер функции "установка атрибута файла"
xor cx, cx ; обнуляем CX - это будущий атрибут
mov dx, offset source2 ; в DX адрес строки, содержащей путь к файлу
int 21h ; прерывание 21h - вызов функции MS-DOS
; открываем файл source2
mov ah, 3dh ; в AH номер функции "открытие файла"
xor al, al ; обнуляем AH
mov dx, offset source2 ; в DX адрес строки, содержащей путь к файлу
int 21h ; прерывание 21h - вызов функции MS-DOS
mov si, ax ; сохраняем дескриптор файла источника в регистре SI
mov dx, offset buffer ;в DX адрес буфера
; копируем файл source2
_copy2_loop:
; читаем из файла источника
mov ah, 3fh ; в AH номер функции "чтение из файла"
mov bx, si ; в BX дескриптор файла
mov cx, 1024 ; в CX сколько байт читать
int 21h ; прерывание 21h - вызов функции MS-DOS
cmp ax, 0 ; если в буфере пусто
jz _copy2_end ; выходим
;пишем в файл назначения то, что прочитали в буфер
mov cx, ax ; в CX количество прочитанных байт
mov ah, 40h ; в AH номер функции "запись в файл"
mov bx, di ; в BX дескриптор файла
int 21h ; прерывание 21h - вызов функции MS-DOS
jmp _copy2_loop ;повтор
_copy2_end:
; закрываем файл source2
mov ah, 3eh ; в AH номер функции "закрыть файл"
mov bx, si ; в BX дескриптор файла
int 21h ; прерывание 21h - вызов функции MS-DOS
_no_source2:
; закрываем файл destination
mov ah, 3eh ; в AH номер функции "закрыть файл"
mov bx, di ; в BX дескриптор файла
int 21h ; прерывание 21h - вызов функции MS-DOS
; завершаем работу программы
mov ah, 4ch ; в AH номер функции "завершение работы программы"
int 21h ; прерывание 21h - вызов функции MS-DOS
end _star
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.