Язык программирования Ассемблер

Страницы работы

Содержание работы

ASSEM

                                   Ассемблер.

ASSEMBLE – созывать, собирать, монтировать.

АССЕМБЛЕР – язык программирования, предназначенный для адекватного отражения архитектуры вычислительной машины при программировании. Использование Ассемблера  имеет ряд особенностей:

-  язык Ассемблера сильно зависит от процессора, для обслуживания которого он создается;

-  Ассемблер существенно сложнее любого языка высокого уровня, т.к. учитывает все тонкости работы конкретного процессора. Эти тонкости  «сглаживаются» в языках высокого уровня, где отражаются лишь общие свойства алгоритмов и особенности их подготовки, зачастую при условии, что архитектура процессора отражена лишь в самом общем виде.

-  программируя в Ассемблере, пользователь должен сам контролировать распределение памяти и регистров для хранения и манипуляции данными. В языках высокого уровня компилятор это делает автоматически. Но, с другой стороны, такая возможность позволяет оптимально организовать данные и выполнить кодирование программы для обеспечения максимального быстродействия и/или минимальной длины программы.

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

Ассемблер представляет собой, как правило, библиотеку описания отдельных машинных команд и большой макропроцессор директив, описывающих отдельные функции процессора и представление различных типов данных в компьютере. В директивы процессора фирмы Intel, например, включены директивы описания типа процессора (.386, .486), директивы описания типа и состава программы (dosseg, model, .stack), директивы описания различных типов данных, включая описания структур и т.д. Поэтому ассемблер важно использовать для кодирования критических участков сложных программ, для кодирования программ драйверов, для подготовки тестов при подключении нового оборудования.

1)  Представление данных в Ассемблере.

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

Для кодировки знаков используется код ASCII (American Standard Code for the Information Interchange).

Для кодировки чисел используется двоичная позиционная система. При этом младший байт заносится по младшему адресу, а старший – по старшему. Например, число 1234h занесется в память т.о.

                     Адреса      значения

                       А-1               

                       А                  34

                       А+1              12

Двойное слово длиной в 4 байта  12345678h

в памяти будет представлено так

                       Адреса         значения

                         А-1

                         А                    78

                         А+1                56

                         А+2                34

                         А+3                12

Отрицательное число представляется в машине в ДВОИЧНОМ ДОПОЛНИТЕЛЬНОМ КОДЕ.

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

         1234    -    десятичная константа (суффикс отсутствует)

          0а12h  -   16-ричная константа (0 необходим т.к. первый знак должен                                                                

                                                           быть арабской цифрой)

       101001b  -  двоичная константа

Возможно использование как строчных, так и прописных букв H и B.

Микропроцессоры семейства I80х86 поддерживают данные следующих размерностей

               Байты

               Слова (два байта)

                Двойные слова (4 байта), отметим, что так же описываются числа типа FLOAT.

               Строки, в которых описываются также числа типа DOUBLE и LONG DOUBLE.

Следующая таблица представляет сравнительное описание чисел в языках C и ASSEMBLER:

Тип           размер     интервал представления   описание  директива ASS

                 в байтах

char               1                -128  127                            BYTE            db

unsigned char                       0     255

   int                    2                -32768   32767                   WORD          dw

unsigned int        2               0             65535

   long                   4              -2147483648  2147483647  DWORD      dd

unsigned long       4              0                    4294967295

   float                   4             -3.4e-/+38         3.4e-/+38

   double                8             -1.7e-/+308      1.7e-/+308     QWORD       dq

long double          10             -3.4e-/+4932    3.4e-/+4932    TBYTE         dt

Кроме того, для дальнего указателя длиной 32 бита в мнемонике С используется ключевое слово FAR *, а в мнемонике ASSEMBLER’а – df.

2)  Регистры микропроцессора.

31

16

15

8

7

1

EAX

AH

AL

Аккумулятор

AX

EBX

BH

BL

БАЗОВЫЙ РЕГИСТР 

BX

(для формирования адреса при адресации по базе)

ECX

CH

CL

СЧЕТЧИК

CX

(например, в циклах )

EDX

DH

DL

РЕГИСТР ДОПОЛНИТЕЛЬНЫХ ДАННЫХ

DX

ESI

SI

Индекс источника

EDI

DI

Индекс приемника

EBP

BP

Указатель базы для вычисления локальных переменных

ESP

SP

Указатель текущего положения в стеке.

EIP

IP

Указатель адреса инструкции.

EFLAGS

FLAGS

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

CS

Адрес сегмента кода.

DS

Адрес сегмента данных

ES

Адрес дополнительного сегмента данных

FS

Адрес дополнительного сегмента данных.

GS

Адрес дополнительного сегмента данных

SS

Адрес сегмента стека.

Начиная с микропроцессора I80386, были установлены 32-разрядные регистры для данных (AX, BX, CX, DX), для регистров указателей и индексов (BP, SI, DI, SP), для регистра флагов состояния (FLAGS) и для регистра указателя команд (IP), который указывает, какая команда будет выполнена следующей. Эти регистры при описании в ассемблере снабжены символом “E” (EAX вместо AX и т.д.).

Похожие материалы

Информация о работе