Запись и выполнение простых программ


Цель работы: изучение различных способов адресации микропроцессора, изучение основ программирования микропроцессора, исследование выполнения отдельных команд и простых программ, использование различных методов адресации в программах, запись программ в память микроЭВМ и их выполнение.

2.1. Краткие теоретические сведения

2.1.1. Программирование микроЭВМ

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

Каждая микроЭВМ способна воспринимать и выполнять точно определенный для нее набор команд. Количество и тип команд изменяются в зависимости от возможностей и назначения микроЭВМ.

Различают три основных уровня программирования:

1) программирование в машинных кодах;

2) программирование в кодах языка Ассемблера;

3) программирование на языках высокого уровня.

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

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

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

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

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

Язык Ассемблера является машинно-зависимым (машинно-ориентированным) и, следовательно, отражает аппаратурные особенности той микроЭВМ, для которой создан. Поэтому программы, составленные с использованием языка Ассемблера (или машинного языка), обладают наименьшей мобильностью по отношению к различным микроЭВМ.

Большей мобильностью обладают программы, составленные на алгоритмических языках высокого уровня (например Паскаль, СИ и др.), занимающих верхнее положение в иерархии языков программирования. Будучи приближенными к привычной математической нотации и, в ряде случаев обеспечивая естественную форму описания вычислительных процессов, они достаточно просты и удобны в программировании, но не всегда позволяют в полной мере реализовать технические возможности ЭВМ. Кроме того, результирующие машинные программы, получаемые после трансляции программ с алгоритмических языков, обычно менее эффективны с точки зрения объема и быстродействия, по сравнению с программами, написанными в кодах языка Ассемблера и в машинных кодах. Применение языков высокого уровня предполагает обязательное наличие транслятора, представляющего собой сложный программный комплекс.

2.1.2. Выполнение команд микропроцессором

Микропроцессор 8086 имеет фиксированный набор команд. Работа микропроцессора по реализации каждой команды программы основана на принципе микропрограммного управления. То есть, каждая команда реализуется как некоторая последовательность микрокоманд (или микроопераций), приводящая к требуемому результату.

Считываемая из памяти микропроцессором команда, точнее ее восьмиразрядный двоичный код (код операции), поступает в регистр команд, где и хранится в течение времени ее выполнения. По результату дешифрирования кода операции происходит формирование последовательности микроопераций, процесс выполнения которой и определяет все последующие операции по выполнению считанной команды. При этом выполнение отдельных микроопераций синхронизируется сигналами тактового генератора.

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

В свою очередь, каждый машинный цикл может состоять из 3 - 5 машинных тактов. Под машинным тактом подразумевается интервал времени, соответствующий одному периоду тактовых импульсов.

Все команды можно классифицировать по трем основным признакам: по длине команды; по виду адресации к данным; по функциональному признаку.

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

2.1.3. Система команд и способы адресации микропроцессора 8086

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

При непосредственной адресации необходимые данные содержит сама команда. Эти данные содержатся во втором и третьем байтах трехбайтовой команды или во втором - двухбайтовой. В случае трехбайтовой команды младшие разряды шестнадцатибитового числа содержатся во втором байте команды, а старшие - в третьем (рис.2.2, а).

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

При регистровой адресации код команды содержит указания на регистр или пару регистров, в которых содержатся данные. Используемые в регистровой адресации команды являются однобайтовыми (рис. 2.2, в).

Последним способом является косвенная адресация, при которой в регистровой паре микропроцессора, определяемой кодом команды, содержится полный шестнадцатиразрядный адрес ячейки памяти, содержащей данные (рис. 2.2, г). Старший байт адреса записывается в первом регистре пары, а младший байт - во втором.

Рис. 2.2. Способы адресации: а) непосредственная; б) прямая; в) регистровая; г) косвенная

 

При всевозможных пересылках данных: из регистров в регистры или из памяти в регистры и обратно, различают регистры-источники и регистры-приемники данных.

По функциональному признаку все команды могут быть разделены на пять групп:

1) команды пересылки данных;

2) арифметические команды;

3) логические команды;

4) команды переходов;

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

К группе команд пересылки данных относятся команды, пересылающие содержащиеся в них данные в регистры или в память, команды пересылки данных между регистрами микропроцессора и между регистрами и памятью. В мнемонике команд регистр-приемник указывается вслед за символическим кодом команды, а через запятую - регистр-источник (прил.2). Например: команда MOV M, A - пересылает данные из регистра А (аккумулятора) в ячейку памяти по адресу указанному в регистровой паре H,L.

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

Логические команды служат для выполнения логических (или булевых) операций над данными, содержащимися в регистрах, ячейках памяти, а так же над флагами регистров. К ним относятся следующие операции: инверсия (НЕ), логическое суммирование (ИЛИ), логическое умножение (И), суммирование по модулю 2, сравнение, сдвиг, дополнение до 1 и до 2. Как и команды предыдущей группы, все логические команды оказывают влияние на флаги состояния.

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

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

2.1.4. Пример программирования

Рассмотрим простейшую программу, производящую извлечение числа из ячейки памяти с адресом 0В0016, операцию инвертирования данного числа и запись полученного результата в ячейку памяти с адресом 0В0А16. При составлении программы используем прямой вид адресации. Пользуясь набором команд микропроцессора 8086, составим программу (табл.2.2).

Таблица 2.2

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

Мнемокод Комментарий
LDA 0B00 Записать в аккумулятор содержимое ячейки памяти 0В00
CMA Инвертировать содержимое аккумулятора (логическая операция НЕ)
STA 0B0A Записать содержимое аккумулятора в ячейку памяти 0B0A
HLT Остановить программу

При разработке программ все данные и адреса в командах записываются в шестнадцатеричной системе счисления.

Для записи программы в память микроЭВМ необходимо перевести мнемокоды команд в машинные коды. Так как команды в программе могут быть одно-, двух- или трехбайтовые, следовательно они должны занимать соответственно одну, две или три ячейки памяти. Пользуясь таблицей соответствия мнемокодов и машинных кодов (прил.3), запишем программу в машинных кодах с указанием адресов ячеек памяти каждого байта программы (табл.2.3).

Таблица 2.3

Программа записанная в машинных кодах с размещением по адресам памяти

Адрес Число Комментарий
3A Код команды LDA
Младший байт адреса
0B Старший байт адреса
2F Код команды CMA
Код команды STA
0A Младший байт адреса
0B Старший байт адреса
Код команды HLT

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

Таблица 2.4

Программа записанная в общем виде

Адрес Машинный код Метка Мнемокод Комментарий
3A 000B   LDA, 0B00 Записать в аккумулятор содержимое ячейки памяти 0В00
2F   CMA Инвертировать содержимое аккумулятора
32 0A0B   STA, 0B0A Записать содержимое аккумулятора в ячейку памяти 0B0A
  HLT Остановить программу

 

Рассмотрим программу, аналогично программе 2.4, с использованием косвенного способа адресации (программа 2.5).

Программа 2.5

Адрес Машинный код метка Мнемокод Комментарий

0800 21 000В LX1H 0В00 записать в регистры H.L число 0В00

0803 7Е . MOV A, M получить число из адреса, указанного в регистрах Н, L

0804 2F СМА инвертировать число в аккумуляторе

0805 23 INX М увеличить на 1 число в регистрах Н, L

0806 77 MOV M, А записать число из аккумулятора по адресу, указанному в Н, L

0807 CF RST 1 прервать выполнение программы


 

Лекция 42



Дата добавления: 2016-07-05; просмотров: 2484;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.012 сек.