ЛАБОРАТОРНАЯ РАБОТА № 1 АЛГОРИТМЫ АРИФМЕТИЧЕСКОЙ ОБРАБОТКИ ДАННЫХ
Автор: drug | Категория: Технические науки / Автоматизация | Просмотров: | Комментирии: 0 | 21-07-2013 15:38

ЛАБОРАТОРНАЯ РАБОТА № 1

АЛГОРИТМЫ АРИФМЕТИЧЕСКОЙ ОБРАБОТКИ ДАННЫХ

 

         Перечень команд для выполнения арифметических действий приведен в приложении.

         Приведем пример программы деления, для чего составим программу деления 8-разрядных двоичных чисел без знака для следующего распределения регистров: R16 – делимое, R17 – делитель, R18 – частное, R19 – остаток, R20 – счётчик циклов.

         Алгоритм деления состоит в следующем. Делимое сдвигается на один бит влево, его старший бит передается во флаг переноса, а остальные биты возвращаются в регистр R16. Бит делимого сдвигается в младший разряд остатка (регистр R19), затем из остатка вычитается делитель. Если при вычитании возникает заём, то остаток восстанавливается с помощью команды сложения. После этого флаг переноса поступает в младший бит регистра R18, который затем

инвертируется. Этот процесс повторяется 8 раз.

         Программа, реализующая описанный алгоритм, имеет вид:

 

 

 

.include "m32def.inc"

 

ldi r16,0xFF ;Делимое

ldi r17,0x0A;Делитель

ldi r18,0 ;Частное

ldi r19,0 ;Остаток

ldi r20,8 ;Число циклов

ldi r21,1 ;Вспомогательный для инвертирования с помощью исключающего ИЛИ

 

clc ;Сброс С

 

loop:

lsl r16               ; Сдвиг влево. Во младший раряд задвигается 0

rol r19              ; Бит делимого сдвигается в младший разряд остатка

sub r19,r17      ; Вычитание делителя из остатка

brge m1             ; Остаток больше нуля? 

add r19,r17        ; Нет. Восстановление остатка

m1:

rol r18                ; Задвигаем флаг переноса в младший бит частного

eor r18,r21         ; Инвертируем последний разряд

dec r20

brne loop            ;Цикл 8 раз

 

end: rjmp end

 

 

 

Задания на лабораторную работу

 

         1. Написать программы сложения (вычитания) 8-ми разрядных двоичных чисел, одно из которых содержится в регистре Ri, второе – в регистре Rj. Результат поместить в регистр Ri.

 

Вариант

Ri

Rj

1

r16

r17

2

r16

r18

3

r16

r19

4

r16

r20

5

r17

r21

6

r17

r22

7

r17

r18

8

r17

r19

 

Программы проверить на примерах.

 

2. Написать программы сложения и вычитания 16-разрядных двоичных чисел, одно из которых содержится в регистрах Ri, Rj, а второе – в ячейках RAM с адресами Адрес1, Адрес1+1. Результат поместить в ячейки RAM c адресами Адрес2, Адрес2+1.

 

Вариант

Ri

Rj

Адрес 1

Адрес 2

1

r16

r17

0x60

0x62

2

r16

r18

0x70

0x72

3

r16

r19

0x80

0x82

4

r16

r20

0x90

0x92

5

r17

r21

0x9A

0x75

6

r17

r22

0x9B

0x85

7

r17

r18

0x9C

0x92

8

r17

r19

0x9D

0x94

 

 

Программы проверить на примерах.

 

3. Написать программу, осуществляющую умножение 8-ми разрядного операнда на постоянный коэффициент К. Адрес операнда – ячейка RAM 0x60+№, адрес результата – ячейки RAM 0x70+№, 0x70+№+1, значение коэффициента К = № + 8; где № – номер бригады.

 

4. Написать программу, осуществляющую деление 8-ми разрядного операнда на постоянный коэффициент К. Адрес операнда – ячейка RAM 0x60+№, адрес результата – регистр R18, значение коэффициента К = № + 5.

Сочинения курсовыеСочинения курсовые