Яковлев Л.А., Тимченко В.И. Вычислительная техника. Методические указания к лабораторным работам - файл n1.docx

Яковлев Л.А., Тимченко В.И. Вычислительная техника. Методические указания к лабораторным работам
скачать (298.5 kb.)
Доступные файлы (1):
n1.docx299kb.07.07.2012 02:54скачать

n1.docx

  1   2   3   4   5   6   7   8
Министерство Российской Федерации по связи и информатизации
Санкт-Петербургский государственный университет телекоммуникаций
им. проф. М.А. Бонч-Бруевича


Л.А. Яковлев, В.И. Тимченко

Вычислительная техника


Методические указания к лабораторным работам

201100, 201200, 201400

СОДЕРЖАНИЕ:

ЯЗЫК АССЕМБЛЕРА AVSIM85. ОСНОВНЫЕ СВЕДЕНИЯ

ЛАБОРАТОРНЫЕ РАБОТЫ

Лабоpатоpная pабота 1. Система команд МП К1821 (К580, I8080, I8085), программный имитатор процессора

1.1. Цель работы

1.2. Основные команды имитатора, используемые в работе

1.3. Задание на работу в лаборатории

Лабоpатоpная pабота 2. Изучение программного имитатора микропроцессора и методов, используемых при отладке программы

2.1. Цель работы

2.2. Порядок выполнения работы

2.3. Задание на работу в лаборатории

Лабоpатоpная pабота 3. Подготовка программ пользователя. Использование портов и файлов данных для ввода/вывода информации в имитаторе процессора

3.1. Цель работы

3.2. Порядок выполнения работы

3.3. Пример программы расчета массива значений функции

3.4. Задание на работу в лаборатории

Лабоpатоpная pабота 4. Программная реализация конечных автоматов

4.1. Цель работы

4.2. Порядок выполнения работы

4.3. Алгоритмы программной реализации счетчика

4.4. Реализации изменения состояния счетчика табличным методом

4.5. Реализация временной задержки

4.6. Программа реализации счетчика с произвольным порядком смены состояний

4.7. Задание на работу в лаборатории

Лабоpатоpная pабота 5. Система прерываний процессора 1821ВМ85 (I8085)

5.1. Цель работы

5.2. Порядок выполнения работы

5.3. Задание на работу в лаборатории

Приложение 1. Программный имитатор МП КР1821 (I8085)

П.1.1. Запуск программы

П.1.2. Режимы работы имитатора

П.1.3. Меню имитатора

Приложение 2. Варианты заданий к работе 3

Литература

ЯЗЫК АССЕМБЛЕРА AVSIM85. ОСНОВНЫЕ СВЕДЕНИЯ

Языки ассемблера

Основные общие особенности языка ассемблера (чаще не совсем точно называемого просто ассемблером; строго ассемблером называется программа, которая является транслятором. Эта программа переводит последовательность команд с языка ассемблера на язык машинных кодов процессора) микропроцессоров совпадают с особенностями всех языков подобного типа. Отметим их основные особенности [1].

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

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

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

Ниже рассмотрены основные сведения о языке ассемблера пакета AVSIM85 v2.02 [2] для МП Intel 8080/8085 (КР580/КР1821).

Структура программы на языке ассемблера

Предложения (строки) ассемблера

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

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

Директивы ассемблера не порождают машинные команды и какие-либо действия в процессоре; они задают структуру программы, сообщают транслятору и компоновщику информацию о том, что им надо делать с командами и данными. Примеры директив:

end -

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

seg -

определяет начало новой секции,

db -

размещает в памяти константы.

Команды или инструкции процессора порождают машинные команды и выполняются в заданной последовательности во время работы процессора. Примеры команд:

MOVE A,B

ADD B

Команды препроцессора являются фактически разновидностью директив, которые выполнятся на первом шаге трансляции. Пример команды препроцессора:

%include f1.asm - помощью данной команды в исходный текст будет вставлен текст из файла f1.asm.

Макрокоманды, а также некоторые конкретные директивы будут рассмотрены ниже.

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

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

Таким образом, строка имеет следующий формат:

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

Здесь, как и обычно, при описании системы команд и синтаксиса языка, для обозначения необязательного элемента конструкции использованы квадратные скобки [ ]. Таким образом, метка, операнд, комментарий являются необязательными элементами и могут отсутствовать.

Примеры ассемблерных строк:

MM2

ADD

C

; команда сложения MM2 - метка

MM3:

 

 

 

 

SUB

D

команда вычитания MM3 - метка

Поле метки

Метка в общем случае является необязательным элементом ассемблерной строки. Для некоторых директив наличие метки обязательно. Метка начинается в первой позиции строки и может содержать (как и любой идентификатор) алфавитно-цифровые знаки (A-Z, a-z, 0-9, _ и S), первым из которых должна являться буква.

Если в первой позиции строки стоит пробел или символ (;), то считается, что метка отсутствует. Метка может заканчиваться двоеточием, которое не входит в состав метки.

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

Поле мнемоники

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

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

Поле операнда

Поле операнда определяет информацию, над которой в соответствии с командами производятся действия. Поле операнда начинается сразу за пробелом (или пробелами), заканчивающим поле мнемоники, и, в свою очередь, заканчивается одним или более пробелами. В поле операнда могут быть записаны константы, символы и выражения, состоящие из символов и констант. Эти конструкции языка описаны ниже. Если команда или директива требует нескольких операндов, то отдельные операнды разделяются запятыми, но не пробелами. Интерпретация поля операнда зависит от мнемоники соответствующей команды или директивы. Операнд определяет объекты, над которыми производятся операции, в качестве таких объектов могут быть конкретные значения (константы, переменные) или в какой-либо форме адреса конкретных значений (регистры процессора, ячейки памяти).

Основные конструкции ассемблера

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

Константы

Константа является величиной, которая не изменяется в течение всего времени выполнения программы. Константы могут быть числовые и строчные.

Числовые константы могут быть записаны в одной из трех систем счисления - двоичной десятичной или 16-ричной. Отрицательные константы ассемблером записываются в дополнительном коде (для положительных чисел представление в дополнительном и прямом кодах совпадают). Длина внутреннего представления константы равна 1 байт (8 двоичных разрядов) или 2 байта в зависимости от команды, с которой она используется.

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

H, h, $ - 16-ричная система,

@ (отсутствие спецификатора) - десятичная система,

B, b, % - двоичная система.

Если число в 16-ричной системе начинается с буквы, слева от нее должен быть дописан 0 (при спецификаторе H).

Пример

Коды команд

Команды

3E 0C

MVI A,12

3E 0A

MVI A,@12

3E 05

MVI A,5

3E FB

MVI A, -5

3E FA

MVI A,@ -6

3E A1

MVI A,0A1H

3E A1

MVI A,$A1

3E A1

MVI A,$0A1

3E 09

MVI A,1001B

3E 09

MVI A,%1001

C3 3456

JMP 03456h

В примере приведен фрагмент листинга, полученного в результате трансляции программы, команды которой приведены во второй колонке. В первой колонке приведены полученные коды. Вторым операндом во всех командах MVI являются константы, записанные в различных системах счисления. Первым байтом кода во всех этих случаях является код 3E, соответствующий MVI А. Константа, записываемая в регистр А, представлена в 16-ричной системе вторым байтом кода. Следует обратить внимание на запись чисел 5 и -5 в 3-й и 4-й командах. В команде JMP операндом является адрес перехода, который может иметь длину 2 байта.

Символы (символические имена)

Символы используются в качестве меток или (А–Z, a–z, 0–9, S и _ ) длиной до 31. В качестве знака в строке не может использоваться пробел. Заглавные и строчные буквы рассматриваемый ассемблер воспринимаeт как одинаковые (например, символы АВС и abc).

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

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

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

Некоторые символы (помимо мнемоник команд и директив ассемблера) являются стандартно определенными или предопределенными, т.е. они зарезервированы ассемблером и не могут использоваться в качестве идентификаторов. Таковыми являются, например, имена регистров РОН. Кроме того, не следует использовать символы x, y и M.

Выражения

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

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

Три главных фактора определяют порядок вычисления выражения:

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

Примеры выражений будут рассмотрены ниже.

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

Относительное содержит относительные (перемещаемые) величины, которые могут изменяться. Например, метки, которые могут меняться при изменении размещения программы в памяти (при компоновке).

Операторы

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

Логические операции выполняются поразрядно над совпадающими разрядами двух чисел. Результатом операции сравнения является логическое значение ДА/НЕТ (True/False), которое обозначается двоичным 1/0. Они записываются во все двоичные разряды чисел. Примеры будут приведены в выражениях ниже. Операторы LOW и HIGH определяют байт, который будет использован из слова длиной в 2 байта.

Таблица 1

Оператор

Операция

Пример

Комментарий (результат)

Арифметические операции

+

Унарный плюс

(знак числа)

+5

 

+

Сложение

Z+2

Сумма

-

Унарный минус

(знак числа)

-10

 

-

Вычитание

t - 7

Разность

*

Умножение

5*6

Произведение

/

Деление

8/3

Результатом будет целая часть частного: 2

MOD

Значение по модулю

31 MOD 6

31 по модулю 6
будет равно 1

Логические операции

NOT

Поразрядное НЕ

NOT 21

21= 15h Результат 0EA

AND

Поразрядное И

31 AND 1

Результат 1

OR

Поразрядное ИЛИ

31 OR 1

Результат 1Fh

XOR

Поразрядное сложение по модулю 2

31 XOR 1

Результат 1Eh

Операции сравнения

EQ

=

5 EQ 6

False - 0

NE

=/ (не равно)

5 NE 6

True - 1

LT

<

5 LT 1

False - 0

LE

<=

5 LE 5

True - 1

GT

>

6 GT 5

True - 1

GE

>=

7 GE 8

False - 0

Определение типа операнда

LOW

Младший байт слова

LOW 3456h

56h

HIGH

Старший байт слова

HIGH 3456h

34h

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

Ниже приведены примеры использования выражений в директивах и командах. Директивы будут рассмотрены далее. Здесь отметим только, что директивой equ, использованной в примерах, присваивается определенное значение символической переменной.

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

Для директив equ эти коды являются результатом вычисления выражения, являющегося операндом директивы.

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

=0003

k

equ

1+2

=0005

z

equ

5

=0008

t

equ

Z+3

=0007

k

equ

+7

=FFF9

l

equ

-7

=000A

x1

equ

10

=FFF7

x3

equ

1-X1

=0032

Y100

equ

x1*z

=FFFE

z4

equ

k-x1

=0002

u0

equ

4/2

=0002

n1

equ

7/3

=0002

n2

equ

8/3

=FFEA                     n3

equ

not 21

 

=0001

n4

equ

31 mod 6

=0001

n6

equ

31 And 1

=001F

n7

equ

31 or 1

=3456

n8

equ

3456h

0000' 3E 56

 

MVI

A, low n8

0002' 3E 34

 

MVI

A, high n8

=000D

u2

equ

2*6+1

=000E

u3

equ

2*(6+1)

=0000

n6

equ

5 EQ 6

=FFFF

N7

equ

6 le 10

=0000

u4

equ

2 LE 3 AND 2 EQ 5 ; результат FALSE

=FFFF

u5

equ

2 LE 3 AND 3 EQ 3 ; результат TRUE

=0000

u6

equ

2 LE 3 AND 3 EQ x1 ; результат FALSE

=0000

u10

equ

2 LE 3 AND 3 EQ y100 ; FALSE

=0000

u11

equ

2 LE 3 AND 3 EQ t ; результат FALSE

=0000

u12

equ

i LE z AND x1 EQ t

=0001

u15

equ

y2-two*(y2/two)

0006' 0E 0A

 

MVI

c,5*2

000A' 06 44

 

MVI

B,567+(6+7)

-----> test8.asm:62 ERROR 30: Operand out of range

-----> test8.asm:62 ERROR 22: Byte value not in the range -128..+255

0015' 21 0B13

 

LXI

H,567*5

0018' D6 0D

 

SUI

u2

001E' D6 FC

 

SUI

n1+2

0026' E6 0A

 

ANI

x1

005C' FE 01

 

CPL

u/2
  1   2   3   4   5   6   7   8


Министерство Российской Федерации по связи и информатизацииСанкт-Петербургский государственный университет телекоммуникаций им. проф. М.А. Бонч-Бруевича
Учебный материал
© nashaucheba.ru
При копировании укажите ссылку.
обратиться к администрации