Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_2011.doc
Скачиваний:
64
Добавлен:
09.12.2018
Размер:
1.15 Mб
Скачать
  1. Элементы синтаксиса Ассемблера

Ассемблер уникален для каждого типа МП. Программа может состоять из одного или нескольких сегментов. Каждая строка программы содержит одно предложение. Предложения бывают 4-х типов:

  • Команды МП

  • Макрокоманды

  • Директивы транслятору

  • Строки комментариев

Допустимые символы при написании программ:

    • Латинские буквы (большие и маленькие)

    • Цифры (от 0 до 9)

    • Знаки ? @ $ _ &

    • Разделители : , . [ ] ( ) < > { } + / * % ! “ “ \ = ≠ ^ ‘ ‘

Предложение Ассемблера формируется из лексема (- это последовательность символов имеющих смысл для транслятора).

Примеры лексем:

  • Идентификаторы – это последовательность допустимых символов, которые используются для обозначения имен переменных и меток (первый не должен быть цифрой);

  • Цепочка символов, заключенные в одинарные или двойные кавычки

  • Целые числа в определенной системе исчисления (если 16-ричное число начинается с буквы, то слева надо ставить 0).

Операнды – это объекты (некоторые значения, регистры или ячейки памяти), на которые действуют инструкции или директивы, либо это объекты, которые определяют или уточняют действия инструкций или директив.

  1. Постоянные или непосредственные операнды – это число, строка, имя или выражение имеющее некоторое фиксированное значение (например, константа)

num equ 5

imd = num -2

mov al, num ; пересылка const в регистр al

add [SI], imd ; сложение, результат - по адресу SI

mov al, 5

  1. Адресные операнды – задают физическое расположение операнда в памяти.

mov ax, es : 0025h

mov ax , [bx]

  1. Перемещаемые операнды – это любые символьные адреса представляющие адреса в памяти

lea ax, mas ; загрузить адрес массива mas в ax

mas – перемещаемый операнд

  1. Счетчик адреса обозначается $ - вместо знака $ транслятор подставляет текущее значение счетчика адреса, которое может быть использовано в командах МП. Счетчик адреса – значение смещения текущей машинной команды относительно начала сегмента кода.

Например:

jmp $+3 – перейти на команду, адрес которой увеличивается на 3 относительно адреса текущей команды.

  1. Регистровый операнд – это имя регистра

mov al, 4

al – регистровый операнд

  1. Структурные операнды – используются для доступа к конкретному Элементу структуры (записи).

  1. Базовый и индексный регистры, которые используются для базовой/индексной адресации

Трансляторы TASM и MASM допускают использование выражений.

Выражение – это комбинация операндов и операторов, рассматриваемых как единое целое.

  1. Операторы

Операнд команды Ассемблера может быть выражением, представляющим комбинацию операндов и операторов Ассемблера

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

Операторы, которые поддерживают транслятор:

  • Арифметические операторы:

унарные: + , - ;

бинарные: +, -, * , / , mod.

Пример

tab equ 50 ; имени tab присваивается константа 50

size equ 2

…….

mov cx,tab/size ; записать в регистр cx результат деления констант нацело.

  • Операторы сдвига – сдвиг выражения на указанное количество разрядов:

shl – влево,

shr – вправо.

Формат оператора:

<Выражение> <Оператор> <Число сдвигаемых разрядов>

Пример:

mask equ 10111011b

mov al, mask shr 3 ; Результат в регистре al = 00010111

  • Операторы сравнения – предназначены для формирования логических выражений.

Формат оператора:

<Выражение 1> <Оператор> <Выражение 2>

Операторы сравнения:

eq – равно

ne – не равно

le <=

gt > для операндов со знаками

ge >=

lt <

Результат сравнения «истина» соответствует логической единице, а «лож» - логическому нулю. Логическая единица отображается значением, все биты которого равны 1 (0FFh), логический ноль – значением, все биты которого равны нулю (00h).

Пример:

tab equ 30

mov al, tab ge 50 ; al = 00h – ложь

cmp al,0

je m1

.

m1:

В примере оператор проверяет константу tab (больше или равна числу 50). Т.к. результат сравнения – «лож», то управление с помощью команды условного перехода передается на метку m1.

  • Логические операторы not, and, or, xor выполняют над выражениями поразрядные операции.

Формат операторов:

not <Выражение>

and

notxor

[not] <Выражение > < > [not] <Выражение >

Пример:

Flag equ 10010011b

mov al, Flag xor 01b ;Результат в al = 10010010b

  • Индексный оператор – используется при индексной адресации. Транслятор выполняет сложение операнда, указанного в скобках с операндом вне скобок (происходит обращение по вычисленному адресу).

Пример

mas dw 48, 56, 67

……………………

mov si,2

mov ax, mas[SI] ;Пересылка слова 56 по адресу mas+(si) в регистр ax

  • Оператор переопределения типа, ptr.

Тип может принимать значения:

байт (byte), word (слово), dword (двойное слово), qword (8 байт), tbyte (10 байт).

near и far – определяет близкий или дальний переход.

Форат оператора

<Тип> ptr <Выражение>

Пример.

var dd 0abcd1234h ; двойное слово в сегменте данных

mov al, byte ptr var+1 ;в регистр al загрузить байт (число cdh)

  • Оператор переопределения сегмента (двоеточие).

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

Фрагмент программы:

.code

…….

jmp m1

ind db 5 ; поле данных в сегменте команд

m1:

mov al, cs:ind ;адрес начала сегмента кода в регистре cs

;в регистр al загрузить число 5.

  • Оператор получения сегментной составляющей адреса - seg.

Оператор возвращает сегментный адрес для выражения в качестве которого может выступать: метка, переменная, имя сегмента, имя группы сегментов, некоторое символическое имя.

Пример:

dataseg segment

mas dw 0

dataseg end

codeseg segment

mov ax, seg mas

mov ds, ax ; в ds загружается адрес начала сегмента данных

  • Оператор получения смещения в сегменте памяти некоторого выражения – offset.

Смещение – это адрес операнда относительно начала сегмента.

Пример

.data ; начало сегмента данных

mas dw 5 ; в сегменте данных число 5

.code ; начало сегмента кода

mov ax, seg mas ; запись в ax начало сегмента данных

mov es, ax

mov dx, offset mas ; в dx загружаем смещение

mov bx, es:[dx] ; загрузили в bx число 5

Типы данных, которые поддерживает ассемблер:

  1. Байт (byte) – 8 разрядов, младший разряд справа

  2. Слово (word) – 2 байта, 16 разрядов. Делится на 2 части: справа младший байт, слева – старший байт. Адресом слова в памяти является адрес младшего байта.

  3. Двойное слово (dword). Состоит из младшего и старшего слов. Адресом является адрес младшего слова.

МП кроме разрядности поддерживает логическую интерпретацию типов:

    1. Целый тип без знака

Байт: 0….255

    1. Целый тип со знаком

Байт: -128….+127

Слово: -32768…+32768

    1. Цепочка – непрерывный набор байтов, слов или двойных слов (максимальная длина до 4 Гбайт).

    2. Битовое поле – непрерывная последовательность бит, в которой каждый бит является независимым и может рассматриваться как независимая переменная (максимальная длина 32 бита).

Ввод информации с клавиатуры и вывод ее на экран осуществляется в символьном виде. Кодирование этой информации производят согласно таблице. Каждый символ кодируется байтом.

При вводе чисел в программу необходимо преобразование кода символа в двоичный формат. При выводе результатов необходимо выполнить обратное преобразование (чисел в символьные коды).

Символ Код ASCII Двоичное представление Разность

0 30h 0000 30h

: : : :

9 39h 1001 30h

Для преобразования в двоичный код достаточно вычесть из кода ASCII 30h (для чисел от 0 до 9)

А(а) 41h(61h) 1010 37h(57h)

: : : :

F(f) 46h(66h) 1111 37h(57h)

Программа должна опознать, в каких границах находится код ASCII данного числа и в зависимости от принятого решения, вычесть из кода ASCII либо 37h, либо 57h.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]