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

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

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

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

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

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

от 25%

Подписываем

договор

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

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

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

;¦               ОСНОВНЫЕ ИНСТРУКЦИИ ПРОГРАММЕ  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. Сущность государства1
2. а Такой необычный на первый взгляд синтез противоположных друг другу теорий на самом деле был распространен
3. ТЕМАТИКА КУРСОВИХ РОБІТ 1
4. по теме - ldquo;Адаптация цены к условиям рынкаrdquo; Выполнил- Емельянов Д
5. Time dmirer of the outstnding work tht your orgniztion hs done in the mrket I prticulrly enjoyed hving the opportunity to see how your compny functions from the inside.
6.  Вычитающий последовательный двоичный счетчик
7. Достопримечательности Гpенландии
8. мировоззрение был введен немецким философом Иммануилом Кантом
9. Археи и их особенности
10. Реферат- Управління інноваційним розвитком підприємств