3Listing (1071418), страница 2
Текст из файла (страница 2)
346 03E5 CD 10 int 10h
347 03E7 C3 ret
348 03E8 PUTCH endp
349 ;переход на следующую строку
350 03E8 CRLF proc
351 03E8 33 DB xor bx,bx
352 03EA 32 D2 xor dl,dl
353 03EC FE C6 inc dh
354 03EE B4 02 mov ah,2
355 03F0 CD 10 int 10h
356 03F2 C3 ret
357 03F3 CRLF endp
358 ;данные резидентной части программы
359 03F3 0000 my_ax dw 0
360 03F5 0000 my_bx dw 0
361 03F7 0000 my_cx dw 0
362 03F9 0000 my_dx dw 0
363 03FB 0000 my_si dw 0
364 03FD 0000 my_di dw 0
365 03FF 0000 my_sp dw 0
366 0401 0000 my_bp dw 0
367 0403 0000 my_ds dw 0
368 0405 0000 my_cs dw 0
369 0407 0000 my_es dw 0
370 0409 0000 my_ss dw 0
371 040B 00000000 old_09h dd 0
372 040F 00000000 old_2fh dd 0
373 0413 30 31 32 33 34 35 36+ table1 db '0123456789ABCDEF'
374 37 38 39 41 42 43 44+
375 45 46
376 0423 90 A5 A7 A8 A4 A5 AD+ mesr db 'ђҐ§Ё¤Ґв гбЇҐи® ўлЈа㦥.'
377 E2 20 E3 E1 AF A5 E8+
378 AD AE 20 A2 EB A3 E0+
379 E3 A6 A5 AD 2E
380 =001A mesrlen=$-mesr
381 ;определение размера резидентной части
382 =033D endres equ $-mainproc
383 ;нерезидентная часть программы, инициализация
384 043D init:
385 ;проверка на ключ выгрузки
386 043D BB 0080 mov bx,80h
387 0440 prob:
388 0440 43 inc bx
389 0441 8A 27 mov ah,byte ptr [bx]
390 0443 80 FC 20 cmp ah,20h
391 0446 74 F8 je prob
392 0448 4B dec bx
393 0449 B9 0004 mov cx,unload_str_len
394 044C BE 055Fr lea si,unload_str
395 044F unload_loop:
396 044F 8A 27 mov ah,byte ptr [bx]
397 0451 3A 24 cmp ah,byte ptr [si]
398 0453 74 09 je m999
399 0455 80 EC 20 sub ah,20h
Turbo Assembler Version 3.1 26/11/04 10:49:21 Page 8
kurs.asm
400 0458 3A 24 cmp ah,byte ptr [si]
401 045A 74 02 je m999
402 045C EB 13 jmp ch_hlp
403 045E m999:
404 045E 43 inc bx
405 045F 46 inc si
406 0460 E2 ED loop unload_loop
407
408 0462 B8 C000 mov ax,0c000h
409 0465 CD 2F int 2fh
410 0467 3C FF cmp al,0FFh
411 0469 75 06 jne ch_hlp
412 ;подать сигнал о выгрузке в резидентную часть
413 046B B8 C001 mov ax,0c001h
414 046E CD 2F int 2fh
415 0470 C3 ret
416 ;проверка на ключ справки
417 0471 ch_hlp:
418 0471 B9 0004 mov cx,help_str_len
419 0474 BB 0081 mov bx,81h
420 0477 BE 055Br mov si,offset help_str
421 047A help_loop:
422 047A 8A 27 mov ah,byte ptr [bx]
423 047C 3A 24 cmp ah,byte ptr [si]
424 047E 75 0F jne not_help
425 0480 43 inc bx
426 0481 46 inc si
427 0482 E2 F6 loop help_loop
428 0484 BA 0563r lea dx,help_mes
429 0487 B9 00CF mov cx,help_mes_len
430 048A E8 01A5 call writeln
431 048D EB 5A jmp quit
432 ;установление обработчика прерывания 2F для проверки повторной загрузки.
433 ;проверка на установку:
434 048F not_help:
435 048F B8 C000 mov ax,0c000h
436 0492 CD 2F int 2fh
437 0494 3C FF cmp al,0FFh
438 0496 74 48 je installed
439 ;получение адреса старого обработчика прерывания 2fh
440 0498 B8 352F mov ax,352fh
441 049B CD 21 int 21h
442 ;сохранение этого значения в переменной old_2fh
443 049D 2E: 89 1E 040Fr mov word ptr old_2fh,BX
444 04A2 2E: 8C 06 0411r mov word ptr old_2fh+2,ES
445 ;установление нового обработчика прерывания 2fh
446 04A7 B8 252F mov ax,252fh
447 04AA BA 017Cr mov dx,offset new_2fh
448 04AD CD 21 int 21h
449 ;получение адреса старого обработчика прерывания 09h
450 04AF B8 3509 mov ax,3509h
451 04B2 CD 21 int 21h
452 ;сохранение этого значения в переменной old_09h
453 04B4 2E: 89 1E 040Br mov word ptr old_09h,BX
454 04B9 2E: 8C 06 040Dr mov word ptr old_09h+2,ES
455 ;установление нового обработчика прерывания 09h
456 04BE B8 2509 mov ax,2509h
Turbo Assembler Version 3.1 26/11/04 10:49:21 Page 9
kurs.asm
457 04C1 BA 0103r mov dx,offset new_09h
458 04C4 CD 21 int 21h
459 ;сообщение о том, что программа загружена
460 04C6 BA 0527r lea dx,str_start
461 04C9 B9 001B mov cx,str_start_len
462 04CC E8 0163 call writeln
463 ;выгрузить, оставив программу резидентной
464 04CF BA 043Dr lea dx,init
465 04D2 D1 EA D1 EA D1 EA D1+ shr dx,4
466 EA
467 04DA 42 inc dx
468 04DB B8 3100 mov ax,3100h
469 04DE CD 21 int 21h
470 ;выход в случае установки.
471 04E0 installed:
472 04E0 BA 0542r lea dx,str_inst
473 04E3 B9 0019 mov cx,str_inst_len
474 04E6 E8 0149 call writeln
475 04E9 B8 4C00 quit: mov AX,4c00h
476 04EC CD 21 int 21h
477 ;данные нерезидентной части программы
478 04EE 82 EB A3 E0 E3 A7 AA+ cant_unload2_msg db '‚лЈаг§Є १Ё¤Ґв Ґў®§¬®¦ !$'
479 A0 20 E0 A5 A7 A8 A4+
480 A5 AD E2 A0 20 AD A5+
481 A2 AE A7 AC AE A6 AD+
482 A0 21 24
483 050D 90 A5 A7 A8 A4 A5 AD+ unload_msg db 'ђҐ§Ё¤Ґв гбЇҐи® ўлЈа㦥.'
484 E2 20 E3 E1 AF A5 E8+
485 AD AE 20 A2 EB A3 E0+
486 E3 A6 A5 AD 2E
487 0527 90 A5 A7 A8 A4 A5 AD+ str_start db 'ђҐ§Ё¤Ґв гбЇҐи® § ЇгйҐ.',13,10
488 E2 20 E3 E1 AF A5 E8+
489 AD AE 20 A7 A0 AF E3+
490 E9 A5 AD 2E 0D 0A
491 =001B str_start_len=$-str_start
492 0542 90 A5 A7 A8 A4 A5 AD+ str_inst db 'ђҐ§Ё¤Ґв 㦥 § ЇгйҐ!!!',13,10
493 E2 20 E3 A6 A5 20 A7+
494 A0 AF E3 E9 A5 AD 21+
495 21 21 0D 0A
496 =0019 str_inst_len=$-str_inst
497 055B 20 2F 3F 0D help_str db ' /?',13
498 =0004 help_str_len=$-help_str
499 055F 20 2F 55 0D unload_str db ' /U',13
500 =0004 unload_str_len=$-unload_str
501 0563 84 A0 AD AD A0 EF 20+ help_mes db '„ п Їа®Ја ¬¬ - १Ё¤Ґв, ЇаҐ¤ § зҐл©' ,13,10
502 AF E0 AE A3 E0 A0 AC+
503 AC A0 20 2D 20 E0 A5+
504 A7 A8 A4 A5 AD E2 2C+
505 20 AF E0 A5 A4 AD A0+
506 A7 AD A0 E7 A5 AD AD+
507 EB A9 0D 0A
508 0591 A4 AB EF 20 A2 EB A2+ db '¤«п ўлў®¤ ўўҐаег нЄа ᮤҐа¦Ё¬®Ј® ॣЁбва®ў Їа®жҐбб®а .',13,10
509 AE A4 A0 20 A2 A2 A5+
510 E0 E5 E3 20 ED AA E0+
511 A0 AD A0 20 E1 AE A4+
512 A5 E0 A6 A8 AC AE A3+
513 AE 20 E0 A5 A3 A8 E1+
Turbo Assembler Version 3.1 26/11/04 10:49:21 Page 10
kurs.asm
514 E2 E0 AE A2 20 AF E0+
515 AE E6 A5 E1 E1 AE E0+
516 A0 2E 0D 0A
517 05CD 82 EB A2 AE A4 20 AE+ db '‚лў®¤ ®бгйҐбвў«пҐвбп б Ї®¬®ймо Є« ўЁиЁ F7.',13,10
518 E1 E3 E9 A5 E1 E2 A2+
519 AB EF A5 E2 E1 EF 20+
520 E1 20 AF AE AC AE E9+
521 EC EE 20 AA AB A0 A2+
522 A8 E8 A8 20 46 37 2E+
523 0D 0A
524 05F9 90 A5 A7 A8 A4 A5 AD+ db 'ђҐ§Ё¤Ґв ўлЈаг¦ Ґвбп ЇаЁ Ї®ўв®а®¬ § ЇгбЄҐ б Є«о箬 /U.',13,10
525 E2 20 A2 EB A3 E0 E3+
526 A6 A0 A5 E2 E1 EF 20+
527 AF E0 A8 20 AF AE A2+
528 E2 AE E0 AD AE AC 20+
529 A7 A0 AF E3 E1 AA A5+
530 20 E1 20 AA AB EE E7+
531 AE AC 20 2F 55 2E 0D+
532 0A
533 =00CF help_mes_len=$-help_mes
534 ;процедура для вывода строки на экран.
535 ;вход : cx - длина сообщения, dx - смещение.
536 0632 writeln proc
537 0632 B4 40 mov ah,40h
538 0634 BB 0001 mov bx,1
539 0637 CD 21 int 21h
540 0639 C3 ret
541 063A writeln endp
542 063A cseg ends
543 end mainproc
Turbo Assembler Version 3.1 26/11/04 10:49:21 Page 11
Symbol Table
Symbol Name Type Value
??DATE Text "26/11/04"
??FILENAME Text "kurs "
??TIME Text "10:49:21"
??VERSION Number 030A
@CPU Text 0101H
@CURSEG Text CSEG
@FILENAME Text KURS
@WORDSIZE Text 2
CANT_UNLOAD2_MSG Byte CSEG:04EE
CH_C000 Near CSEG:0183
CH_HLP Near CSEG:0471
CRLF Near CSEG:03E8
DUMP Near CSEG:0210
ENDI Near CSEG:017B
ENDRES Number 033D
HELP_LOOP Near CSEG:047A
HELP_MES Byte CSEG:0563
HELP_MES_LEN Number 00CF
HELP_STR Byte CSEG:055B
HELP_STR_LEN Number 0004
HOME Near CSEG:0172
HOME1 Near CSEG:01F2
INIT Near CSEG:043D
INSTALLED Near CSEG:04E0
L1 Near CSEG:01C1
M001 Near CSEG:03E5
M999 Near CSEG:045E
MAINPROC Near CSEG:0100
MESR Byte CSEG:0423
MESRLEN Number 001A
MY_AX Word CSEG:03F3
MY_BP Word CSEG:0401
MY_BX Word CSEG:03F5
MY_CS Word CSEG:0405
MY_CX Word CSEG:03F7
MY_DI Word CSEG:03FD
MY_DS Word CSEG:0403
MY_DX Word CSEG:03F9
MY_ES Word CSEG:0407
MY_SI Word CSEG:03FB
MY_SP Word CSEG:03FF
MY_SS Word CSEG:0409
NEW_09H Near CSEG:0103
NEW_2FH Near CSEG:017C
NL Near CSEG:03E1
NOT_HELP Near CSEG:048F
NOT_MY Near CSEG:018B
OLD_09H Dword CSEG:040B
OLD_2FH Dword CSEG:040F
PRINT_REGS Near CSEG:0161
PROB Near CSEG:0440
PUTCH Near CSEG:03CA
QUIT Near CSEG:04E9
QUIT1 Near CSEG:0190
Turbo Assembler Version 3.1 26/11/04 10:49:21 Page 12
Symbol Table
STR_INST Byte CSEG:0542
STR_INST_LEN Number 0019
STR_START Byte CSEG:0527
STR_START_LEN Number 001B
TABLE1 Byte CSEG:0413
TRAN Near CSEG:01F5
UNLOAD_LOOP Near CSEG:044F
UNLOAD_MSG Byte CSEG:050D
UNLOAD_STR Byte CSEG:055F
UNLOAD_STR_LEN Number 0004
WRITELN Near CSEG:0632
Groups & Segments Bit Size Align Combine Class
CSEG 16 063A Para none CODE