Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

МУ_2542_МПТ_Тарабардин_2010

.pdf
Скачиваний:
32
Добавлен:
09.04.2015
Размер:
446.13 Кб
Скачать

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

Ранее были рассмотрены элементарные задачи вычислительного характера. Все они были линейного типа, т.е. команды выполнялись в той последовательности, в которой они записаны в память. На практике чисто линейные программы почти не встречаются. В прикладных программах обязательно встречаются нелинейные участки, где порядок выполнения команд может изменяться в зависимости от значения каких либо переменных, используемых в программе. Речь идёт о вызове подпрограмм, условных переходах и построенных на базе их циклах [5].

Под условными переходами понимается переход процессора к выполнению команды с указанным в программе адресом при выполнении какого-либо условия. Это осуществляется путём установки значения счётчика PC равным нужному адресу. В качестве таких условий чаще всего выступают равенство нулю результата выполнения предыдущей команды либо перенос единичного бита в старший разряд в результате выполнения арифметической или логической операции. Факт нулевого результата и переноса всегда фиксируется в битах флагового регистра состояния F. Существуют также безусловные переходы, когда выполнение указанной команды начинается без условия, т.е. в любом случае.

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

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

Таблица 1

Команды логических операций и передачи управления

Команд

Синтаксис

Назначение

 

Пример использования

 

Раз-

п/п

а

 

 

 

 

 

 

 

 

 

 

 

мер

1

2

3

 

4

 

 

 

5

 

 

 

 

6

1

RRC

RRC

Циклический

сдвиг

вправо

MVI A,01000111b

 

 

 

 

1

 

 

 

содержимого аккумулятора.

RRC

 

 

 

 

 

 

 

 

 

 

 

 

 

Результатом

выполнения

дан-

 

 

 

 

 

 

 

ной программы будет сдвиг всех

 

 

 

 

 

 

 

битов исходного числа на 1

 

 

 

 

 

 

 

вправо. При этом младший бит

 

 

 

 

 

 

 

исходного числа переносится в

 

 

 

 

 

 

 

старший

 

разряд.

 

Т.е.

 

 

 

 

 

 

 

результатом

 

будет

запись

в

 

 

 

 

 

 

 

аккумулятор числа 10100011b.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

RLC

RLC

Циклический

сдвиг

влево

MVI A,01000111b

 

 

 

 

1

 

 

 

содержимого аккумулятора.

RLC

 

 

 

 

 

 

 

 

 

 

 

 

 

Команда

по

своей

сути

 

 

 

 

 

 

 

противоположна

команде

RRC.

 

 

 

 

 

 

 

Результатом

будет

запись

в

 

 

 

 

 

 

 

аккумулятор числа 10001111b.

 

 

1

2

3

 

 

4

 

 

 

 

 

 

 

5

 

 

 

6

3

CMP

CMP R

Сравнение

содержимого ре-

CMP B – если содержимое регис-

1

 

 

CMP M

гистра R или ячейки памяти M

тров B и A совпадают, то в бит

 

 

 

 

с содержимым аккумулятора.

 

признака нулевого результата ре-

 

 

 

 

 

 

 

 

 

 

 

гистра F будет записана единица,

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

записан ноль.

 

 

 

 

 

 

4

JC

JC ADR

Переход

 

к

выполнению

JC 0105h – переход к выполнению

3

 

 

JC L

команды с адресом ADR или

команды с адресом 0105h в слу-

 

 

 

 

записанной в программе после

чае, если бит переноса в регистре

 

 

 

 

метки L в том случае, если в

состояния F

имеет

единичное

 

 

 

 

результате выполнения пре-

значение;

 

 

 

 

 

 

 

 

 

дыдущей команды произошёл

JC LABEL1 – переход к выполне-

 

 

 

 

перенос

единичного

бита

в

нию команды,

записанной в про-

 

 

 

 

старший или младший разряд.

грамме

после

 

метки

LABEL1,

в

 

 

 

 

Другими словами, переход бу-

случае, если бит переноса в ре-

 

 

 

 

дет выполнен в случае еди-

гистре

состояния

F

имеет

 

 

 

 

ничного

бита

переноса

в

единичное значение.

 

 

 

 

 

 

 

регистре состояния F.

 

 

 

 

 

 

 

 

 

 

 

5

JNC

JNC ADR

Переход к выполнению коман-

JNC 0105h – переход к выполне-

3

 

 

JNC L

ды с адресом ADR или запи-

нию команды с адресом 0105h в

 

 

 

 

санной

в

программе

после

случае,

если

 

бит

переноса

в

 

 

 

 

метки L в том случае, если в

регистре

состояния

F

имеет

 

 

 

 

результате

выполнения

пре-

нулевое значение;

 

 

 

 

 

 

 

дыдущей команды не произо-

JNC LABEL1 – переход к выполне-

 

 

 

 

шёл перенос единичного бита

нию команды,

записанной

в

 

 

 

 

в старший или младший раз-

программе после метки LABEL1, в

 

 

 

 

ряд.

 

 

 

 

 

 

случае,

если

 

бит

переноса

в

 

 

 

 

 

 

 

 

 

 

 

регистре

состояния

F

имеет

 

 

 

 

 

 

 

 

 

 

 

нулевое значение.

 

 

 

 

6

JZ

JZ ADR

Переход к выполнению коман-

JZ 0105h – переход к выполнению

3

 

 

JZ L

ды с адресом ADR или запи-

команды с адресом 0105h, если

 

 

 

 

санной

в

программе

после

бит переноса в регистре состоя-

 

 

 

 

метки L

в

том

случае,

если

ния F имеет единичное значение;

 

 

 

 

 

результат выполнения преды-

JZ LABEL1 – переход к выполне-

 

 

 

 

дущей команды равен нулю.

нию команды, записанной в про-

 

 

 

 

Другими

словами,

переход

грамме

после

 

метки

LABEL1,

в

 

 

 

 

будет выполнен в случае еди-

случае,

если

 

бит

переноса

в

 

 

 

 

ничного бита нулевого резуль-

регистре

состояния

F

имеет

 

 

 

 

тата в регистре состояния F.

 

единичное значение.

 

 

 

 

7

JNZ

JNZ ADR

Переход

 

к

выполнению

JNZ 0105h – переход к выполне-

3

 

 

JNZ L

команды с адресом ADR или

нию команды с адресом 0105h в

 

 

 

 

записанной в программе после

случае,

если

 

бит

переноса

в

 

 

 

 

метки L

в

том

случае,

если

регистре

состояния

F

имеет

 

 

 

 

результат выполнения преды-

единичное значение;

 

 

 

 

 

 

 

дущей

команды не

 

равен

JNZ LABEL1 – переход к выполне-

 

 

 

 

нулю. Другими словами,

пере-

нию команды,

записанной

в

 

 

 

 

ход будет выполнен в том слу-

программе после метки LABEL1, в

 

 

 

 

чае, если бит нулевого резуль-

случае,

если

 

бит

переноса

в

 

 

 

 

тата в регистре

состояния

F

регистре

состояния

F

имеет

 

 

 

 

равен нулю.

 

 

 

 

 

единичное значение.

 

 

 

 

8

JMP

JMP ADR

Переход к выполнению коман-

JMP 0105h – переход к выполне-

3

 

 

JMP L

ды с адресом ADR или запи-

нию команды с адресом 0105h;

 

 

 

 

 

санной

в

программе

после

JMP LABEL1 – переход по метке.

 

 

 

 

 

метки L в любом случае.

 

 

 

 

 

 

 

 

 

 

Оборудование для выполнения работы

Работа выполняется на ПК с операционной системой Windows NT/2000/XP в среде отладки CPM.

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

1. В качестве примера рассмотрим задачу вычисления количества нулевых бит в 8-разрядном двоичном числе. Блок-схема алгоритма программы, решающей эту задачу, представлена на рис. 1.

 

Рис. 1. Блок-схема алгоритма программы

2. Текст рассматриваемой программы приведён ниже.

org 100h

;Установка начального адреса программы

mvi A,01000101b ;Запись в аккумулятор исходного числа

mvi D,8

;Установка счётчика цикла

mvi B,0

;Установка начального результата

L2:

;Метка возврата цикла

rrc

;Сдвиг числа вправо на 1 бит

jc L1

;Если в результате выполнения команды RRC

 

;был осуществлён перенос единичного бита в старший

 

;разряд, то выполняется команда по метке L1 (dcr D)

inr B

;Иначе счётчик нулей B увеличивается на 1

L1:

;Метка перехода по условию jc L1

dcr D

;Уменьшение счётчика цикла на 1

jnz L2

;Если счётчик цикла не достиг нуля цикл выполняется заново

end

;Конец программы

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

3. Самостоятельно решите задачу вычисления количества единичных разрядов 8-битного двоичного числа.

Содержание отчёта

1.Титульный лист работы.

2.Формулировка цели и задач работы.

3.Описание и результаты используемых операций.

4.Краткие выводы по проделанной работе.

Контрольные вопросы

1.Перечислите известные Вам команды логических операций.

2.Выполнение каких команд может повлечь за собой установку бита нулевого результата в регистре состояния F?

3.Выполнение каких команд может повлечь за собой установку бита переноса в регистре состояния F?

4.Какие команды передачи управления Вы знаете?

ЛАБОРАТОРНАЯ РАБОТА №5 ЛОГИЧЕСКИЕ ОПЕРАЦИИ

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

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

Логическими операциями будем называть операции над отдельными битами байта данных. В программировании существует 4 разновидности логических операций: логическое « и» (AND), логическое « или» (OR), логическое « не» (отрицание, NOT) и исключающее « или» (XOR). Все операции, кроме отрицания, являются бинарными, т.е. выполняются над двумя операндами. Логическое « не» является унарной операцией, т.е. выполняется над одним операндом.

Логические операции рассмотрим применительно к отдельным битам блока данных. Это связано с тем, что логические значения представляются в памяти как один бит, нулевое значение которого соответствует логическому значению « ложь» (FALSE, или 0), а единичное – « истина» (TRUE, или 1). В табл. 1. приведены логические операции.

 

 

 

 

 

 

 

 

 

Таблица 1

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

№ пп

Операнд

 

Операнд

AND

 

OR

XOR

NOT

Пример

1.

0

 

0

0

 

0

0

-

0 AND 1 = 0

2.

0

 

1

0

 

1

1

-

1 OR 0 = 1

3.

1

 

0

0

 

1

1

-

 

 

 

4.

1

 

1

1

 

1

0

-

1 XOR 1 = 0

5.

 

0

-

 

-

-

1

NOT 1 = 0

6.

 

1

-

 

-

-

0

 

 

 

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

логического « и», поразрядного « или» и т.п.

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

Оборудование для выполнения работы

Работа выполняется на ПК с операционной системой Windows NT/2000/XP в среде отладки CPM.

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

1.Дано число 00000101b. Необходимо произвести логическое отрицание каждого бита этого числа. В результате должно быть получено число 11111010b.

2.Рассмотрим алгоритм работы программы, решающей данную задачу. Блок-схема алгоритма представлена на рис. 1.

3.Текст программы на языке Assembler для микропроцессора i8080 приведён ниже.

org 100h

 

mvi A, 00000101b

;Исходное число

mvi B, 10000000b

;Вспомогательное число (целая степень двух)

mvi D,0

;Результат

mvi H,8

;Количество итераций

L3:

;Возврат из конца цикла

mvi E,0

;Пользовательский признак переноса

rrc

;Определение последнего бита числа А

jnc L1

;Если последний бит 0, то пропустить mvi E,1

mvi E,1

;Установка пользовательского признака переноса

L1:

 

mov C,A

;Запоминание А в С

mov A,B

;Вспомогательное число пишем в А

rlc

;"Продвижение" единицы вспомогательного

 

;числа влево

mov B,A

;возврат вспомогательного числа в B

dcr E

;Уменьшение Е для определения признака переноса

jz L2

;В случае переноса (при Е=0 после

 

;декремента) следует пропустить два

 

;последующих действия

add D

;Если переноса не было (Е=FFh после

 

;декремента), т.е. в последнем бите

 

;исходного числа был ноль и его необходимо

 

;установить в 1, то А (вспомогательное

 

;число) суммируется с предыдущим результатом

mov D,A;

;другими словами, к результату добавляется

 

;соответствующая (текущая) степень двойки,

 

;т.е. ставится единица в соответствующий бит

L2:

;переход по jz L2

mov A,C

;возврат в А рабочее число

dcr H

;уменьшение счётчика на 1

jnz L3

;возврат к началу цикла

end

 

Рис. 1. Блок-схема алгоритма рассмотренной программы

4. В таблице 1 показан ход выполнения рассмотренной программы: содержимое регистров и флагов переноса и нулевого результата в процессе

Таблица 1

Ход выполнения программы

 

Ш

Ите-

 

 

 

 

 

 

 

 

а

ра-

A

B

C

D

E

H

FC

FZ

 

г

ция

 

 

 

 

 

 

 

 

1

1

1

0110 0101

0000 0000

0000 0000

0000 0000

0000 0000

0000 0000

0

0

2

2

1

0110 0101

1000 0000

0000 0000

0000 0000

0000 0000

0000 0000

0

0

3

3

1

0110 0101

1000 0000

0000 0000

0000 0000

0000 0000

0000 0000

0

0

4

4

1

0110 0101

1000 0000

0000 0000

0000 0000

0000 0000

0000 1000

0

0

5

5

1

0110 0101

1000 0000

0000 0000

0000 0000

0000 0000

0000 1000

0

0

6

6

1

1011 0010

1000 0000

0000 0000

0000 0000

0000 0000

0000 1000

1

0

7

8

1

1011 0010

1000 0000

0000 0000

0000 0000

0000 0001

0000 1000

1

0

8

9

1

1011 0010

1000 0000

1011 0010

0000 0000

0000 0001

0000 1000

1

0

9

10

1

1000 0000

1000 0000

1011 0010

0000 0000

0000 0001

0000 1000

1

0

10

11

1

0000 0001

1000 0000

1011 0010

0000 0000

0000 0001

0000 1000

1

0

11

12

1

0000 0001

0000 0001

1011 0010

0000 0000

0000 0001

0000 1000

1

0

12

13

1

0000 0001

0000 0001

1011 0010

0000 0000

0000 0000

0000 1000

0

1

13

17

1

1011 0010

0000 0001

1011 0010

0000 0000

0000 0000

0000 1000

0

1

14

18

1

1011 0010

0000 0001

1011 0010

0000 0000

0000 0000

0000 0111

0

0

15

5

2

1011 0010

0000 0001

1011 0010

0000 0000

0000 0000

0000 0111

0

0

16

6

2

0101 1001

0000 0001

1011 0010

0000 0000

0000 0000

0000 0111

0

0

17

9

2

0101 1001

0000 0001

0101 1001

0000 0000

0000 0000

0000 0111

0

0

18

10

2

0000 0001

0000 0001

0101 1001

0000 0000

0000 0000

0000 0111

0

0

19

11

2

0000 0010

0000 0001

0101 1001

0000 0000

0000 0000

0000 0111

0

0

20

12

2

0000 0010

0000 0010

0101 1001

0000 0000

0000 0000

0000 0111

0

0

21

13

2

0000 0010

0000 0010

0101 1001

0000 0000

1111 1111

0000 0111

1

0

22

15

2

0000 0010

0000 0010

0101 1001

0000 0000

1111 1111

0000 0111

0

0

23

16

2

0000 0010

0000 0010

0101 1001

0000 0010

1111 1111

0000 0111

0

0

24

17

2

0101 1001

0000 0010

0101 1001

0000 0010

1111 1111

0000 0111

0

0

25

18

2

0101 1001

0000 0010

0101 1001

0000 0010

1111 1111

0000 0110

0

0

26

5

3

0101 1001

0000 0010

0101 1001

0000 0010

0000 0000

0000 0110

0

0

27

6

3

1010 1100

0000 0010

0101 1001

0000 0010

0000 0000

0000 0110

1

0

28

8

3

1010 1100

0000 0010

0101 1001

0000 0010

0000 0001

0000 0110

1

0

29

9

3

1010 1100

0000 0010

1010 1100

0000 0010

0000 0001

0000 0110

1

0

30

10

3

0000 0010

0000 0010

1010 1100

0000 0010

0000 0001

0000 0110

1

0

31

11

3

0000 0100

0000 0010

1010 1100

0000 0010

0000 0001

0000 0110

0

0

32

12

3

0000 0100

0000 0100

1010 1100

0000 0010

0000 0001

0000 0110

0

0

33

13

3

0000 0100

0000 0100

1010 1100

0000 0010

0000 0000

0000 0110

0

1

34

17

3

1010 1100

0000 0100

1010 1100

0000 0010

0000 0000

0000 0110

0

1

35

18

3

1010 1100

0000 0100

1010 1100

0000 0010

0000 0000

0000 0101

0

0

36

5

4

1010 1100

0000 0100

1010 1100

0000 0010

0000 0000

0000 0101

0

0

37

6

4

0101 0110

0000 0100

1010 1100

0000 0010

0000 0000

0000 0101

0

0

38

9

4

0101 0110

0000 0100

0101 0110

0000 0010

0000 0000

0000 0101

0

0

39

10

4

0000 0100

0000 0100

0101 0110

0000 0010

0000 0000

0000 0101

0

0

40

11

4

0000 1000

0000 0100

0101 0110

0000 0010

0000 0000

0000 0101

0

0

41

12

4

0000 1000

0000 1000

0101 0110

0000 0010

0000 0000

0000 0101

0

0

42

13

4

0000 1000

0000 1000

0101 0110

0000 0010

1111 1111

0000 0101

1

0

43

15

4

0000 1010

0000 1000

0101 0110

0000 0010

1111 1111

0000 0101

0

0

44

16

4

0000 1010

0000 1000

0101 0110

0000 1010

1111 1111

0000 0101

0

0

45

17

4

0101 0110

0000 1000

0101 0110

0000 1010

1111 1111

0000 0101

0

0

46

18

4

0101 0110

0000 1000

0101 0110

0000 1010

1111 1111

0000 0100

0

0

выполнения программы. Жирным шрифтом выделены изменения, вносимые каждой командой. Подчёркиванием выделен текущий результат. В этой таблице показано выполнение примерно половины программы. В столбце D строки 44 можно увидеть, что младшие 4 бита исходного байта изменились на противоположные значения. Если продолжить выполнение программы, то изменятся и старшие 4 бита в соответствии с заданным алгоритмом, и конечный результат будет равен 10010101b.

5. Самостоятельно опишите алгоритм и реализующую его программу для записи бит исходного числа в обратном порядке (например, для числа 10010101b результат должен быть 10101001b).

Содержание отчёта

1.Титульный лист работы.

2.Формулировка цели и задач работы.

3.Описание и результаты используемых операций.

4.Краткие выводы по проделанной работе.

Контрольные вопросы

1.Перечислите основные логические операции.

2.Каково отличие операции логического « или» от операции исключающего логического « или»?

3.Какие команды языка Assembler предназначены для выполнения логических операций?

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

ЛАБОРАТОРНАЯ РАБОТА №6 ОБРАБОТКА МАССИВОВ ДАННЫХ

Цель работы: изучение механизмов записи и чтения массивов данных.

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

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

Обрабатываемые данные, как правило, организованы в виде массивов, и обращение к ним как к операндам выполняется последовательно в соседние ЯП.

Это свойство называется пространственной локальностью данных [1,2].

Свойство пространственной локальности данных удобно использовать при обработке последовательного потока данных большого объёма. В этом случае в качестве адресов операндов в командах микропроцессора используется содержимое ячеек памяти или регистров, указанных в команде. Такой вид адресации операндов называется косвенной или косвенно-регистровой адресацией [1,2].

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

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

Оборудование для выполнения работы

Работа выполняется на ПК с операционной системой Windows NT/2000/XP в среде отладки CPM.

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

1.Рассмотрим пример обработки числового массива. Дан массив с начальным адресом 200h и длиной 8 (данные массива занимают 8 соседних ячеек памяти с адресами 200h, 201h, …, 207h). Необходимо записать в массив с начальным адресом 2A0h чётные элементы первого массива.

2.Алгоритм работы программы, выполняющей данную задачу, следующий. Устанавливаются адрес первого элемента исходного массива и первый адрес нового массива. Далее организуется цикл. В начале цикла элемент исходного массива с указанным адресом проверяется на чётность путём сдвига вправо. Если элемент чётный, то его значение записывается в ЯП с адресом, указанным

вкачестве адреса второго массива, после чего адрес нового массива увеличивается на 1. Далее адрес исходного массива увеличивается на 1, а счётчик цикла, изначально равный известному априори количеству элементов в исходном массиве, уменьшается на 1. Если значение счётчика не достигло нуля, то происходит возврат в начало цикла.

3.Блок-схема алгоритма рассматриваемой программы показана на рис. 1.

4.Текст программы, реализующей данный алгоритм, приведён ниже.

org 100h

 

 

mvi A,1

 

 

sta 200h

 

 

mvi A,5

 

;Запись

sta 201h

 

;в память

.

 

;элементов

.

 

;исходного

.

 

;массива

mvi A,30h

 

 

sta 207h

 

 

mvi B,8

 

;Инициализация счётчика цикла

lxi H,200h

;Установка начального адреса исходного массива

lxi D,2A0h

;Установка начального адреса целевого массива

M1:

 

;Начало цикла

mov A,M

 

;Запись в A текущего элемента исходного массива

rrc

;Сдвиг содержимого A вправо для проверки на чётность

jc M2

;Если число нечётное, то последующие три

 

;действия не выполняются

mov A,M

;В аккумулятор снова записывается элемент массива

stax D

;и записывается в целевой массив

inx D

;Увеличение адреса целевого массива

M2:

 

inx H

;Увеличение адреса исходного массива

dcr B

;Уменьшение счётчика цикла

jnz M1

;Возврат в начало цикла, если счётчик не достиг нуля

hlt

 

Рис. 1. Блок-схема алгоритма программы

5.Результатом работы программы является массив с начальным адресом 2A0h, в который записаны чётные элементы исходного массива.

6.Самостоятельно составьте алгоритм и программу для нахождения нечётных элементов массива.

Содержание отчёта

1.Титульный лист работы.

2.Формулировка цели и задач работы.

3.Описание и результаты используемых операций.

4.Краткие выводы по проделанной работе.

Контрольные вопросы

1.Опишите механизм обмена данными между массивами.

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

3.Опишите синтаксис и назначение используемых в работе команд.