Смекни!
smekni.com

Удаление слов использованием резидентной программы (стр. 3 из 3)

Вход:

AH= 56h;

Текст подпрограмм

Cм. приложение А.

3.5 Тестирование

3.5.1 Цель испытаний

Выяснить поведение программы в различных ситуациях, созданных пользователем.

3.5.2 Тесты

Тест №1

Действия: первый запуск резидентной программы.

Реакция программы: выводится уведомление об установке резидента. См. рисунок 3.3.

Рисунок 3.3 Тест №1


Список использованных источников

1.Гордеев А. В., Молчанов А. Ю. Системное программное обеспечение. – Питер, 2003. – 736 с.

2.ЗубковС. В. Assembler для DOS, Windows и UNIX. – М.: ДМК, 2000. – 608 с.

3.Кулаков В. Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. – СПб.: Питер, 2003. – 847 с. ил.

4.Финогенов К. Г., Самоучитель по системным функциям MS DOS. –3-е изд., – М.: Горячая линия – Телеком, 2001. – 382с.

5.Фролов А.В., Фролов Г.В. Аппаратное обеспечение персонального компьютера. – М.: Диалог-МИФИ, 1997. – 304 с (БСП т.33).

6.Юров В. И. Assembler. Учебник для вузов.2-е изд. – СПб.: Питер, 2006. – 637 с.: ил.


Приложение А

Листинг файла residenta.lst

Turbo Assembler Version 4.1 26/12/10 02:44:32 Page 1

residenta.ASM

1 0000 .modeltiny

2 0000 .code

3 .486

4 org 100h

5 0100 main proc far

6 0100 E9 01C8 jmp iniz

7 0103 00000000 old_2Fh dd 0 ;системный адрес int_2Fh

8 0107 00000000 old_09hdd0 ;системный адрес 09h

9 010B 44 3A5C 74 65 6D 70+ filename1 db'D:\temp\file1.txt',0

10 5C 6669 6C 65 31 2E+

11 74 7874 00

12 011D 44 3A5C 74 65 6D 70+ filename2 db'D:\temp\file2.txt',0

13 5C 6669 6C 65 32 2E+

14 74 7874 00

15 012F ???? handle1 dw ?

16 0131 ???? handle2 dw ?

17 0133 14 bufferdb 20

18 0134 ???? buf_len dw ?

19 0136 12*(??) cont db 18 dup (?);содержимое буфера

20 0148 0A 0D24 str_break db 10,13,'$'

21 014B 49 6E70 75 74 20 73+ welcome db "Input string, please",'$'

22 74 7269 6E 67 2C 20+

23 70 6C65 61 73 65 24

24 0160 53 7472 69 6E 67 20+ doing db "String afterdeleting",'$'

25 61 6674 65 72 20 64+

26 65 6C65 74 69 6E 67+

27 24

28 0176 44 3A5C 74 65 6D 70+ directory db 'D:\temp',0

29 00

30

31 017Enew_2Fh: ;прикладной обработчик 2Fh

32 017E3DC800 cmpax,0c800h;подфункция повторной загрузки

33 0181 74 0B90 90 jzinst

34 0185 3C01 cmpal,01 ;подфункция выгрузки

35 0187 74 0E90 90 jzuninstall

36 018B EB 0490 jmp out_2Fh

37 018E inst:

38 018E B0 FF mov al,0ffh

39 0190 CFiret;возврат после первого вызоваint2Fh

40 0191 out_2Fh:

41 0191 2E: FF2E0103rjmpcs:old_2Fh;после обработки необходим переход в транзитную часть

42 0196 CFiret;откудабыл осуществленвызов

43 0197 uninstall:

44 0197 1E push ds

45 0198 06 push es

46 0199 B8 2509 mov ax,2509h ;восстановление int 09h

47 019C 2E: C5 16 0107r lds dx,cs:old_09h

48 01A1 CD 21 int 21h

49 01A3 B8 252F mov ax,252Fh ;восстановление int_2Fh

50 01A6 2E: C5 16 0103r lds dx,cs:old_2Fh

51 01ABCD21 int21h

52 ;выгрузка окруж. резидента

53 ; адрес окруж.в PSPпо смещению 2ch

54 01AD2E: 8E06 002Cmoves,cs:2ch;сегментный адрес окруж.

55 01B2 B4 49 mov ah,49h

56 01B4 CD 21 int 21h

57 ;выгрузка резидента

Turbo Assembler Version 4.1 26/12/10 02:44:32 Page 2

q.ASM

58 01B6 0E push cs

59 01B7 07 popes;сегментный адрес резидента

60 01B8 B4 49 mov ah,49h

61 01BA CD 21 int 21h

62 01BC 07 pop es

63 01BD 1F pop ds

64 01BECFiret;возвращение после третьего вызова int2Fh

65

66 01BFasmb:

67 ;создание директории D:\temp

68 01BF B4 39 mov ah,39h

69 01C1 BA 0176r mov dx,offset directory

70 01C4 CD 21 int 21h

71 ;создание file1

72 01C6 B4 5B mov AH,5Bh

73 01C8 B9 0000 movCX,0 ; без атрибутов

74 01CB BA 010Br mov DX,offset filename1

75 01CE CD 21 int 21h

76 01D0 A3 012Fr mov handle1, ax ; дескриптор file в handle1

77 ;очистка экрана

78 01D3 B8 0003 mov AX,0003h

79 01D6 CD10 int10h

80 ;выводна экран приветствия

81 01D8 B4 09 mov AH,09h

82 01DA BA 014Br lea DX,welcome

83 01DD CD 21 int 21h

84 01DF B4 09 mov AH,09h

85 01E1 BA 0148r lea DX,str_break

86 01E4 CD21 int21h

87 ;ввод строки склавиатуры

88 01E6 B4 0A mov AH,0Ah

89 01E8 BA 0133r lea DX,buffer

90 01EBCD21 int21h; в buf_len-фактическая длина строки

91 01ED B4 09 mov AH,09h

92 01EF BA 0148r lea DX,str_break

93 01F2 CD21 int21h

94 ;выводна экран удаляемых слов

95 01F4 B4 09 mov AH,09h

96 01F6 BA 0160r lea DX,doing

97 01F9 CD 21 int 21h

98 01FB B4 09 mov AH,09h

99 01FD BA 0148r lea DX,str_break

100 0200 CD21 int21h

101 ;запись в file1

102 0202 B4 40 mov AH,40h

103 0204 8B 1E012Fr mov BX,handle1

104 0208 33 C9 xor CX,CX

105 020A 8B 0E0134r mov CX,buf_len

106 020E BA 0136r lea DX,cont ; содержимое buffer

107 0211 CD21 int21h

108 ;выводна экран file1

109 0213 B4 40 mov AH,40h

110 0215 BB 0001 mov BX,1

111 0218 8B 0E0134r mov CX,buf_len

112 021C BA 0136r lea DX,cont

113 021F CD 21 int 21h

114 0221 B4 09 mov AH,09h

Turbo Assembler Version 4.1 26/12/10 02:44:32 Page 3

q.ASM

115 0223 BA 0148r lea DX,str_break

116 0226 CD 21 int 21h

117 ;закрытие file1

118 0228 B4 3E mov ah,3eh

119 022A 8B 1E012Fr mov bx, handle1

120 022E CD 21 int 21h

121 0230 read_next:

122 0230 B4 3Dmovah,3dh;открыть существующий файл

123 0232 B0 00 mov al, 0

124 0234 BA 010Br lea dx, filename1

125 0237 CD 21 int 21h

126 0239 A3 012Fr mov handle1, ax

127 023C read_next_byte:

128 023C B4 3F mov ah,3Fh ; чтение файла

129 023E 8B 1E012Fr mov bx,handle1

130 0242 B9 0001 movcx,1 ; считывать один байт

131 0245 BA0133rmovdx,offsetbuffer; начало буфера - в DX

132 0248 CD 21 int 21h

133 024A 3D 0000 cmp ax,0 ; ах =0 - файл пуст

134 024D 74 6F90 90 je exit

135 0251 A0 0133r mov al, byte ptr buffer

136 0254 3C20 cmpal,20h; если не пробел

137 0256 75 E4 jneread_next_byte; считать следующий байт

138 0258 B4 3Fmovah,3Fh; еслипробел найден

139 025A8B1E012Frmovbx,handle1 ; чтение файладо конца

140 025EB9 0014 movcx,20 ; с позиции пробела

141 0261 BA0133rmovdx, offsetbuffer; и запись в новый файл

142 0264 CD 21 int 21h

143 0266 A1 0134r mov ax,buf_len

144 ;создание File2

145 0269 B4 5B mov AH,5Bh

146 026BB9 0000 movCX,0 ; без атрибутов

147 026E BA 011Dr mov DX,offset filename2

148 0271 CD 21 int 21h

149 0273 A3 0131r mov handle2, ax ; дескриптор file1 в handle2

150 ;запись в File2

151 0276 B4 40 movAH,40h

152 0278 8B 1E0131r mov BX,handle2

153 027C 8B 0E0134r mov CX,buf_len

154 0280 BA 0136r lea DX,cont

155 0283 CD 21 int 21h

156 ;выводна экран file2

157 0285 B4 40 movAH,40h

158 0287 BB 0001 mov BX,1

159 028A 8B 0E0134r mov CX,buf_len

160 028E BA 0136r lea DX,cont

161 0291 CD 21 int 21h

162 0293 B4 09 mov AH,09h

163 0295 BA 0148r lea DX,str_break

164 0298 CD 21 int 21h

165 ;закрытие File1

166 029A B4 3E mov AH,3Eh

167 029C 8B 1E012Fr mov BX,handle1

168 02A0 CD 21 int 21h

169 ;удаление File1

170 02A2 B4 41 mov AH,41h

171 02A4 BA 010Br mov DX,offset filename1

Turbo Assembler Version 4.1 26/12/10 02:44:32 Page 4

q.ASM

172 02A7 CD 21 int 21h

173 ;закрытие File2

174 02A9 B4 3E mov AH,3Eh

175 02AB 8B 1E0131r mov BX,handle2

176 02AFCD21 int21h

177 ;переименование file2

178 02B1 B4 56 mov AH,56h

179 02B3 BA 011Dr lea dx,filename2

180 02B6 BF 010Br lea di,filename1

181 02B9 CD 21 int 21h

182 02BB E9 FF72 jmp read_next

183 02BE exit:

184 02BE B8 4C00 mov ax,4c00h

185 02C1 CD 21 int 21h

186 02C3 main endp

187 =01C3 size =$ - main

*Warning* q.ASM(177) Reserved word usedas symbol: SIZE

188

189 ;транзитные данные

190 02C3 4C6F61 64 69 6E67+ mesdb'Loading$'

191 24

192 02CBinizproc;проверка повторной загрузки

193 02CB 0E push cs

194 02CC 1F pop ds

195 02CDB8 C800 movax,0c800h;нулевая подфункция - повтор

196 02D0 CD2Fint2Fh

197 02D2 3CFFcmpal,0ffh;признак резидента в памяти

198 02D4 74 3390 90 jzinstalled

199 ;чтение адреса int2Fh в old_2fh

200 02D8 B8 352F mov ax,352Fh

201 02DB CD 21 int 21h ;ES:BX - адрес int2Fh

202 02DD 89 1E0103r mov word ptr old_2Fh,bx

203 02E1 8C 060105r mov word ptr old_2Fh[2],es

204 ;запись прикладного адреса CS:new_2Fhв int2Fh(первая резервная точка входа)

205 02E5 B8 252F mov ax,252Fh

206 02E8 BA 017Er mov dx,offset new_2Fh

207 02EB CD 21 int 21h

208 ;чтение адресаint 09hв old_09h

209 02ED B8 3509 mov ax,3509h

210 02F0 CD 21 int 21h ;ES:BX- адресint 09h

211 02F2 89 1E0107r mov word ptr old_09h,bx

212 02F6 8C 060109r mov word ptr old_09h[2],es

213 ;запись прикладного адреса CS:asmbв int09h(вторая резервнаяточка входа)

214 02FA B8 2509 mov ax,2509h

215 02FD BA 01BFr mov dx,offset asmb

216 0300 CD21 int21h

217 ;сохранение резидента и завершение работы

218 0302 B4 31 mov ah,31h

219 0304 BA 002D mov dx,(size+100h+0Fh)/16

220 0307 CD21 int21h;точкавыхода при загрузке резидента

221 0309 installed:

222 0309 B4 09 mov ah,09h

223 030B BA 02C3r mov dx,offset mes

224 030E CD 21 int 21h

225 0310 rez:

226 0310 B4 00 movah,00 ;цикл проверки нажатия цифровых клавиш

227 0312 CD 16 int 16h ;ah = scan-кодклавиши

Turbo Assembler Version 4.1 26/12/10 02:44:32 Page 5

q.ASM

228 ;al = ASCII-код символа

229 0314 80 FC30 cmp ah,30h ;клавиша "0"

230 0317 74 4390 90 jz outp

231 031B 80 FC31 cmp ah,31h ;клавиша "1"

232 031E 74 3C90 90 jz outp

233 0322 80 FC32 cmp ah,32h ;клавиша "2"

234 0325 74 3590 90 jz outp

235 0329 80 FC33 cmp ah,33h ;клавиша "3"

236 032C 74 2E90 90 jz outp

237 0330 80 FC34 cmp ah,34h ;клавиша "4"

238 0333 74 2790 90 jz outp

239 0337 80 FC35 cmp ah,35h ;клавиша "5"

240 033A 74 2090 90 jz outp

241 033E 80 FC36 cmp ah,36h ;клавиша "6"

242 0341 74 1990 90 jz outp

243 0345 80 FC37 cmp ah,37h ;клавиша "7"

244 0348 74 1290 90 jz outp

245 034C 80 FC38 cmp ah,38h ;клавиша "8"

246 034F 74 0B90 90 jz outp

247 0353 80 FC39 cmp ah,39h ;клавиша "9"

248 0356 74 0490 90 jz outp

249 035A EB B4 jmp rez

250 035C outp:

251 035C B8 C801 mov ax,0c801h ;01h- подфункция выгрузки

252 035F CD 2F int 2Fh

253 0361 iniz endp

254 end main

Turbo Assembler Version 4.1 26/12/10 02:44:32 Page 6

Symbol Table

Symbol Name Type Value

??DATE Text "26/12/10"

??FILENAME Text "q "

??TIME Text "02:44:32"

??VERSION Number 040A

@32BIT Text 0

@CODE Text DGROUP

@CODESIZE Text 0

@CPU Text 1F1FH

@CURSEG Text _TEXT

@DATA Text DGROUP

@DATASIZE Text 0

@FILENAME Text Q

@INTERFACE Text 000H

@MODEL Text 1

@STACK Text DGROUP

@WORDSIZE Text 4

ASMB Near DGROUP:01BF

BUFFER Byte DGROUP:0133

BUF_LEN Word DGROUP:0134

CONT Byte DGROUP:0136

DIRECTORY Byte DGROUP:0176

DOING Byte DGROUP:0160

EXIT Near DGROUP:02BE

FILENAME1 Byte DGROUP:010B

FILENAME2 Byte DGROUP:011D

HANDLE1 Word DGROUP:012F

HANDLE2 Word DGROUP:0131

INIZ Near DGROUP:02CB

INST Near DGROUP:018E

INSTALLED Near DGROUP:0309

MAIN Far DGROUP:0100

MES Byte DGROUP:02C3

NEW_2FH Near DGROUP:017E

OLD_09H Dword DGROUP:0107

OLD_2FH Dword DGROUP:0103

OUTP Near DGROUP:035C

OUT_2FH Near DGROUP:0191

READ_NEXT Near DGROUP:0230

READ_NEXT_BYTE Near DGROUP:023C

REZ Near DGROUP:0310

SIZE Number 01C3

STR_BREAK Byte DGROUP:0148

UNINSTALL Near DGROUP:0197

WELCOME Byte DGROUP:014B

Groups & Segments Bit Size Align Combine Class

DGROUP Group

_DATA 16 0000 Word Public DATA

_TEXT 16 0361 Word Public CODE

Turbo Assembler Version 4.1 26/12/10 02:44:32 Page 7

Error Summary

*Warning* q.ASM(177) Reserved word usedas symbol: SIZE