Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
arkhitektura.docx
Скачиваний:
50
Добавлен:
12.01.2020
Размер:
216.72 Кб
Скачать

11. Ассемблер. Области применения. Достоинства и недостатки.

Ассемблер – это язык программирования низкого уровня. Представляет собой, символически-удобный аналог машинного языка.

Для перевода программы, написанной на ассемблере, в машинные коды существуют программы – трансляторы (компиляторы).

Достоинства:

1. Оптимальное использование средств процессора, использование меньшего количества команд и обращений в память, и как следствие — большая скорость и меньший размер программы

2. Использование расширеных наборов инструкций процессора (ММХ, SSE, SSE2, SSE3)

3. Доступ к портам ввода-вывода и особым регистрам процессора (в большинстве ОС эта возможность доступна только на уровне модулей ядра и драйверов)

4. Возможность использования самомодифицирующегося (в том числе перемещаемого) кода.

Недостатки:

1. Большие объемы кода, большое число дополнительных мелких задач, меньшее количество доступных для использования библиотек, по сравнению с языками высокого уровня

2. Трудоёмкость чтения и поиска ошибок (хотя здесь многое зависит от комментариев и стиля программирования)

3. Непереносимость на другие платформы, кроме архитектурно совместимых.

4. Более сложен для совместных проектов

Области применения:

  1. Разработка программ, критичных к быстродействию (например, драйверов устройств).

  2. Возможность просмотра и корректировки исполняемых программ (с расширениями, EXE и COM, например), при отсутствии их исходного кода.

12. Ассемблер. Структура программы. Модель памяти small.

13. Ассемблер. Основные типы предложений.

Программа на ассемблере представляет собой описание соответствующих сегментов памяти.

Ассемблер позволяет тонко настроить каждый сегмент (данных, кода, стека): указать тип выравнивания, комбинирования, размер (64 Кбайт в реальном режиме, или до 4 Гб в защищенном). Для некоторых типичных ситуаций приняты так называемые модели памяти, чтобы программист не настраивал их подробно в каждой программе. Подробную настройку следует проводить лишь в тех случаях, когда стандартные модели памяти не удовлетворяют. Мы будем использовать модель памяти SMALL, в которой код программы размещается в одном сегменте кода, а данные объединены в одну группу.

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

MODEL SMALL

.DATA

--здесь описывается сегмент данных

.STACK

--здесь описывается сегмент стека

.CODE

MAIN PROC

--здесь представлен исходный код процедуры PROC

MAIN ENDP

ENDMAIN

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

Предложения бывают следующих типов:

Команды (инструкции) – символические аналоги машинных команд. В процессе трансляции они преобразуются в машинные команды.

Формат команды

[метка [:]] КОП [Операнд] [,Операнд] [;Комментарий]

КОП – мнемокод команды (состоит из 2-6 букв). В 8088 133 кода, в 80386 – 240.

Операнд – в качестве него может быть явно заданный адрес (прямой или косвенный); имя метки, имя переменной, само значение переменной и т.п.

Количество необходимых операндов в данной команде, МП узнает по КОП.

Метка – имя команды ассемблера для ссылки к этой команде. Метка находится всегда в текущем сегменте памяти.

Директивы – некоторые указания транслятору.

Формат директивы:

[Идентификатр] КПОП [Операнд] [, Операнд] … [;Комментарий]

Идентификатор – имя директивы

КПОП – мнемокод директивы.

Операнды – различные опции директивы.

Особенности представления чисел:

Двоичные числа заканчиваются буквой B.

Десятичные числа без окончания, либо заканчивающиеся буквой D.

Шестнадцатеричные числа заканчиваются буквой H. Всегда должны начинаться с десятичной цифры, а не буквы!

Отрицательные десятичные числа записываются обычным образом

Двоичные и шестнадцатеричные числа записываются в дополнительном коде.

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

Модификаторы

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

Арифметические: «+» «-«, «*», «/», mod и т.п. Формат: oprd mdf oprd

Логические: and, or, not, xor. Формат: oprd mdf oprd

Отношения: eq – совпадения, nq – несовпадения, it – меньше, gt- больше, le – меньше или равно, ge – больше или равно. Формат: oprd mdf oprd.

Функции: $ - счетчик адреса, возвращает смещение текущей команды относительно сегмента кода;

seg – возвращает сегмент (его адрес) операнда;

offset – возвращает смещение операнда;

length – возвращает длину операнда;

type – возвращает тип операнда (1 – если байт, 3 – dword)

size – возвращает произведение length*type операнда

Формат везде (кроме $) mdf oprnd

Присваивания атрибутов:

ptr – изменяет тип операнда. Формат: type ptr oprnd

ds: es: CS: SS: - изменяет адрес сегмента.

HIGH/LOW – возвращает старший/младший байт 16-битового операнда.

Соседние файлы в предмете Архитектура информационных систем