Директивы присваивания атрибута данным
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Эти директивы (таблица 2.4) позволяют изменить у операнда атрибут типа (BYTE, WORD, DWORD) или атрибут дистанции (SHORT, NEAER или FAR). Ими можно воспользоваться для доступа к байтам в строках слов, или наоборот, к словам в строке байт. Например,  имеем строку десятичных слов;     TW DW 4564,6781,1234

Требуется изменить третий байт в этой строке  (67) на число 99. Выполним  команду      Mov WORD PTR TW +3, 99

 После выполнения этой команды строка  примет следующий вид

       TW DW  4567, 9981, 1234

Табилица 2.4-Директивы присваивания атрибута данным

PTR SHORT Формат: тип PTR выражение; Изменяет атрибуты типа                      данных. Тип – новый атрибут, выражение-                      идентификатор, чей атрибут должен быть                      изменён. В качестве типа  данных                            используются имена - BYTE, WORD,                        DWORD, QWORD, TBYTE.  Формат: JMP SHORT метка; Изменяет атрибут метки                           NEAR команды перехода JMP и указывает                         что переход осуществляется на расстояние не                                  более  чем на -128 или +127 байт.

Директивы возвращающие значения

    Наиболее распространены две директивы: offset  и $ (таблица 2.5).

Директива применяется в тех случаях, когда необходимо занести в регистр адрес данных, а не сами данные. Например, команда      Mov AX,offset TW

заносит в регистр АХ адрес таблицы слов TW.

     Директива $ ставится в конце строки символов. Её присутствие обязательно, так как она определяет количество выводимых символов.

    Таблица 2.5- Директивы возвращающие значения

Offset   $ Формат: offset выражение ; Записывает в регистр значение смещения адреса указанного выражения. Выражение может быть метка, переменная, имя сегмента или иное символьное имя. Формат: $ ; Записывает в регистр значение счётчика текущей ячейки.

 

2.4.5 Директивы задания набора команд

По умолчанию ассемблеры используют набор команд процессора 8086. Для того чтобы ассемблер разрешил использование команд более поздних версий процессоров и команд расширений, используются следующие директивы:

- .8086 – разрешены команды процессора 8086;

- .386 – разрешены непривилегированные команды МП 80386;

- .586р - разрешены все команды МП 80586 (Pentium);

- .686 - разрешены непривилегированные команды Р6 (Pentium Pro);

- .686 p - разрешены все команды Р6 (Pentium Pro).

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

Имеются матрица байт Tabb (3´2) и константа С.

× C
Вычислить        b 11 x b12 + b13     

                            b21 + b22 + b23            

 

Где: b11 = 26, b12 = 44, b13 = 02; Элементы матрицы

       b21 = 08, b22 = 22, b 23 = 32; байт Tabb (2x3).

       С =  6; константа.

Программа:

.MODEL SMALL; Задаём малую модель структуры программы.

.STACK 300H; Определяем размер сегмента стэка - 300Н (768 байт).

.DATA; Задаём начало и описываем сегмент данных.

Text DB  ‘Это пример программы $‘; Этот текст выведем на экран.

 C     EQU 6; Зададим байтовую константу под именем C.

Tabb db 26,44,14; Создадим таблицу десятичных байт

    Db 08,22,32; размером 2 х 3.

Y dw 3 dup (?); Сюда запишем итог вычислений.

.CODE; Задаём начало и описываем  сегмент команд.

 str: mov AX, @data; Загрузим адрес сегмента данных в АХ.

     mov DS, AX; Перешлём его в регистр DS (инициализируем DS).

     mov AH,09H; Функция DOS 09Н вывода текста на экран.

     lea DX,text; Перешлём в DX адрес выводимого текста.

     int 21H; Команда вызова DOS.

     Mov al,tabb; Перешлём b11 = 26 в регистр AL.

     Mul [tabb+1]; Умножим содержимое AL на b12, теперь в АХ  0478H.

     Add аl, tabb +2 ]; Сложим произведение с b13, теперь в АХ 0486H.    

     Mov bl, [tabb +3]; Перешлём b21 = 08 в регистр bl.                

     Add bl, [tabb + 4]; Сложим b 21 с b22, теперь в bl 30 ( 1EH).

     Add bl, [tabb + 5]; Сложим сумму с b 23, теперь в bl 62 ( 3EH).

     Div bl; Разделим  АХ на сумму. Частное в al=18(12H), остаток в ah.

     Mul С; Умножим al на С = 6. Теперь  в  АХ 108 (6CH).

     Mov Y,ax; Перешлём произведение в ячейку Y.

     mov AH,4CH;Функция DOS завершения программы.

     mov AL,00H; код  (0 ) успешного завершения программы.

     int 21H; Вызов DOS.

end str ; Конец программы с указанием точки входа.

При написании исходного текста программы, обратите внимание на то чтобы файл с текстом программы имел расширение .ASM, это расширение указывает транслятору что программа написана на языке ассемблера. Приведенная программа выполнена в ЕХЕ формате. Программы в этом формате могут иметь несколько сегментов. Обычно, при написании простых программ, используется малая модель структуры программ, которая подразумевает использование трех сегментов памяти. Один из сегментов отводится под стек, размер которого задается произвольно, но не меньше 128 байт. Если не задать размер стека, то операционная система определит его размер в 1024 байта. В приведенной программе стек определен в 300Н, то есть 768 байт. Необходимо обратить внимание, что программы в ЕХЕ формате должны начинаться с инструкций инициализации сегментного регистра DS, а заканчиваться тремя командами завершения программы и выхода в DOS. После написания и сохранения программы с ней необходимо провести операцию трансляции. Трансляцию программ удобно проводить с помощью менеджера программ FAR. Подробно последовательность действия при трансляции и запуске программ описана в главе 4. 

Дата: 2018-11-18, просмотров: 568.