83
84 0041 prob2:
85 0041 46 inc si ;считываем очередной символ
; параметров
86 0042 26: 80 BC 0080 20 cmp byte ptr es:[si+80h], 20h ;это пробел?
87 0048 E1 F7 loope prob2 ;повторяем, пока не найдем
;не-пробел
88
89 004A 83 F9 00 cmp cx, 0 ;конец строки?
90 004D 74 42 je is1stparam ;проверка первого и ввод второго
91 ;с клавиатуры
92 004F 33 DB xor bx, bx
93 0051 name2:
94 0051 26: 8A 84 0080 mov al, byte ptr es:[si+80h]
95 0056 88 87 00D5r mov NameOut[bx+2], al ;заносим очередной символ
96 005A 43 inc bx ;след. символ в имени
97 005B 46 inc si ;след. символ в параметрах
98 005C 26: 80 BC 0080 20 cmp byte ptr es:[si+80h], 20h ;это пробел?
99 0062 E0 ED loopne name2 ;повторяем, пока не найдем пробел
100 0064 C6 87 00D5r 00 mov byte ptr NameOut[bx+2], 0 ;в конец имени –
;нулевой символ
101 0069 C6 06 00D2r FF mov IsSecondParam, -1 ;второй параметр в командной 102 ;строке присутствует!
103 006E EB 21 90 jmp is1stparam ;проверка параметров
104
105 ;-----Получение имени файла-источника с клавиатуры --------------------
106 0071 noparam:
107 0071 BA 0000r mov dx, offset InvitIn
108 0074 B4 09 mov ah, 09h ;Вывод приглашения на экран
109 0076 CD 21 int 21h
110 0078 BA 001Fr mov dx, offset NameIn ;Адрес ответа
111 007B 52 push dx
112 007C B8 0C0A mov ax, 0C0Ah ;Получение строки
113 007F CD 21 int 21h
114
115 0081 5A pop dx ;Берем адрес ответа
116 0082 8B DA mov bx, dx
117 0084 33 C0 xor ax, ax ;ax=0
118 0086 8A 47 01 mov al, [bx+1] ;al = истинная длина ответа
119 0089 03 D8 add bx, ax
120 008B 83 C3 02 add bx, 2 ;в конец ответа
121 008E C6 07 00 mov byte ptr [bx], 0h ;заменяем "ввод" на 0
122
123 0091 is1stparam:
124 0091 BA 001Fr mov dx, offset NameIn ;на случай, если мы попали 125 ;сюда из раздела анализакомндной строки
126 0094 B8 3D00 mov ax, 3D00h ;ф-ия 3Dh прерывания 21h
127 0097 83 C2 02 add dx, 2
128 009A F8 clc
129 009B CD 21 int 21h ;попытка открыть
130 009D 73 0A jnc cont1 ;все в порядке - продолжаем
131
132 009F BA 0087r mov dx, offset DenyIn
133 00A2 B4 09 mov ah, 09h
134 00A4 CD 21 int 21h ;иначе предупреждаем
135 00A6 E9 0153 jmp end1 ;и выходим
136
137 00A9 cont1:
138 00A9 A3 0085r mov FileNumIn, ax ;сохраняем логический номер файла
139
140 00AC BA 00D3r mov dx, offset NameOut ;на случай, если сюда попали
141 ;из раздела анализа комндной строки
142 00AF 80 3E 00D2r FF cmp IsSecondParam, -1 ;был ли второй параметр в
143 ; командной строке?
144 00B4 74 20 je is2ndparam ;тогда ввод с клавиатуры не
145 ; нужен
146 ;----------Получение имени файла-приемника с клавиатуры ---------------
147
148 00B6 BA 00B2r mov dx, offset InvitOut
149 00B9 B4 09 mov ah, 09h
150 00BB CD 21 int 21h ;снова приглашение
151
152 00BD BA 00D3r mov dx, offset NameOut
153 00C0 52 push dx ;запоминаем адрес ответа
154 00C1 B8 0C0A mov ax, 0C0Ah
155 00C4 CD 21 int 21h ;получаем ответ
156
157 00C6 5A pop dx ;берем адрес
158 00C7 8B DA mov bx, dx ;
159 00C9 33 C0 xor ax, ax ;
160 00CB 8A 47 01 mov al, [bx+1] ;истинная длина
161 00CE 03 D8 add bx, ax ;
162 00D0 83 C3 02 add bx, 2 ;
163 00D3 C6 07 00 mov byte ptr [bx], 0h ;превращаем в нуль-
164 ; терминированную строку для дальнейшего использования
165 00D6 is2ndparam:
166 00D6 B9 0001 mov cx, 1 ;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.