Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Топ:
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Интересное:
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Дисциплины:
2017-11-17 | 361 |
5.00
из
|
Заказать работу |
|
|
Программа на языке ассемблера представляет собой текст разбитый на строки. Каждая строка либо соответствует машинной команде, либо является директивой ассемблера или макрокомандой. Команды и директивы можно набирать как большими, так и малыми латинскими буквами. Русские буквы можно использовать только в комментариях.
<имя сегмента> segment
команды или директивы
<имя сегмента> ends
[
<имя сегмента> segment
команды или директивы
<имя сегмента> ends ]
end <метка входа в программу>
Директива end < метка входа в программу> отмечает конец текста программы и указывает ассемблеру, где завершить трансляцию. Поэтому директива end должна присутствовать в каждой программе.
< метка точки входа > указывает инструкцию, с которой должно начинаться выполнение программы.
Каждая программа содержит сегменты данных и команд, но минимально должна содержать сегмент команд.
Строка программы, в общем случае, состоит из четырех полей:
Поле метки | Поле операции | Поле операндов | Поле комментария |
M1: | Add | AX, BX | ; сложение |
Имена данных, процедур, сегментов или метки команд могут состоять не более чем из 31 латинских букв и цифр, причем первым символом должна быть обязательно буква. Большие и маленькие буквы не различаются.
Директивы ассемблера
Директивой называется команда транслятору для выполнения определённых данной директивой действий, сама директива в текст транслированной программы не включается.
1. Директива задания исходных данных:
[<имя>] 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', ….
2. Директива использования сегментных регистров по умолчанию:
· assume <имя сегментного регистра>: <имя сегмента или nothing >[, <имя сегментного регистра>: <имя сегмента или nothing >, …]
Как отмечалось выше, для задания адреса в памяти требуется два регистра, один из них всегда сегментный, поэтому в команде при обращении к памяти приходится набирать имя сегментного регистра, часто одного и того же. Директива assume позволяет избежать этого. Транслятор сопоставляет имя массива данных и автоматически подставляет сегментный регистр, заданный для сегмента, в котором расположен данный массив. Слово nothing показывает, что данный сегментный регистр не адресуется по умолчанию. Директива assume может использоваться в программе при каждом изменении сегмента для данного сегментного регистра, но обязательно в начале сегмента, где она задаёт по умолчанию сегментный регистр для сегмента кодов.
|
Например,
assume cs:code, ds:data1, es:nothing
Здесь code и data1 – имена сегментов кодов и данных, соответственно.
Режимы адресации
1. Регистровая прямая - операнд находится в регистре.
Обозначение - <регистр>,
< регистр > - АХ, ВХ, СХ, DX, SI, DI, BP, SP, AL, BL, СL, DL, AH, BH, CH, DH.
Пример:
mov АХ,SI; переслать содержимое регистра SI в регистр АХ.
2. Непосредственная -непосредственный операнд (константа) присутствует в команде.
Обозначение - < константное выражение >.
Пример:
mov AX, 093Ah; занести константу 093Ah в регистр АХ.
3. Прямая - исполнительный адрес операнда присутствует в команде.
Обозначение - < переменная >+/-< константное выражение >.
Пример:
mov AX, WW; переслать в АХ слово памяти с именем WW
mov BX, WW+2; переслать в ВХ слово памяти отстоящее от переменной с именем WW на 2 байта.
4. Регистровая косвенная - регистр содержит адрес операнда.
Обозначение - [< регистр >],
< регистр > - ВХ. ВР. SI, DI.
Пример:
mov [ BX ], CL; переслать содержимое регистра CL по адресу, находящемуся в регистре ВХ.
5. Регистровая относительная - адрес операнда вычисляется как сумма содержимого регистра и смещения.
Обозначение - < переменная >[< регистр >] или [< регистр >]< константное выражение >,
< регистр > - SI или DI индексная адресация, ВХ или ВР - базовая адресация.
Пример:
mov АХ, WW[SI]; переслать в АХ слово из памяти, адрес которого вычисляется как сумма содержимого регистра SI и смещения WW.
6. Индексно - базовая - адрес операнда вычисляется как сумма содержимых базового и индексного регистров и смещения.
Обозначение - [< базов. регистр>][< индексн. регистр>] или <переменная >[<базов. регистр >][< индекс. регистр >] или [<базов. регистр >][< индекс. регистр >]< константное выражение,
где < индекс. регистр > - SI или DI, < базов. Регистр > - ВХ или ВР.
Пример:
mov [BX+ SI+ 2], CL; переслать содержимое регистра CL по адресу, вычисляемому как сумма содержимого регистров ВХ, SI и константы 2.
|
|
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!