Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура компьютеров / Язык АССЕМБЛЕРА.doc
Скачиваний:
59
Добавлен:
20.03.2015
Размер:
149.5 Кб
Скачать

Язык АССЕМБЛЕРА

Assembler

Оперативная память.

7

6

5

4

3

2

1

0

Байт (BYTE)

15

8

7

0

Слово А (WORD)

31

24

23

16

15

8

7

0


Двойное слово А (DWORD)

Регистры.

  • Регистры общего назначения (AX,BX,CX,DX,SI,DI,BP,SP);

  • Сегментные регистры (CS,DS,SS,ES);

  • Указатель команд (IP);

  • Регистр флагов (Flags).

Регистры общего назначения

AX

AH

AL

SI

BX

BH

BL

DI

CX

CH

CL

BP

DX

DH

DL

SP

Сегментные регистры

CS

SS

DS

ES

CS – Code Segment, сегмент команд;

DS – Data Segment, сегмент данные;

SS – Stack Segment, сегмент стека;

ES–ExtraSegment, дополнительный сегмент.

Указатель команд


IP

d

Регистр флагов

OF

DF

IF

TF

SF

ZF

AF

PF

CF

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Флаги состояния:

CF – Carry Flag, флаг переноса;

OF – Overflow Flag, флаг переполнения;

ZF – Zero Flag, флаг нуля;

SF – Sign Flag, флаг знака;

PF – Parity Flag, флаг четности;

AF–AuxiliaryFlag, флаг дополнительного переноса.

Флаги управления:

DF – Direction Flag, флаг направления;

IF – Interrupt Flag, флаг прерываний;

TF–TrapFlag, флаг трассировки.

Идентификаторы

Идентификаторы нужны для определения различных объектов программы – переменных, меток, названий операций и т.п.

В ЯА идентификатор это последовательность из латинских букв (больших и малых), цифр и следующих знаков:

? . @ _ $

причем на эту последовательно накладываются следующие ограничения:

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

  • Идентификатор не должен начинаться с цифры;

  • Точка может быть только первым символом идентификатора;

  • В идентификаторах одноименные большие и малые буквы считаются эквивалентными.

Целые числа

Целые числа могут быть записаны в десятичной, двоичной, восьмеричной и шестнадцатеричной системах счисления. Причем, в конце двоичного числа ставится b(binary), в конце восьмеричного –o(octal) илиq, в конце шестнадцатеричного числа – букваh(hexadecimal). В конце десятичного числа ставится буква-спецификаторd(decimal), которую можно опускать.

Примеры:

Десятичные числа:

15, -395, +4, 25d

Двоичные числа:

101b, -11000b

Восьмеричные числа:

74q, -55q

Шестнадцатеричные числа:

1AFh, -0ach

Замечание: если шестнадцатеричное число начинается с цифры A-F, то вначале числа должен быть записан хотя бы один незначащий нуль.

Символьные данные

Символы заключаются либо в одинарные, либо в двойные кавычки: ‘A’ или “A”. Естественно, левая и правая кавычки должны быть одинаковыми.

Строки (последовательность символов) также заключаются в одинарные или двойные кавычки: ‘Строка’ или “Строка”.

Комментарии

Комментарии не влияют на смысл программы, при трансляции ассемблер игнорирует их. Они предназначены для людей, они поясняют смысл программы. Комментариемсчитается любая строка, начинающаяся с символа “точка с запятой” (“;”).

Также допускается многострочный комментарий. Он должен начинаться с о строчки

COMMENT <маркер> <текст>

<маркер> - первый после слова COMMENTсимвол, отличный от пробела. Этот символ начинает комментарий. Концом же такого комментария считается конец первой из последующих строк программы, в которой (в любой позиции) снова встретится этот же маркер.

Пример:

COMMENT * все

это является

комментарием * и это тоже

Команды

Предложения-команды – это символьная форма записи машинных команд. Общий синтаксис этого типа предложений таков:

[<метка>:]<мнемокод>[<операнды>][; <комментарий>]

Пример:

LAB: ADD SI, 2 ;изменение индекса

NEG A

CBW

Метка

Синтаксически, метка – это имя. Если метка есть, то после нее обязательно ставится двоеточие.

Метка нужна для ссылок на команду из других мест программы, например, для перехода на эту команду.

Мнемокод

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

Операнды

Операнды команды, если они есть, отделяются друг от друга запятыми.

Директивы объявления данных

DB– (DefineByte), определить байт.

DW– (DefineWord), определить слово.

DD– (DefineDoubleWord), определить двойное слово.

Синтаксис этих директив следующий:

[<имя>] DB(DW,DD) <операнд> {, <операнд>}

Операнды могут быть следующего вида:

  1. ? – знак неопределенного значения;

  2. Константное выражение корректное для данного типа. (Например, XDB10h);

  3. Символ, заключенный в одинарные или двойные кавычки. (Например, XDB ‘A’);

  4. Строка. (Например, XDB‘abc’);

  5. Конструкция повторения DUP (Duplicate, копировать). Синтаксис следующий:DUP(повторяемая величина). Например, следующие две конструкции эквивалентны:

XDB0, 0, 0, 0 иXDB4DUP(0).

Адресное выражение

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

Рассмотрим пример

С DB ?

D DW C

В этом случае ассемблер записывает в слово, выделенное под переменную D, адрес переменной С, который становится начальным значениемD.

Директивы эквивалентности

С помощью директивы эквивалентности описываются константы в языке Assembler.

Директива эквивалентности имеет следующий синтаксис

<имя> EQU <операнд>

Примеры, STAR EQU ‘*’