Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Директивы ассемблера. Ассемблер имеет ряд операторов, которые позволяют управлять процессом ассемблирования и формирования листинга




Ассемблер имеет ряд операторов, которые позволяют управлять процессом ассемблирования и формирования листинга. Эти операторы называются псевдокомандами или директивами. Они действуют только в процессе ассемблирования программы и не генерируют машинных кодов.

Директивой называется команда транслятору для выполнения определённых данной директивой действий, сама директива в текст транслированной программы не включается.

Директива задания исходных данных:

[<имя>] d <тип> <константа>[,<константа>, <константа>,...]

· <имя> - имя массива данных, по которому к ним можно обратиться из команды;

· d (define)– определяет начало массива данных;

· <тип> - размер констант, входящих в массив:

b байт,
w слово(два байта),
d двойное слово,
q учетверённое слово,
t десять байтов;

· <константа> - числовой или символьный элемент массива дан­ных.

В ассемблере используется несколько типов констант:

десятичные – последовательность цифр от 0 до 9;

шестнадцатеричные – последовательность шестнадцатеричных цифр от 0 до 9 и от А или а до F или f завершающаяся буквой H или h, первой должна быть десятичная цифра или 0;

восьмеричные – последовательность цифр от 0 до 7, завершающаяся буквами Q или q;

двоичные – последовательность цифр от 0 до 1, завершающаяся буквой B или b;

символьные – символ или группа символов, заключённые в кавычки.

· знак? – используется для резервирования места для данных.

· Например,

· data1 db 123, 0a2h, 75q, 110011b, 'a', 'пример',?,?

· Для заполнения больших массивов используется директива dup (duplicate):

· <число повторений> dup (<образец>)

· <число повторений> - задаёт количество размещаемых в памяти данных, определяемых образцом;

· <образец> - любая допустимая группа констант.

· Например,

· data2 db 23 dup(1, 2, 'x')

· выделяет в памяти 23 · 3=69 байтов и заносит в них образец 1, 2, 'x', 1, 2, 'x', ….

Директива использования сегментных регистров по умолчанию:

assume <имя сегментного регистра>: <имя сегмента или nothing >[, <имя сегментного регистра>: <имя сегмента или nothing >, …]

Для задания адреса в памяти требуется два регистра, один из них всегда сегментный, поэтому в команде при обращении к памяти приходиться набирать имя сегментного регистра, часто одного и того же. Директива assume позволяет избежать этого. Транслятор сопоставляет имя массива данных и автоматически подставляет сегментный регистр, заданный для сегмента, в котором расположен данный массив. Слово nothing показывает, что данный сегментный регистр не адресуется по умолчанию. Директива assume может использоваться в программе при каждом изменении сегмента для данного сегментного регистра, но обязательно в начале сегмента, где она задаёт по умолчанию сегментный регистр для сегмента кодов.

Например,

assume cs:code, ds:data1, es:nothing

Здесь code и data1 – имена сегментов кодов и данных, соответственно.

Для простых программ, содержащих по одному сегменту для кода, данных и стека в трансляторы MASM и TASM ввели возможность использования упрощенных директив сегментации. Но здесь возникла проблема, связанная с тем, что необходимо было как-то компенсировать невозможность напрямую управлять размещением и комбинированием сегментов. Для этого совместно с упрощенными директивами сегментации стали использовать директиву указания модели памяти MODEL, которая частично стала управлять размещением сегментов и выполнять функции директивы ASSUME (поэтому при использовании упрощенных директив сегментации директиву ASSUME можно не использовать). Эта директива связывает сегменты, которые в случае использования упрощенных директив сегментации имеют предопределенные имена, с сегментными регистрами (хотя явно инициализировать ds все равно придется).

Использование упрощенных директив сегментации.model small;модель памяти.data;сегмент данныхmessage db 'Введите две шестнадцатеричные цифры,$'.stack;сегмент стека db 256dup ('?');сегмент стека.code;сегмент кодаmain;начало процедуры main mov ax,@data;заносим адрес сегмента данных в регистр ax mov ds,ax;ax в ds;далее текст программы mov ax,4c00h;пересылка 4c00h в регистр ax int 21h;вызов прерывания с номером 21hend main;конец программы с точкой входа main

Обязательным параметром директивы MODEL является модель памяти. Этот параметр определяет модель сегментации памяти для программного модуля. Предполагается, что программный модуль может иметь только определенные типы сегментов, которые определяются упомянутыми нами ранее упрощенными директивами описания сегментов.




Поделиться с друзьями:


Дата добавления: 2014-10-15; Просмотров: 579; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.