Государственное Образовательное Учреждение высшего профессионального образования Московский Авиационный Институт Государственный Технический Университет "маи" кафедра 304. конспект
Вид материала | Конспект |
СодержаниеСтековые команды Конструкции языка Ассемблера Элементарные конструкции Fatal db 13 Lad segment Lab:add ax,dx Целые числа |
- Инновационной образовательной программы, 1090.47kb.
- Самостоятельная работа 2 часа в неделю всего часов, 28.69kb.
- Самостоятельная работа 2 часа в неделю всего часов, 45.89kb.
- Самостоятельная работа 2 часа в неделю всего часов, 73.46kb.
- Самостоятельная работа 2 часа в неделю всего часов, 46.6kb.
- Самостоятельная работа 2 часа в неделю всего часов, 41.37kb.
- Самостоятельная работа 2 часа в неделю всего часов, 41.08kb.
- Самостоятельная работа 2 часа в неделю всего часов, 64.33kb.
- Самостоятельная работа 2 часа в неделю всего часов, 29.72kb.
- Самостоятельная работа 2 часа в неделю всего часов, 33.42kb.
Стековые команды
а) PUSH op; запись слова в стек, флаги не модифицируются
ор – может быть в регистре (в том числе и в сегментном) или в ячейке памяти, но не непосредственный операнд.
Алгоритм выполнения:
- декремент значения SP:=SP–2;
- пересылка содержимого ор на сводную ячейку стека с адресом [SS:SP] (в польской инверсной записи).
Пример:
PUSH AX
Примечания:
- SP используется по умолчанию
- Записать можно только слово
- Если организуется стековый сегмент в максимальном объеме (64КБ), то при полном заполнении, происходит разрушение ранее записанной информации
- Если стек имеет меньший размер, то при полном его заполнении каждое новое обращение разрушает область памяти вне стекового сегмента
SS 128Б
б) РОР ор ; чтение слова из стека
ор – аналогично PUSH.
Алгоритм выполнения:
- слово из ячейки стека пересылается в ор (порядок байтов восстанавливается),
- инкремент SP := SP +2
Пример:
POP CX
Примечание: Если пытаться считывать из пустого стека, то ошибка не фиксируется, а считывается слово, следующее за сегментом стека.
в) PUSHF ; копирование слова из регистра FLAGS в стек
POPF ; копирование слова из стека в регистр FLAGS
ор отсутствует, флаги не изменяются.
Эти команды позволяют модифицировать флаг TF. Т.к. другого пути воздействия на TF нет, то нужно выполнить засылку флага в стек, затем изменить 8-й бит и записать новое значение из стека в регистр FLAGS.
Доступ к элементам стека с помощью регистра ВР
Доступ к любому слову, хранящемуся в стеке, осуществляется на основе определения расстояния от нужного слова до вершины стека и базовой адресации.
Например:
MOV BP,SP ; BP := SP
MOV AX,[BP+4] ; эквивалентно MOV AХ, SS:[BP+4]
ВР по умолчанию относится к сегменту стека, а не к сегменту данных!!!
Конструкции языка Ассемблера
Любой язык программирования имеет стандартную структуру, которая позволяет осуществлять структурированное изучение языка.
Все конструкции языка делятся на 4 уровня:
- алфавит;
- элементарные конструкции (лексемы);
- предложения;
- программные единицы.
1. Алфавит
Алфавит языка программирования – это набор символов, который используется в конструкциях языка, а не только в комментариях. Алфавит ЯА будем изучать постепенно, рассматривая лексемы.
2. Лексемы
Лексемы – это элементарные конструкции языка, т.е. слова. В ЯА лексемы представлены пятью классами:
Элементарные конструкции
Идентификаторы Целые числа Ключевые слова Символьные данные
Метки Имена
ВЫРАЖЕНИЯ
1. Идентификаторы – это последовательность латинских букв, цифр и символов . ? @ _ $
Особенности применения имен в ЯА:
- длина идентификатора не ограничена, но значащими являются только первые 31 символ;
- идентификатор не может начинаться с цифры;
- точка может быть только первым символом идентификатора; например, возможен идентификатор
.ABR
- в идентификаторе одноименные заглавные и строчные буквы считаются эквивалентными;
- идентификаторы не могут совпадать с зарезервированными (ключевыми) словами.
Идентификаторы делятся на два вида:
а) Имя – ссылка на адрес первого байта, содержащего данные (константы или переменные). Имена описываются директивой декларации.
Пример:
FATAL DB 13
Это имя имеет атрибут (тип) BYTE, WORD и т.д.
б) Метка – идентификатор инструкций или директивы, которая используется для передачи управления.
Метки сегментов и процедур:
LAD SEGMENT
………………….
ENDS
FUN PROC
……………
ENDP.
Метки команд (инструкции) располагаются в начале строки и отличаются от МНК двоеточием. Метка имеет атрибут NEAR или FAR.
В языке ассемблера допускается только одна метка на строке, но можно поместить метку на отдельной строке, что позволяет пометить инструкцию, расположенную на следующей строке. Запрещены метки, состоящие из одного ? или $.
Одну и ту же инструкцию можно выполнять дважды:
NACHALO:
LAB:ADD AX,DX
…………………..
JMM NACHALO
………………….
JMP LAB.
- Ключевые (зарезервированные) слова – это сочетания символов, которые имеют определенный смысл и соответственно воспринимаются Ассемблером.
Например,
.286 – директива, позволяющая использовать в программе команды МП i80286;
AND – мнемоника команды;
AX – имя регистра;
.ERR – директива генерации кода ошибки.
- Целые числа могут быть записаны в десятичной, восьмеричной или 16-ричной системах счисления, на это указывает буква в конце числа, называемая спецификатором
Основание ПСС | Спецификатор | Примеры |
10 | D или ничего | 25, -387, +4d |
2 | B | 101b, -1001B |
8 | O или Q | 74q, -22Q |
16 | H | 1A3h, -0B4H |
Примечания:
- для 16-чной ПСС, если число начинается с цифры от A до F, то перед ней записывается ноль,
- в числах можно использовать заглавные или строчные латинские буквы.
- Символьные данные заключаются в одинарные либо двойные кавычки, но левый и правый ограничители должны быть одинаковыми.
Примечания:
- в качестве символов можно использовать любые изображаемые символы и буквы;
- заглавные и строчные буквы различаются;
- если внутри строки символов нужно использовать кавычки, то есть 2 возможности:
или удвоить символ, например, ‘Don’’t’;
или использовать другой вариант ограничителя строки ,
например, «Don’t» или ‘кафе «МИР»’
- Выражения в языке ассемблера состоят из чисел и\или символов, обозначающих числа. Выражение определяет операнд или его адрес.
Например, в декларациях Alpha EQU 10/4 ; константа Alpha равна 2.
Возможные операции в выражениях: + - * / mod () not k (подразумевается инверсия k)
High n – старший байт числа n
Low n – младший байт числа n и т.д.
Выражением считается список констант в декларациях, например:
Area DB 2, -8, 7.
В инструкциях выражения используются только для вычисления адресов операндов, при этом возможны виды адресации:
- Косвенная
- Индексная
- Базовая
- Базово – индексная
В программе можно записать эти адресации разными записями:
-
Название адреса
Обозначение операнда
в инструкции
Формирование адреса
Косвенная
[Рг B]
[Рг U]
[Рг B]
[Рг U]
Индексная
disp [Рг U]
[Рг B]+ disp
disp + [Рг U]
Базовая
disp [Рг B]
[Рг B] + disp
disp + [Рг B]
Базово-индексная
disp [Рг B] [Рг U]
disp [Рг B] + [Рг U]
disp [Рг B + Рг U]
disp + [Рг B] + [Рг U]
Где disp – смещение в байтах, которое может быть константой или выражением.
[Рг B] – содержимое базового регистра (BP или BX).
[Рг U] – содержимое индексного регистра (C или D)
Между индексными или базовыми регистрами (способами адресации) разницы нет, но они выделены, т.к. в базово-индексной адресации можно использовать только пары из разных групп, например:
mov AX, 2[DI] ; AX := ОП[[DI] + 0002h]
mov [BX], AL ; ОП[BX] := [AL].