листанг (1071429), страница 2
Текст из файла (страница 2)
318 ;---
319 03BD 8B 1E 017Cr mov bx, my_bp ;печать bp
320 03C1 E8 0060 call encodeascii
321 03C4 B6 01 mov dh, 1
322 03C6 B2 1E mov dl, 30
323 03C8 BD 0103r mov bp, offset regstring
324 03CB B9 0004 mov cx, 4
325 03CE E8 007C call printstr
326 ;---
327
328 ;---
329 03D1 8B 1E 017Er mov bx, my_ds ;печать ds
330 03D5 E8 004C call encodeascii
331 03D8 B6 02 mov dh, 2
332 03DA B2 03 mov dl, 3
333 03DC BD 0103r mov bp, offset regstring
334 03DF B9 0004 mov cx, 4
335 03E2 E8 0068 call printstr
336 ;---
337
338 ;---
339 03E5 8B 1E 0182r mov bx, my_es ;печать es
340 03E9 E8 0038 call encodeascii
341 03EC B6 02 mov dh, 2
342 03EE B2 0C mov dl, 12
Turbo Assembler Version 3.1 24/12/00 23:09:51 Page 7
fin.ASM
343 03F0 BD 0103r mov bp, offset regstring
344 03F3 B9 0004 mov cx, 4
345 03F6 E8 0054 call printstr
346 ;---
347
348 ;---
349 03F9 8B 1E 0184r mov bx, my_ss ;печать ss
350 03FD E8 0024 call encodeascii
351 0400 B6 02 mov dh, 2
352 0402 B2 15 mov dl, 21
353 0404 BD 0103r mov bp, offset regstring
354 0407 B9 0004 mov cx, 4
355 040A E8 0040 call printstr
356 ;---
357
358 ;---
359 040D 8B 1E 0180r mov bx, my_cs ;печать cs
360 0411 E8 0010 call encodeascii
361 0414 B6 02 mov dh, 2
362 0416 B2 1E mov dl, 30
363 0418 BD 0103r mov bp, offset regstring
364 041B B9 0004 mov cx, 4
365 041E E8 002C call printstr
366 ;---
367
368 0421 E9 FE47 jmp home
369
370 ;-----------------------------------------------------------------------------
371 0424 encodeascii proc
372 0424 56 push si
373 0425 BE 0000 mov si,0
374 0428 write: ;напечатает hex число в BX
375 0428 51 push cx
376 0429 52 push dx
377 042A 50 push ax
378 042B B5 04 mov ch,4
379 042D rotate:
380 042D B1 04 mov cl,4
381 042F D3 C3 rol bx,cl
382 0431 8A C3 mov al,bl
383 0433 24 0F and al,0Fh
384 0435 04 30 add al,30h
385 0437 3C 3A cmp al,'9'+1
386 0439 7C 02 jl print_it
387 043B 04 07 add al,07h
388 043D print_it:
389 043D 88 84 0103r mov regstring[si],al
390 0441 83 C6 01 add si,1
391 0444 FE CD dec ch
392 0446 75 E5 jnz rotate
393 0448 58 pop ax
394 0449 5A pop dx
395 044A 59 pop cx
396 044B 5E pop si
397 044C C3 ret
398 044D encodeascii endp
399
Turbo Assembler Version 3.1 24/12/00 23:09:51 Page 8
fin.ASM
400
401 044D printstr:
402 044D 8C D8 mov ax, ds
403 044F 8E C0 mov es, ax
404 0451 B4 13 mov ah, 13h
405 0453 B0 00 mov al, 0h
406 0455 BB 000E mov bx, 000eh
407 0458 CD 10 int 10h
408 045A C3 ret
409
410 ;--------------
411 =035B endres equ $-myproc
412 ;----------------------------------------------------------------
413 ; СЕКЦИЯ ИНИЦИАЛИЗИЦИИ
414 045B init:
415 ;проверка на ключ помощи
416 045B B9 0003 90 mov CX,help_string_len
417 045F BB 0081 mov BX,81h
418 0462 BE 0526r mov SI,offset help_string
419 0465 help_loop:
420 0465 8A 27 mov AH,byte ptr [BX]
421 0467 3A 24 cmp AH,byte ptr [SI]
422 0469 75 11 jne not_help
423 046B 43 inc BX
424 046C 46 inc SI
425 046D E2 F6 loop help_loop
426
427 046F BA 0529r lea DX,help_mes
428 0472 B9 012C 90 mov CX,help_mes_len
429 0476 E8 01DC call writeln
430 0479 EB 54 90 jmp quit
431 ;установление обработчика прерывания 2F для проверки повторной загрузки.
432 ;проверка на установку:
433 047C not_help:
434 047C B8 C000 mov AX,0c000h
435 047F CD 2F int 2fh
436 0481 3C FF cmp AL,0FFh
437 0483 74 40 je installed
438 ;установка своего значения прерывания 2fh
439 0485 B4 35 mov AH,35h
440 0487 B0 2F mov AL,2fh
441 0489 CD 21 int 21h
442 ;сохраним это значение в преременной old_2fh
443 048B 89 1E 018Ar mov word ptr old_2fh,BX
444 048F 8C 06 018Cr mov word ptr old_2fh+2,ES
445 ;установление своего обработчика прерывания 2fh
446 0493 B4 25 mov AH,25h
447 0495 B0 2F mov AL,2fh
448 0497 BA 02FBr mov DX,offset new_2fh
449 049A CD 21 int 21h
450 ;Заполнение вектора прерывания 09 на свой
451 049C B4 35 mov AH,35h
452 049E B0 09 mov AL,09h
453 04A0 CD 21 int 21h
454 ;получениение адреса обработчика прерывания 09 в ES:BX
455 04A2 89 1E 0186r mov word ptr old_09h,BX
456 04A6 8C 06 0188r mov word ptr old_09h+2,ES
Turbo Assembler Version 3.1 24/12/00 23:09:51 Page 9
fin.ASM
457 ;сохраним это значение в преременной
458 04AA B4 25 mov AH,25h
459 04AC B0 09 mov AL,09h
460 04AE BA 01EAr mov DX,offset new_09h
461 04B1 CD 21 int 21h
462
463 ;сообщение о том, что программа загружена
464 04B3 BA 04D4r lea DX,string_starting
465 04B6 B9 0022 90 mov CX,string_starting_len
466 04BA E8 0198 call writeln
467 04BD BA 0046 mov DX,(endres+10Fh)/16
468 04C0 B8 3100 mov AX,3100h
469 04C3 CD 21 int 21h
470 ;выгрузимся, оставив программу резидентной
471
472 ;выход в случае установки.
473 04C5 installed:
474 04C5 BA 04F6r lea DX,string_installed
475 04C8 B9 0030 90 mov CX,string_installed_len
476 04CC E8 0186 call writeln
477 04CF B8 4C00 quit: mov AX,4c00h
478 04D2 CD 21 int 21h
479
480 ;данные нерезидентной части программы
481 04D4 90 A5 A7 A8 A4 A5 AD+ string_starting db 'Резидентная программа стартовала',10,13
482 E2 AD A0 EF 20 AF E0+
483 AE A3 E0 A0 AC AC A0+
484 20 E1 E2 A0 E0 E2 AE+
485 A2 A0 AB A0 0A 0D
486 =0022 string_starting_len=$-string_starting
487 04F6 57 41 52 4E 49 4E 47+ string_installed db 'WARNING: Резидентная программа уже установлена',10,13
488 3A 20 90 A5 A7 A8 A4+
489 A5 AD E2 AD A0 EF 20+
490 AF E0 AE A3 E0 A0 AC+
491 AC A0 20 E3 A6 A5 20+
492 E3 E1 E2 A0 AD AE A2+
493 AB A5 AD A0 0A 0D
494 =0030 string_installed_len=$-string_installed
495 0526 20 2F 3F help_string db ' /?'
496 =0003 help_string_len=$-help_string
497 0529 84 A0 AD AD A0 EF 20+ help_mes db 'Данная программа является резидентом, ' ,10,13
498 AF E0 AE A3 E0 A0 AC+
499 AC A0 20 EF A2 AB EF+
500 A5 E2 E1 EF 20 E0 A5+
501 A7 A8 A4 A5 AD E2 AE+
502 AC 2C 20 0A 0D
503 0551 AE AD A0 20 A2 EB A2+ db 'она выводит в верхнем левом углу содержимое регистров МП',10,13
504 AE A4 A8 E2 20 A2 20+
505 A2 A5 E0 E5 AD A5 AC+
506 20 AB A5 A2 AE AC 20+
507 E3 A3 AB E3 20 E1 AE+
508 A4 A5 E0 A6 A8 AC AE+
509 A5 20 E0 A5 A3 A8 E1+
510 E2 E0 AE A2 20 8C 8F+
511 0A 0D
512 058B A2 EB A2 AE A4 20 E1+ db 'вывод содержимого регистров производится при нажатии ',10,13
513 AE A4 A5 E0 A6 A8 AC+
Turbo Assembler Version 3.1 24/12/00 23:09:51 Page 10
fin.ASM
514 AE A3 AE 20 E0 A5 A3+
515 A8 E1 E2 E0 AE A2 20+
516 AF E0 AE A8 A7 A2 AE+
517 A4 A8 E2 E1 EF 20 AF+
518 E0 A8 20 AD A0 A6 A0+
519 E2 A8 A8 20 0A 0D
520 05C2 AA AB A0 A2 A8 E8 A8+ db 'клавиши F12,при повторных нажатиях клавиши F12, выводятся ',10,13
521 20 46 31 32 2C AF E0+
522 A8 20 AF AE A2 E2 AE+
523 E0 AD EB E5 20 AD A0+
524 A6 A0 E2 A8 EF E5 20+
525 AA AB A0 A2 A8 E8 A8+
526 20 46 31 32 2C 20 A2+
527 EB A2 AE A4 EF E2 E1+
528 EF 20 20 0A 0D
529 05FF A8 A7 AC A5 AD A5 AD+ db 'измененные значения регистров МП',10,13
530 AD EB A5 20 A7 AD A0+
531 E7 A5 AD A8 EF 20 E0+
532 A5 A3 A8 E1 E2 E0 AE+
533 A2 20 8C 8F 0A 0D
534 0621 8F E0 AE A3 E0 A0 AC+ db 'Программа выгружается по сочетанию клавиш Ctrl+u/U',10,13
535 AC A0 20 A2 EB A3 E0+
536 E3 A6 A0 A5 E2 E1 EF+
537 20 AF AE 20 E1 AE E7+
538 A5 E2 A0 AD A8 EE 20+
539 AA AB A0 A2 A8 E8 20+
540 43 74 72 6C 2B 75 2F+
541 55 0A 0D
542
543 =012C help_mes_len=$-help_mes
544 ;процедура для вывода строки на экран.
545 ;вход : CX - длина сообщения DX - смещение.
546 0655 writeln proc
547 0655 B4 40 mov AH,40h
548 0657 BB 0001 mov BX,1
549 065A CD 21 int 21h
550 065C C3 ret
551 065D writeln endp
552 065D text ends
553 end myproc
Turbo Assembler Version 3.1 24/12/00 23:09:51 Page 11
Symbol Table
Symbol Name Type Value
??DATE Text "24/12/00"
??FILENAME Text "fin "
??TIME Text "23:09:51"
??VERSION Number 030A
@CPU Text 0101H
@CURSEG Text TEXT
@FILENAME Text FIN
@WORDSIZE Text 2
ALTQ Near TEXT:0279
ALT_Q Number 0016
ENCODEASCII Near TEXT:0424
ENDI Near TEXT:0274
ENDRES Number 035B
HELP_LOOP Near TEXT:0465
HELP_MES Byte TEXT:0529
HELP_MES_LEN Number 012C
HELP_STRING Byte TEXT:0526
HELP_STRING_LEN Number 0003
HOME Near TEXT:026B
INIT Near TEXT:045B
INSTALLED Near TEXT:04C5
L Near TEXT:02CD
MESR Byte TEXT:018E
MESRLEN Number 005C
MYPROC Near TEXT:0100
MY_AX Word TEXT:016E
MY_BP Word TEXT:017C
MY_BX Word TEXT:0170
MY_CS Word TEXT:0180
MY_CX Word TEXT:0172
MY_DI Word TEXT:0178
MY_DS Word TEXT:017E
MY_DX Word TEXT:0174
MY_ES Word TEXT:0182
MY_SI Word TEXT:0176
MY_SP Word TEXT:017A
MY_SS Word TEXT:0184
NEW_09H Near TEXT:01EA
NEW_2FH Near TEXT:02FB
NOT_HELP Near TEXT:047C
NOT_MY Near TEXT:0303
NOT_U Near TEXT:026B
OLD_09H Dword TEXT:0186
OLD_2FH Dword TEXT:018A
PRINTSTR Near TEXT:044D
PRINT_IT Near TEXT:043D
PRINT_REGS Near TEXT:0308
PRINT_REGS1 Near TEXT:0276
QUEUE_CONT Near TEXT:02AB
QUEUE_END Near TEXT:02C0
QUIT Near TEXT:04CF
REGSTRING Byte TEXT:0103
REGS_S1 Byte TEXT:0108
REGS_S1_LEN Number 0022
Turbo Assembler Version 3.1 24/12/00 23:09:51 Page 12
Symbol Table
REGS_S2 Byte TEXT:012A
REGS_S2_LEN Number 0022
REGS_S3 Byte TEXT:014C
REGS_S3_LEN Number 0022
ROTATE Near TEXT:042D
STRING_INSTALLED Byte TEXT:04F6
STRING_INSTALLED_LEN Number 0030
STRING_STARTING Byte TEXT:04D4
STRING_STARTING_LEN Number 0022
WRITE Near TEXT:0428
WRITELN Near TEXT:0655
Groups & Segments Bit Size Align Combine Class
TEXT 16 065D Para none CODE