Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

; ОСНОВНЫЕ ИНСТРУКЦИИ ПРОГРАММЕ SSEMBLER

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 2.6.2024

;+----------------------------------------------------------------------------+

;¦               ОСНОВНЫЕ ИНСТРУКЦИИ ПРОГРАММЕ  ASSEMBLER                     ¦

;+----------------------------------------------------------------------------+

;************************* Программа Простой Драйвер *************************

;Col.1 _____________________________  - Поле меток и имен переменных

; ¦       Col.2 ______________________  - Поле (псевдо)оператора (директивы)

; ¦        ¦        Col.3 ______________  - Поле операндов

; ¦        ¦         ¦        Col.4 ______  - Поле комментариев

;+------+ +-------+ +-------+ +------------+

cseg     SEGMENT   PARA      PUBLIC 'CODE'

;  ¦         ¦        ¦           ¦       +-- Сообщает ASSM, что сегмент содер-

;  ¦         ¦        ¦           ¦           жит команды.

;  ¦         ¦        ¦           +---------- Директива, означает  возможность

;  ¦         ¦        ¦                       обращения к сегменту кода из дру-

;  ¦         ¦        ¦                       гой программы.

;  ¦         ¦        +---------------------- Предписывает ASSM выровнять этот

;  ¦         ¦                                сегмент на границу параграфа (16

;  ¦         ¦                                байт).

;  ¦         +------------------------------- Директива сообщает ASSM об опре-

;  ¦                                          делении блока памяти до 64 Кб,

;  ¦                                          размер которого ASSM вычислит.

;  +----------------------------------------- Метка, назначенная сегменту, вы-

;                                             бирается произвольно.

;_____________________________________________________________________________

simple    PROC      FAR

;  ¦         ¦        ¦

;  ¦         ¦        +---------------------- Сообщает ASSM, что процедура мо-

;  ¦         ¦                                жет  находиться в любой области

;  ¦         ¦                                памяти.

;  ¦         +------------------------------- Директива, означающая начало ос-

;  ¦                                          новной процедуры.

;  +----------------------------------------- Имя процедуры, выбирается произ-

;                                             вольно.

;_____________________________________________________________________________

         ASSUME    CS:CSEG,DS:CSEG,ES:CSEG

;            ¦     +-----------------------+  Регистры   КОДА,  ДАННЫХ,

;            ¦                +-------------- и ДОПОЛНИТЕЛЬНОГО СЕГМЕНТА

;            ¦                                проц. X86 в одном сегменте

;            +------------------------------- этой директивой адресуют эле-

;                                             менты внутри означенного сег-

;                                             мента CSEG.

;_____________________________________________________________________________

;         ORG   100H

;          ¦   +-----+                        256 (100H) или другое количест-

;          ¦      +-------------------------- во  байт  резервируются  перед

;          ¦                                  началом программы...

;          +--------------------------------- этой директивой,  она же связы-

;                                             вает метку с абсолютным адресом

;                                             (100Н - для .COM-файла)

;_____________________________________________________________________________

;+---------------------------------------------------------------------------+

;¦                         Начало основной процедуры                         ¦

;+---------------------------------------------------------------------------+

;

begin:

;  ¦                                          Метка (произвольна),  сообщает

;  +----------------------------------------- ASSM о начале выполнения прог-

;                                             раммы  с  данного  адреса  или

;                                             просто фиксирует начальный ад-

;                                             рес при написании .SYS - прог.

;_____________________________________________________________________________

;+---------------------------------------------------------------------------+

;¦                     Объявление и инициализация данных                     ¦

;+---------------------------------------------------------------------------+

;¦             DB      (Размер: 1 байт, байты)                               ¦

;¦             DW      (Размер: 1 слово)                                     ¦

;¦             DD      (Размер: 1 двойное слово)                             ¦

;¦             DQ      (Размер: 2 двойных слова)                             ¦

;¦             DF      (Размер: 6 байт, дальний указатель для 80386)         ¦

;¦             DP      (Размер: 6 байт, дальний указатель для 80386)         ¦

;¦             DT      (Размер: 10 байт)                                     ¦

;+---------------------------------------------------------------------------+

;

;********      Заголовок устройства для DOS      *****************************

next_dev       DD   -1         ;Других драйверов нет   (Размер: 1 двойное слово)

attribute      DW   8000H      ;Символьное устройство  (Размер: 1 слово)

strategy       DW   dev_strat  ;Адрес 1-го вызова DOS (Размер: 1 слово)

interrupt      DW   dev_int    ;Адрес 2-го вызова DOS  (Размер: 1 слово)

dev_name       DB   'SIMPLE$ ' ;Имя драйвера - точно   (Размер: 1 байт, байты)

;                   +12345678+- 8 символов (если меньше добавить пробелы)

;********      Рабочее пространство для драйвера    **************************

rh_off         DW   ?;          Смещение заголовка запроса

rh_seg         DW   ?;          Сегмент заголовка запроса

msg_1          DB   07H;---------- Заголовок запроса --------+

              DB   'SIMPLE SYMBOL DRIVER !'

              DB   0DH,0AH,07H,'$'

;********      Процедура стратегия     ***************************************

dev_strat:                      ;      Первый вызов из DOS: сохранить

              MOV  CS:rh_seg,ES;      СЕГМЕНТ и

              MOV  CS:rh_off,BX;      СМЕЩЕНИЕ заголовка запроса

              RET                              +---------------+ !!!

;********      Процедура прерывание    ***************************************

dev_int:                   ;           Второй вызов из DOS: сохранить

              CLD         ;           состояние регистров процессора

              PUSH DS     ;           при входе в процедуру

              PUSH ES

              PUSH AX

              PUSH BX

              PUSH CX

              PUSH DX

              PUSH DI

              PUSH SI

;_______________________________;      Переход по команде, переданной в

;                                      заголовке запроса:

              MOV  AL,ES:[BX]+2;      получить код команды,

              CMP  AL,0        ;      проверить на 0 (инициализация),

              JNZ  exit_3      ;      нет - выход по ошибке.

              ROL  AL,1        ;      Получить смещение в таблице,( Х 2)

              LEA  DI,cmdtab   ;      адрес таблицы команд,

              MOV  AH,0        ;      сбросить старшие разряды AH,

              ADD  DI,AX       ;      прибавить сдвиг в таблице.

              JMP  WORD PTR [DI];     Косвенный переход.

                   +----------------- (Обращение к слову, а не к байту)

;________________________________ Таблица команд _____________________________

;                                      Поле команд статического поля запроса

;                                      содержит выполняемую функцию

cmdtab         LABEL     BYTE;--- символьное имя типа байт (байты)

              DW        init   ;      Инициализация (адрес процедуры)

;_____________________________________________________________________________

;+---------------------------------------------------------------------------+

;¦                            Локальные процедуры                            ¦

;+---------------------------------------------------------------------------+

;________________________________ Инициализация ______________________________

initial   PROC    NEAR     ;--- ближняя процедура

;

         LEA     DI,msg_1 ;         Загрузить адрес сообщения,

         MOV     AH,0EH   ;         Функция BIOS - ТЕЛЕТАЙП

get_sym:

         MOV     AL,[DI]

         CMP     AL,24H   ;         проверка на конец строки"$"

         JZ      SHORT ex_ini

         INT     10H      ;         вызвать функцию BIOS,

         INC     DI

         JMP     SHORT get_sym

;                                              

ex_ini:                      ;            В заголовок запроса поместить адрес

         LEA  AX,fin        ;            конца нашей резидентной программы !

         MOV  ES:WORD PTR [BX]+0EH,AX;   -  по смещению 0ЕН  offset

         MOV  ES:WORD PTR [BX]+10H,CS;   -  по смещению 10Н segment

         RET            ; возврат.

;

initial   ENDP             ;

;_____________________________________________________________________________

;____________________________ Обработка команд DOS ___________________________

;                             Команда = 0 ,  инициализация.

init:       CALL initial     ;         Вывод сообщения

           JMP  exit_2      ;         Выход

;_____________________________________________________________________________

;+---------------------------------------------------------------------------+

;¦                              Выход по ошибке                              ¦

;+---------------------------------------------------------------------------+

;                            Установить флаги    СДЕЛАНО=1,ОШИБКА=1,

exit_3:                    ; неизвестная команда:   КОД ОШИБКИ=3

         MOV  ES:WORD PTR 3[BX],8103H;

         JMP  exit_1                 ; Восстановить среду

;_____________________________________________________________________________

;+---------------------------------------------------------------------------+

;¦                         Обычный выход из драйвера                         ¦

;+---------------------------------------------------------------------------+

;                            Реализует 3 действия:

;                                        2 - состояние СДЕЛАНО без ошибки;

;                                        1 - восстановление ES:BX;

;                                        0 - восстановление регистров и выход.

exit_2:   MOV  ES:WORD PTR 3[BX],0100H;      СДЕЛАНО=1 без ошибки;

exit_1:   MOV  BX,CS:rh_off           ;

         MOV  ES,CS:rh_seg           ;

exit_0:   POP  SI

         POP  DI

         POP  DX

         POP  CX

         POP  BX

         POP  AX

         POP  ES

         POP  DS

         RET

;_____________________________________________________________________________

;+---------------------------------------------------------------------------+

;¦                           Секция конца программы                          ¦

;+---------------------------------------------------------------------------+

;

simple    ENDP

;  ¦       +--------------------------------- Директива конца процедуры

;  ¦

;  +----------------------------------------- Метка закрываемой процедуры

;

cseg      ENDS

; ¦        +--------------------------------- Директива конца сегмента

; ¦

; +------------------------------------------ Метка закрываемого сегмента

;

         END  begin

;          ¦     +--------------------------- Метка основной процедуры

;          ¦

;          +--------------------------------- Директива конца основной

;                                             процедуры (сообщает ASSM,  что

;                                             программа начинает выполняться

;                                             с адреса, определяемого меткой

;                                             begin.

;********************************* END_DRIVER ********************************




1. Она оказывает специфическое не заменимое ничем другим влияние на развитие личности любого человека и особ
2. Тема- ОСНОВИ ЕКОЛОГІЇ Лекційні модулі- 1
3. Контрольная работа- Нормирование точности червячной передачи
4. Терроризм определение и формы
5. то мимолётных совпадений какихто неожиданных хоть и не очень желанных встреч
6. 4 Примерные вопросы к экзамену по Экологическому праву Компоненты окружающей среды как объекты природ
7. Work. К концу недели мы закончим нашу работу.
8. Лекция 27 февраля Нормы права Понятие отличительные особенности Структура правовой нормы Форма
9. и эукариот Основное различие между про и эукариотами состоит в том что у эукариот РНКполимераза во время
10. Заданием на данный проект явилисль- схема прилегающей сети суточный график использования нагрузки хара
11. Твоpение Иоанна Дамаскина.
12. Введение Примеры листов опорных сигналов выводы и рекомендации к ним
13. Аренда и виды договоров аренды в гражданском законодательстве РФ
14. тебе туда твое время на земле прошл
15. КУПЛИПРОДАЖИ РОЗНИЧНАЯ КУПЛЯПРОДАЖА
16. Статья 1 Отношения регулируемые банковским законодательством Отношения регулируемые банковским закон
17. Деятельность бизнес-ангелов в Европе
18. Особливості вуглеводного метаболізму та кисневого бюджету головного мозку у хворих з декомпенсованим цукровим діабетом та його патогенетична інтенсивна терапія
19. Князь ботаников
20. подх Пресс Среда- Становая 3 подх Тяга блока за голову или к груди 4 подх Тяга штанги в н