Listing (КП - резидентный загрузчик), страница 4
Описание файла
Файл "Listing" внутри архива находится в следующих папках: КП - резидентный загрузчик, Резидентный загрузчик. Текстовый-файл из архива "КП - резидентный загрузчик", который расположен в категории "". Всё это находится в предмете "системное программирование" из 5 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "системное программирование" в общих файлах.
Просмотр 4 страницы текстового-файла онлайн
576 ;2D это мультиплексоное прерывание, используемое для организации контроля
577 ;за загруженными резидентами.
578 03DF int2Dh_handler proc far
579 03DF EB 11 jmp short actual_int2Dh_handler
580
581 03E1 ???????? old_int2Dh dd ?
582 03E5 424B dw 424Bh
583 03E7 00 db 00h
584 03E8 E9 FD5A jmp hw_reset
585 03EB 07*(00) db 7 dup (0)
586
587 03F2 actual_int2Dh_handler:
588 03F2 80 FC db 80h,0FCh ;начало команды CMP+
589 ah, число (в мнемокодах)
590 03F4 ?? mux_id db ? ;идентификатор
591 03F5 74 0790 90 je its_us ;если вызываютэтот+
592 резидент, то этот вызов обрабатывается
593 03F9 2E: FF 2E 03E1r jmp dword ptr cs:old_int2Dh ;иначе, управление передается в +
594 старыйобработчик
595
596 03FE its_us:
597 03FE 3C 02 cmp al,02h ;если номер функции+
598 больше2
599 0400 73 1F90 90 jae int2Dh_no ;то эта функция не +
600 поддерживаетсяэтим резидентом
601 0404 98 cbw +
602 ;преобразоватьбайт alв словоax
603 0405 8B F8 mov di,ax ;переместить этот +
604 номер в di
605 0407 D1 E7 shl di,1 ;и умножить на2, +
606 т.к. jumptableтаблицаслов
607 0409 2E: FF A5 040Er jmp word ptr cs:jumptable[di];косвенный переход наобработчики +
608 функций
609 +
610 ;используется di в силу архитектурных особенностей процессора
611 ;так же +
612 можно было использовать bx
613
614 040E 0412r jumptable dw offsetint2Dh_00 ;таблица переходов
615 0410 0421r dw offsetint2Dh_no
616
617
618 0412 int2Dh_00: ;функция проверки +
619 присутствия резидента в памяти
620 0412 07 pop es
621 0413 1F pop ds +
622 ;выталкивает из стека лишние данные
623 0414 61 popa
624
625 0415 B0 FF mov al,0FFh ;этот номер занят
626 0417 B9 0100 mov cx,0100h ;номерверсии 1.0
627 041A 0E push cs ;использует cs, +
Turbo Assembler Version 3.1 26/12/02 04:09:58 Page 12
loader.ASM
628 т.к. ds и es неинициализированны
629 041B 5A pop dx
630 041C BF 04DDr mov di,offset amis_sign ;в dx:di - адрес +
631 AMIS-сигнатуры
632
633 041F 9D popf
634
635 0420 CF iret
636
637 0421 int2Dh_no: ;все +
638 неподдерживаемые функции
639 0421 07 pop es
640 0422 1F pop ds +
641 ;выталкивает из стека лишние данные
642 0423 61 popa
643
644 0424 B0 00 mov al,00h ;функция не +
645 поддерживается
646
647 0426 9D popf
648
649 0427 CF iret
650
651 0428 int2Dh_handler endp ;конецобработчика
652
653 ;--------------------------------------- --------
654 ;данные
655 ;--------------------------------------- --------
656 0428 0D 0A49 4F 20 6F 70+ msg_er1 db cr,lf,'IO operation failed while loading +
657 65 7261 74 69 6F 6E+ Application 1'
658 20 6661 69 6C 65 64+
659 20 7768 69 6C 65 20+
660 6C 6F61 64 69 6E 67+
661 20 4170 70 6C 69 63+
662 61 7469 6F 6E 20 31
663 =0031 msg_er1_len equ $-msg_er1
664 0459 0D 0A49 4F 20 6F 70+ msg_er2 db cr,lf,'IO operation failed while loading +
665 65 7261 74 69 6F 6E+ Application 2'
666 20 6661 69 6C 65 64+
667 20 7768 69 6C 65 20+
668 6C 6F61 64 69 6E 67+
669 20 4170 70 6C 69 63+
670 61 7469 6F 6E 20 32
671 =0031 msg_er2_len equ $-msg_er2
672 048A 0D 0A54 68 65 20 70+ msg_unld db cr,lf,'The program hasbeen successfully unloaded!'
673 72 6F67 72 61 6D 20+
674 68 6173 20 62 65 65+
675 6E 2073 75 63 63 65+
676 73 7366 75 6C 6C 79+
677 20 756E 6C 6F 61 64+
678 65 6421
679 =002D msg_unld_len equ $-msg_unld
680 04B7 0D 0A54 68 65 20 70+ msg_unld_err db cr,lf,'The program cannot be unloaded now!'
681 72 6F67 72 61 6D 20+
682 63 616E 20 6E 6F 74+
683 20 6265 20 75 6E 6C+
684 6F 6164 65 64 20 6E+
Turbo Assembler Version 3.1 26/12/02 04:09:58 Page 13
loader.ASM
685 6F 7721
686 =0026 msg_unld_err_len equ $-msg_unld_err
687 ;--------------------------------------- --------
688 04DD 54 5352 5F 45 58 45+ amis_sign db "TSR_EXE_" ;AMIS-сигнатура, по ней +
689 5F будет идентифицироваться резидент
690 04E5 5F 4C4F 41 44 45 52+ db "_LOADER_" ;послеего загрузки+
691 5F в память
692
693 04ED 09 amis_hooklist db 09h ;AMIS:список перехваченных+
694 прерываний
695 04EE 0146r dw offset int09h_handler
696 04F0 2D db 2Dh
697 04F1 03DFr dw offset int2Dh_handler
698 ;-----------------------Exec Parameters Block
699 04F3 0000 EPB dw 0; 0000 - используем текущее окружение
700 04F5 0509r dw OFFSETCMD; указатель на CMD
701 04F7 0000 dw 0;
702 04F9 050Br dw OFFSETFCB1; указатель на FCB1
703 04FB 0000 dw 0;
704 04FD 051Br dw OFFSETFCB2; указатель на FCB2
705 04FF 0000 dw 0;
706 0501 03C6r dw OFFSETRest; указатель на Rest
707 0503 0000 dw 0;
708 0505 03C6r dw OFFSETRest; указатель на Exit
709 0507 0000 dw 0;
710 0509 00 0D CMD db 0,13
711 050B 10*(00) FCB1 db 16 DUP(0)
712 051B 10*(00) FCB2 db 16 DUP(0)
713
714 052B 45 5845 31 2E 45 58+ Exe1Prog db 'EXE1.EXE',0
715 45 00
716 0534 45 5845 32 2E 45 58+ Exe2Prog db 'EXE2.EXE',0
717 45 00
718
719 053D 0000 handle dw 0
720
721 053F 20*(00) header db 32 DUP(0) ;первые 32-байта exe-файла
722
723 055F 00 is_app_working db 0
724 0560 00 is_haveto_work db 0
725 0561 0000 which_app dw 0 ;какойфайл грузить+
726 0 - exe1.exe, не 0 - exe2.exe
727
728 0563 ???????? in_dos_addr dd ?
729
730 0567 ???? app_ss dw ?
731 0569 ???? app_sp dw ?
732
733
734 056B 0240*(????) pr_stack dw 240h dup (?)
735
736 09EB label tsr_end
737
738 ;Инициализационная часть. Устанавливает резидент в памяти, а потом удаляет себ
739 09EB initialize proc near
740 09EB 33 C9 xor cx, cx ; проверям наличие +
741 ключейв команодной
Turbo Assembler Version 3.1 26/12/02 04:09:58 Page 14
loader.ASM
742 09ED 8A 0E0080r mov cl, cmd_line_len ; строке
743 09F1 BF 0081r lea di, cmd_line
744 09F4 B0 20 mov al, ' '
745 09F6 F3> AE repe scasb
746
747 09F8 74 10 jz short no_param
748
749 09FA 81 7DFF 3F2F cmp word ptr [di-1], '?/'
750 09FF 75 09 jne short no_param
751
752
753 0A01 B9 0068 mov cx,offset msg_abt_len
754 0A04 BA 0ABAr lea dx,msg_abt
755 0A07 E8 F733 call pmsg ;выводсообщения о +
756 программе
757
758 0A0A no_param:
759 0A0A B4 34 mov ah,34h
760 0A0C CD 21 int 21h
761
762 0A0E 89 1E0563r mov word ptr [in_dos_addr],bx