Государственное Образовательное Учреждение высшего профессионального образования Московский Авиационный Институт Государственный Технический Университет "маи" кафедра 304. конспект

Вид материалаКонспект

Содержание


Стековые команды
Конструкции языка Ассемблера
Элементарные конструкции
Fatal db 13
Lad segment
Lab:add ax,dx
Целые числа
Подобный материал:
1   ...   4   5   6   7   8   9   10   11   ...   15

Стековые команды



а) 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.


    1. Ключевые (зарезервированные) слова – это сочетания символов, которые имеют определенный смысл и соответственно воспринимаются Ассемблером.

Например,

.286 – директива, позволяющая использовать в программе команды МП i80286;

AND – мнемоника команды;

AX – имя регистра;

.ERR – директива генерации кода ошибки.


    1. Целые числа могут быть записаны в десятичной, восьмеричной или 16-ричной системах счисления, на это указывает буква в конце числа, называемая спецификатором

Основание ПСС

Спецификатор

Примеры

10

D или ничего

25, -387, +4d

2

B

101b, -1001B

8

O или Q

74q, -22Q

16

H

1A3h, -0B4H



Примечания:
      • для 16-чной ПСС, если число начинается с цифры от A до F, то перед ней записывается ноль,
      • в числах можно использовать заглавные или строчные латинские буквы.


    1. Символьные данные заключаются в одинарные либо двойные кавычки, но левый и правый ограничители должны быть одинаковыми.

Примечания:
      • в качестве символов можно использовать любые изображаемые символы и буквы;
      • заглавные и строчные буквы различаются;
      • если внутри строки символов нужно использовать кавычки, то есть 2 возможности:

или удвоить символ, например, ‘Don’’t’;

или использовать другой вариант ограничителя строки ,

например, «Don’t» или ‘кафе «МИР»’
    1. Выражения в языке ассемблера состоят из чисел и\или символов, обозначающих числа. Выражение определяет операнд или его адрес.

Например, в декларациях 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].