Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы (книга Комаров) / Программирование на Ассемблере (ч 1).doc
Скачиваний:
148
Добавлен:
08.03.2015
Размер:
435.2 Кб
Скачать

104

3.Программирование на языке ассемблера

В настоящем пособии рассматривается базовый ассемблер MASM версии 5.10 фирмы Microsoft [7], а также режим MASM турбоассемблера TASM версии 3.2 фирмы Borland [8].

Ассемблер является основным языком программирования для МПС, так как обеспечивает максимальную эффективность создаваемых программ с точки зрения их быстродействия и объема.

Ассемблер это машинно-ориентированный язык, позволяющий использовать все ресурсы системы. Однако, для успешного программирования на нем необходимо четко представлять аппаратные средства используемой микроЭВМ, то есть ту материальную среду, в которой протекает процесс решения задачи. Так как задача решается программными средствами, то в эту среду входят только программно доступные элементы аппаратных средств, то есть элементы, доступные с помощью системы команд.

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

3.1. Архитектура микропроцессоров k1810вм86/k1810вм88

Архитектура МП ВМ86/ВМ88 приведена на рис.3.1. Она включает в свой состав 14 программно доступных регистров. Все они делятся на две группы:

1) регистры общего назначения (РОН);

2) сегментные регистры.

В свою очередь РОН делятся на регистры данных и регистрыуказатели адреса. Отличительной особенностью регистров данных является возможность их использования как в виде полных 16-битных регистров AX, BX, CX, DX, так и в виде частичных 8-битных регистров AH, AL, BH, BL, CH, CL, DH, DL. Это обеспечивает возможность эффективной обработки как однобайтных, так и двухбайтных данных. Регистры данных предназначены для хранения данных, и они единообразно участвуют во всех арифметических и логических операциях.

Регистрыуказатели адреса SP, BP, SI, DI могут использоваться только как полные 16-битные регистры. Они предназначены в основном для хранения адресной информации. Однако, эти регистры могут участвовать и в арифметических и логических операциях, что позволяет отнести их к РОН.

Определение регистров данных и регистровуказателей адреса как регистров общего назначения в МП ВМ86/ВМ88 весьма условно. Многие команды рассматривают различные регистры этой группы как специализированные регистры, что обуславливает их функциональную неравнозначность. Основная специализация регистров этой группы указана на рис.3.1, а полные сведения о нейв табл. 3.1.

Рис. 3.1. Архитектура МП ВМ86/ВМ88

Специализация внутренних регистров МП требует, чтобы программист или компилятор языка высокого уровня внимательно распределял и тщательно следил за использованием конкретных регистров. Однако, это дает возможность их неявного использования соответствующими командами, что позволяет получить более короткий машинный код, чем в случае идеальных РОН.

Сегментные регистры CS, DS, ES, SS служат для поддержки ранее рассмотренного механизма сегментации памяти (см. подраздел 2.2.3) и каждый из них обеспечивает хранение базового (начального) адреса segment соответствующего сегмента.

Таблица 3.1

Специализация РОН

Регистр

Специализированные функции

AX

Умножение, деление, вводвывод слов

AH

Умножение и деление байт

AL

Умножение, деление, вводвывод байт, десятичная арифметика, табличное преобразование байта

BX

Базовый регистр адреса данных, табличное преобразование

CX

Счетчик циклов в командах управления циклами и обработки цепочек

CL

Счетчик циклов в командах сдвигов

DX

Умножение и деление слов, косвенный вводвывод

SP

Указатель стека

BP

Базовый регистр адреса стека

SI

Индексный регистр, операции с цепочками (строками)

DI

Индексный регистр, операции с цепочками (строками)

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

Регистр флагов служит для хранения признаков состояния МП. Все флаги делятся на две группы:

1) арифметические флаги; 2) управляющие флаги.

Арифметические флаги характеризуют признаки результата операции, полученного в АЛУ. К ним относятся:

CF флаг переноса, фиксирующий значение переноса (заема), возникающего при сложении (вычитании) байтов или слов, а также значение выдвигаемого бита при сдвиге операндов;

PF флаг четности (паритета), фиксирующий наличие четного количества единиц в младшем байте результата;

AF флаг вспомогательного переноса, фиксирующий перенос (заем) из младшей тетрады (бита D3) регистра AL при сложении (вычитании) двоично-десятичных чисел, обрабатываемых только побайтно;

ZF флаг нуля, фиксирующий получение нулевого результата;

SF флаг знака, дублирующий значение старшего бита результата, который при использовании дополнительного кода соответствует знаку числа;

OF флаг переполнения, фиксирующий переполнение разрядной сетки МП при сложении и вычитании знаковых чисел. Переполнение приводит к потере старшего бита результата. Например, для 4-разрядной машины имеем:

Поскольку переполнение полностью искажает результат, то имеется специальная команда прерывания по переполнению, с помощью которой при OF=1 инициируется программное прерывание, при обработке которого анализируется возникшая ситуация и принимаются все необходимые решения.

Кодирование арифметических флагов соответствует общепринятому (см. подраздел 1.3.1).

К управляющим флагам относятся:

DF флаг направления, определяющий направление обработки данных в виде цепочек символов. Если DF=0, то цепочка обрабатывается от первого элемента (с наименьшим адресом) к последнему (с наибольшим адресом). При DF=1 цепочка обрабатывается от последнего элемента (с наибольшим адресом) к первому (с наименьшим адресом). Выбор направления обработки имеет смысл при пересылке перекрывающихся цепочек. Если начальный адрес приемника меньше начального адреса источника, то пересылку следует начинать с первого элемента. Если же начальный адрес приемника больше начального адреса источника, то пересылка осуществляется с последнего элемента.

IF флаг разрешения маскируемого прерывания. При IF=0 прерывания по входу INTR запрещены, и МП игнорирует все поступающие на него запросы. При IF=1 прерывания по входу INTR разрешены, и МП обслуживает их при наличии запросов.

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

Для управления флагами DF и IF существуют специальные команды. Команды управления флагом TF отсутствуют, и управление им осуществляется через память с помощью логических команд.

При сбросе МП все флаги принимают нулевые значения.