Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦМПУ / Новая папка / Лаб5ЦМПУ.docx
Скачиваний:
19
Добавлен:
16.04.2015
Размер:
338.25 Кб
Скачать

На рис.1 Алгоритм реализации переключательной функции

Выполнение программы:

Самостоятельное задание на лабораторную работу

№ вар.

Задание

5

Реализовать программно функцию

.include "C:\VMLAB\include\m128def.inc"

;Символьные имена для Х1, Х2, Х3

.def X1 = r16

.def X2 = r17

.def X3 = r18

.def X4 = r19

;Символьные имена для

;промежуточных результатов Y1, Y2, Y3

.def Y1 = r20

.def Y2 = r21

.def Y3 = r22

;Результат

.def Y = r23

reset:

rjmp start

reti ; Addr $01

reti ; Addr $02

reti ; Addr $03

reti ; Addr $04

reti ; Addr $05

reti ; Addr $06 Use 'rjmp myVector'

reti ; Addr $07 to define a interrupt vector

reti ; Addr $08

reti ; Addr $09

reti ; Addr $0A

reti ; Addr $0B This is just an example

reti ; Addr $0C Not all MCUs have the same

reti ; Addr $0D number of interrupt vectors

reti ; Addr $0E

reti ; Addr $0F

reti ; Addr $10

start:

;Присвоение числовых значений регистрам

ldi X1, 1

ldi X2, 2

ldi X3, 3

ldi X4, 4

;Первое умножение

mov Y1, X3

com X2

and Y1, X2

and Y1, X1

;Второе умножение

mov Y2, X4

and Y2, X3

and Y2, X1

;Третье умножение

com X4

mov Y3, X4

;Сложение всех умножений

or Y1, Y2

or Y1, Y3

mov Y, Y1 ;Результат

.exit

Выполнение программы:

Блок-схема программы:

Начало

Подключение файла m128def.inc

.include "C:\VMLAB\include\m128def.inc"

Присвоение символьных имён регистрам, загрузка символьных имён массивов, введение промежуточных переменных

.def X1 = r16 .def X2 = r17 .def X3 = r18 .def X4 = r19

;Символьные имена для промежуточных результатов Y1, Y2, Y3

.def Y1 = r20 .def Y2 = r21 .def Y3 = r22

;Результат .def Y = r23

Третье умножение: 4:

com X4

mov Y3, X4

Конец

Первое умножение:

mov Y1, X3

com X2

and Y1, X2

and Y1, X1

Второе умножение:

mov Y2, X4

and Y2, X3

and Y2, X1

Сложение всех умножений:

or Y1, Y2

or Y1, Y3

Пересылка итого результата в Y:

mov Y, Y1

Присвоение числовых значений регистрам:

ldi X1, 1 ldi X2, 2 ldi X3, 3 ldi X4, 4

Индивидуальное задание:

Варианты для индивидуальной работы

№ вар.

Задание

1

Дан массив А из 10 однобайтовых чисел, содержащий число 0хАА. Выполнить операцию "логическое И" над всеми числами до 0xАА и операцию "логическое ИЛИ" над всеми числами после него.

.include "C:\VMLAB\include\m128def.inc"

;Присвоение символьных имен регистрам

.def A0 = r16

.def A1 = r17

.def A2 = r18

.def A3 = r19

.def A4 = r20

.def A5 = r21

.def A6 = r22

.def A7 = r23

.def A8 = r24

.def A9 = r25

.def temp1 = r26

.def temp2 = r27

reset:

rjmp start

reti ; Addr $01

reti ; Addr $02

reti ; Addr $03

reti ; Addr $04

reti ; Addr $05

reti ; Addr $06 Use 'rjmp myVector'

reti ; Addr $07 to define a interrupt vector

reti ; Addr $08

reti ; Addr $09

reti ; Addr $0A

reti ; Addr $0B This is just an example

reti ; Addr $0C Not all MCUs have the same

reti ; Addr $0D number of interrupt vectors

reti ; Addr $0E

reti ; Addr $0F

reti ; Addr $10

start:

;Присвоение регистрам числовых значений

ldi temp1, 0xAA

ldi A0, 0

ldi A1, 1

ldi A2, 2

ldi A3, 3

ldi A4, 4

ldi A5, 0xAA

ldi A6, 6

ldi A7, 7

ldi A8, 8

ldi A9, 9

cp A0, temp1 ;Если А0 не равно числу

brne M0 ;Переход на метку М0, иначе будут выполняться след. действия

mov temp2, A1 ;Пересылка А1 в регистр для общ. суммы или умножения

or temp2, A2 ;Постепенное сложение

or temp2, A3

or temp2, A4

or temp2, A5

or temp2, A6

or temp2, A7

or temp2, A8

or temp2, A9 ;Результат в temp2

break ;Выход из программы

M0: mov temp2, A0

cp A1, temp1 ;Если равно переход на M1

breq M1 ;Если не равно переход на след действие

and temp2, A1

cp A2, temp1 ;Если равно переход на M2

breq M2 ;Если не равно переход на след действие

and temp2, A2

cp A3, temp1 ;Если равно переход на M3

breq M3 ;Если не равно переход на след действие

and temp2, A3

cp A4, temp1 ;Если равно переход на M4

breq M4 ;Если не равно переход на след действие

and temp2, A4

cp A5, temp1 ;Если равно переход на M5

breq M5 ;Если не равно переход на след действие

and temp2, A5

cp A6, temp1 ;Если равно переход на M6

breq M6 ;Если не равно переход на след действие

and temp2, A6

cp A7, temp1 ;Если равно переход на M7

breq M7 ;Если не равно переход на след действие

and temp2, A7

cp A8, temp1 ;Если равно переход на M8

breq M8 ;Если не равно переход на след действие

and temp2, A8

cp A9, temp1 ;Если равно переход на M9

breq M9 ;Если не равно переход на след действие

and temp2, A9

break ;Выход из программы

M1: mov temp2, A2

or temp2, A3

or temp2, A4

or temp2, A5

or temp2, A6

or temp2, A7

or temp2, A8

or temp2, A9

break ;Выход из программы

M2: mov temp2, A3

or temp2, A4

or temp2, A5

or temp2, A6

or temp2, A7

or temp2, A8

or temp2, A9

break ;Выход из программы

M3: mov temp2, A4

or temp2, A5

or temp2, A6

or temp2, A7

or temp2, A8

or temp2, A9

break ;Выход из программы

M4: mov temp2, A5

or temp2, A6

or temp2, A7

or temp2, A8

or temp2, A9

break ;Выход из программы

M5: mov temp2, A6

or temp2, A7

or temp2, A8

or temp2, A9

break ;Выход из программы

M6: mov temp2, A7

or temp2, A8

or temp2, A9

break ;Выход из программы

M7: mov temp2, A8

or temp2, A9

break ;Выход из программы

M8: mov temp2, A9

break ;Выход из программы

M9: ldi temp2, 0

break ;Выход из программы

.exit

Выполнение программы:

Блок-схема программы:

Начало

Подключение файла m128def.inc

.include "C:\VMLAB\include\m128def.inc"

Присвоение символьных имён регистрам, загрузка символьных имён массивов, введение промежуточных переменных

.def A0 = r16 .def A1 = r17 .def A2 = r18 .def A3 = r19

.def A4 = r20 .def A5 = r21 .def A6 = r22 .def A7 = r23

.def A8 = r24 .def A9 = r25 .def temp1 = r26 .def temp2 = r27

Присвоение числовых значений регистрам:

ldi temp1, 0xAA ldi A0, 0 ldi A1, 1

ldi A2, 2 ldi A3, 3 ldi A4, 4

ldi A5, 0xAA ldi A6, 6 ldi A7, 7

ldi A8, 8 ldi A9, 9

A0=temp1

Да

Пересылка А1 в регистр

для общей суммы

mov temp2, A1

Нет М0

Пересылка А0 в регистр

для общей суммы

mov temp2, A0

Постепенное сложение всех элементов и помещение результата в temp2

or temp2, A2 or temp2, A3

or temp2, A4 or temp2, A5

or temp2, A6 or temp2, A7

or temp2, A8 or temp2, A9

Да М1

A1=temp1

Нет

Пересылка А2 в регистр

для общей суммы

mov temp2, A2

Умножение чисел

and temp2, A1

A2=temp1

Да М2

Постепенное сложение всех элементов и помещение результата в temp2

or temp2, A3 or temp2, A4 or temp2, A5 or temp2, A6 or temp2, A7 or temp2, A8 or temp2, A9

Нет

Пересылка А3 в регистр

для общей суммы

mov temp2, A3

Умножение чисел

and temp2, A2

Постепенное сложение всех элементов и помещение результата в temp2

or temp2, A4 or temp2, A5

or temp2, A6 or temp2, A7

or temp2, A8 or temp2, A9

A3=temp1

Да М3

Нет

Пересылка А4 в регистр

для общей суммы

mov temp2, A4

Умножение чисел

and temp2, A3

1

2

3

4

5

1

A4=temp1

Да М4

2

4

Постепенное сложение всех элементов и помещение результата в temp2

or temp2, A5

or temp2, A6 or temp2, A7

or temp2, A8 or temp2, A9

3

5

Нет

Пересылка А5 в регистр

для общей суммы

mov temp2, A5

Умножение чисел

and temp2, A4

A5=temp1

Да М5

Постепенное сложение всех элементов и помещение результата в temp2

or temp2, A6 or temp2, A7

or temp2, A8 or temp2, A9

Нет

Пересылка А6 в регистр

для общей суммы

mov temp2, A6

Умножение чисел

and temp2, A5

A6=temp1

Да М6

Постепенное сложение всех элементов и помещение результата в temp2

or temp2, A7

or temp2, A8 or temp2, A9

Нет

Пересылка А7 в регистр

для общей суммы

mov temp2, A7

Умножение чисел

and temp2, A6

Да М7

A7=temp1

Постепенное сложение всех элементов и помещение результата в temp2

or temp2, A8 or temp2, A9

Нет

Пересылка А8 в регистр

для общей суммы

mov temp2, A8

Умножение чисел

and temp2, A7

A8=temp1

Да М8

Постепенное сложение всех элементов и помещение результата в temp2

or temp2, A9

Нет

Пересылка А8 в регистр

для общей суммы

mov temp2, A8

Умножение чисел

and temp2, A8

A9=temp1

Да М9

Нет

Обнуление регистра

результата

ldi temp2, 0

Умножение чисел

and temp2, A9

Конец

30

Соседние файлы в папке Новая папка