Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Отчет по лабораторной работе по курсу Микропроцессорные системы АРИФМЕТИЧЕСКАЯ ОБРАБОТКА ДАННЫХ

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 21.5.2024

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

«Московский государственный технический университет имени Н.Э. Баумана»

(МГТУ им. Н.Э. Баумана)

Факультет «Информатика и системы управления»

Кафедра «Компьютерные системы и сети»

Отчет по лабораторной работе

по курсу «Микропроцессорные системы»

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

Исполнители

студ. гр. ИУ 6-71 ___________ М.И. Жильников

студ. гр. ИУ 6-71 ___________ В.Э. Подольский

Преподаватель

___________ В.Я. Хартов

2011

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

Практическая часть.

Задание 1:

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

Результат вычислений приведен в таблице 1.

Таблица 1 – Таблица результатов операции сложения

А10

А2

В10

В2

R10

R2

Признаки:

H  S  V N Z C

122

01111010

64

01000000

186

10111010

0  0  1 1  0  0

+105

01101001

+106

01101010

-45

11010011

1  0  1 1  0  0

-118

10001010

+112

01110000

-6

11111010

0  1  0 1  0  0

-42

11010110

+120

01111000

+78

01001110

0  0  0 0  0  1

-90

10100110

-32

11100000

-122

10000110

0  1  0 1  0  1

Для отображения признаков результата используются флаги :

C – перенос при сложении (заем при вычитании), Z – признак нулевого результата,

N – знак результата при операциях с числами со знаком, V – переполнение разрядной сетки, S=NV – знак результата вне зависимости от переполнения, H  – межтетрадный перенос (заем).

122 01111010

64 01000000 C=0, Z=0, N=1, V=P6P7=1, S=N+V=0, H=0

186 10111010 (флаги N и V учитываются для операций со знаками)

+105  01101001

+106 01101010 C=0, Z=0, N=1, V=P6P7=1, S=N+V=0, H=1

-45 11010011

-118  10001010

+112 01110000 C=0, Z=0, N=1, V=P6P7=0, S=N+V=1, H=0

-6 11111010

-42  11010110

+120 01111000 C=1, Z=0, N=0, V=P6P7=0, S=N+V=0, H=0

+78 01001110

-90  10100110

-32 11100000 C=1, Z=0, N=1, V=P6P7=0, S=N+V=1, H=0

-122 10000110

Задание 2:

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

Результат вычислений приведен в таблице 2.

Таблица 2 – Таблица результатов операции вычитания

А10

А2

В10

В2

R10

R2

Признаки:

H  S  V N Z C

122

01111010

64

01000000

58

00111010

0  0  0 0  0  0

+105

01101001

+106

01101010

-1

11111111

1  1  0 1  0  1

-118

10001010

+112

01110000

+26

00011010

0  1  1 0  0  0

-42

11010110

+120

01111000

+94

01011110

1  1  1 0  0  0

-90

10100110

-32

11100000

-58

11000110

0  1  0 1  0  1

Для отображения признаков результата используются флаги :

C – перенос при сложении (заем при вычитании), Z – признак нулевого результата,

N – знак результата при операциях с числами со знаком, V – переполнение разрядной сетки, S=NV – знак результата вне зависимости от переполнения, H  – межтетрадный перенос (заем).

C=0, Z=0, N=0, V=P6P7=0, S=N+V=0, H=0

(флаги N и V учитываются для операций со знаками)

C=1, Z=0, N=1, V=P6P7=0, S=N+V=1, H=1

C=0, Z=0, N=0, V=P6P7=1, S=N+V=1, H=0

C=0, Z=0, N=0, V=P6P7=1, S=N+V=1, H=1

C=1, Z=0, N=1, V=P6P7=0, S=N+V=1, H=0

Задание 3:

Выполнить ряд примеров умножения 8-разрядных двоичных чисел

Результат вычислений приведен в таблице 3.

Таблица 3 - Таблица результатов операции умножения

А10

А2

В10

В2

RH

RL

0

00000000

8

00001000

00000000

00000000

120

01111000

10

00001010

00000100

10110000

127

01111111

127

01111111

00111111

00000001

255

11111111

255

11111111

11111110

00000001

Задание 4:

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

Таблица 4 - Таблица результатов операции деление

А10

АH

AL

В10

B2

Частное

Остаток

100

00000000

01100100

50

00110010

00000010

00000000

30

00000000

00011110

0

00000000

11111111

00011110

0

00000000

00000000

32

00100000

00000000

00000000


Задание 5:

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

Ниже представлен текст измененной программы :

;************************************************************************

;Программа эмуляции арифметического устройства

;SW0 – установка/сброс 0-ого бита

;SW1 – установка/сброс 1-ого бита

;SW2 – установка/сброс 2-ого бита

;SW3 – установка/сброс 3-ого бита

;SW4 - обмен местами младшей и старшей тетрады

;SW5 - запись кода операции, 2-х (а при делении 3-х) байтов операндов   

;и выполнение операции при третьем нажатии кнопки (или 4-ом при делении)

;SW6 - показ байта суммы или разности, или младшей части произведения,

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

;SW7 - показ байта  признаков результата сложения или вычитания,

;   или старшего байта произведения, или остатка при делении

;Соединения шлейфами: порт PB-LED, порт PD-SW

;************************************************************************

;.include "8515def.inc" ;файл определений для AT90S8515

.include "m8515def.inc" ;файл определений для ATmega8515

.def temp = r16   ;временный регистр

.def sw_cod = r17  ; код состояния замкнутой кнопки

.def operand = r18  ;операнд

.def count = r22   ;счётчик  ввода

.def count_bit = r23  ;счетчик циклов умножения (деления)

.def cop = r24   ;код операции

.def semafor = r25

.def op_A = r1   ;операнд А

.def op_B = r2   ;операнд В

.def op_AH = r3   ;старший байт делимого

.def mul_l = r4   ;младший байт произведения

.def mul_h = r5   ;старший байт произведения

.def res = r6   ;частное

.def show1 = r19   ;1-й выводимый байт результата

.def show2 = r20   ;2-й выводимый байт

;***Выводы порта PD***

.equ SW_SWAP = 4   ;кнопка обмена

.equ SW_WR = 5   ;кнопка записи операндов

.equ SW6 = 6   ;кнопки просмотра результатов

.equ SW7 = 7  

.macro  test_sw     

sbic PIND, @0  ;проверка кнопки SWx(x=0,1,2,3)

rjmp quit   ; и установка

 bld sw_cod, @0  ; бита замкнутой кнопки

 eor operand, sw_cod ;переключение бита

 com operand  ;инвертирование для вывода

 out PORTB,operand ; на СД

com operand  ;инвертирование

clr sw_cod   ;очистка кода кнопки

 rcall DELAY  ;задержка

wait: sbis PIND, @0

rjmp wait

quit: nop

.endmacro ;test_sw

.macro  test_show

sbic PIND, @0  ;проверка кнопки

rjmp quit   ;  SW6(SW7)

com @1   

out PORTB, @1  ;вывод на СД

com @1   

rcall DELAY  ;задержка

wait: sbis PIND, @0

rjmp wait

quit: nop

.endmacro ;test_show

.org $000

 rjmp init

;***Инициализация***

INIT:  ldi temp,low(RAMEND) ;установка

 out SPL,temp  ; указателя стека

 ldi temp,high(RAMEND) ; на последнюю

 out SPH,temp  ; ячейку ОЗУ

 ser temp   ;настройка

 out DDRB,temp  ; порта PB

 out PORTB,temp   ;  на вывод

 clr temp   ;настройка

 out DDRD,temp  ; порта PD

 ser temp   ; на

 out PORTD,temp  ; ввод

 clr sw_cod   ;очистка кода кнопки

 clr operand  ;очистка операнда

 set    ;SREG.Т=1

 ldi semafor,1

 ser count   ;count=0xff - для обхода подпрограммы oper  

LOOP:  test_sw 0   ;опрос кнопок 0,1,2,3

 test_sw 1

 test_sw 2    

 test_sw 3

 rcall test_SWAP  ;опрос кнопки обмена тетрадами

 rcall test_WR  ;опрос кнопки записи

 cpi count,0  ;условие перехода к обработке операндов

 brne SW_SHOW

 rcall oper   ;вызов арифметической операции

 ldi semafor,1

 ser count

SW_SHOW: test_show  SW6,show1

 test_show  SW7,show2

 rjmp LOOP

 

;Вызываемые подпрограммы

;***********модуль арифметических операций

OPER : cpi cop,1   ;анализ КОП

 brne b2

;***********сложение или вычитание 8-разрядных операндов

 add op_A,op_B  

 b0: mov show1,op_A  ; выводимые значения - сумма

 in show2,SREG  ; и признаки из регистра SREG

 andi show2,0xbf  ;обнуление флага T

 ret

 b2: cpi cop,2

 brne b3

 sub op_A,op_B  

 rjmp b0

 b3: cpi cop,3

 brne b4

;***********модуль умножения  8-разрядных операндов

 mov mul_h,op_A

 mov mul_l,op_B

 

 or mul_h,mul_l  ;Установка флага Z, если один из

 tst mul_h   ; сомножителей равен 0.

 breq sh

 clr mul_l   ;очистка младшего байта произведения

 clr mul_h   ;очистка старшего байта произведения

 ldi count_bit,8  ;счетчик циклов

 L1: sbrc op_B,0  ;проверка младшего разряда множителя

 add mul_h,op_A  ;прибавление множимого А, если B0=1

 L2: ror mul_h   ;сдвиг

 ror mul_l   ; вправо 2-х байтов произведения

 lsr op_B   ;сдвиг множителя вправо на 1 разряд

 clc    ;очистка флага C 

 L3: dec count_bit  ;уменьшение счётчика циклов

 brne L1   ;если не 0, продолжаем умножение

 sh: mov show1,mul_l  ; выводимые значения - младший

 mov show2,mul_h  ; и старший байты произведения

 

 ret

 b4:  cpi cop,4

 brne b5

;**********модуль деления 16-разрядного числа на 8-разрядное

DIV:  clr res   ;обнуляем частное

 tst op_B  ;проверка делителя на ноль

 breq DIV_0  ; на ноль

 

 cp op_AH,op_B ;проверка

 brsh DIV_0  ; на переполнение

 ldi count_bit,8  ; результат 8-разрядный

 L4: rol op_A   ;сдвиг

 rol op_AH   ; делимого

 lsl res   ;сдвиг частного

 sub op_AH,op_B  ;вычитание делителя

 brcs recov   ;если остаток < 0,переход

 ldi temp,0x01  ;иначе установка

 or res,temp  ; разряда частного в 1

 rjmp L5

  recov: add op_AH,op_B  ; и восстановление остатка

 L5: dec count_bit

 brne L4

 mov show1,res  ; выводимые значения - частное

 mov show2,op_AH  ;  и остаток

DIV_0: clr op_B  ; зажигание всех светодиодов

 out PORTB,op_B ;

 b5: ret

;*** обмен тетрадами ***

test_SWAP:     

 sbic PIND,SW_SWAP ;проверка кнопки

 rjmp quit   ;  SWAP(SW4)

 swap operand  ;обмен тетрадами операнда

 com operand  ;инвертирование для вывода

 out PORTB,operand ; на СД

 com operand  ;инвертирование

 rcall DELAY  ;задержка

wait: sbis PIND,SW_SWAP

 rjmp wait

 quit: nop

 ret

;*** подпрограмма ввода байта  от кнопки с уменьшением счетчика нажатий

; после каждой записи

test_WR: sbic PIND,SW_WR  ;проверка кнопки

 rjmp w_quit  ; WR(SW5)

 rcall DELAY  ;задержка

 cpi semafor,1

 brne w3   ;переход для загрузки операндов

 clr semafor  ;сброс после 1-го входа

 mov cop,operand  ;запись кода операции

 cpi cop,4   ;деление?

 breq w_div 

 ldi count,3  ;если нет, счетчик записи = 3

 rjmp clear

  w_div: ldi count,4  ;иначе счетчик записи = 4

 rjmp clear

w3: cpi count,3   

 brne w2   ;переходы по значению счетчика

 mov op_AH,operand ;запись первого операнда

 rjmp clear

w2:  cpi count,2

 brne w1

 mov op_A,operand  ;запись первого операнда

 rjmp clear

 w1: mov op_B,operand  ;запись второго операнда

  clear: dec count   

 clr operand  ;очистка для записи новых значений

 ser temp   ;гашение

 out PORTB,temp  ; светодиодов

  wait5: sbis PIND, SW_WR

 rjmp wait5

 w_quit:  nop

 ret

;*** Задержка ***

DELAY: ldi r26,10

 ldi r27,255

 ldi r21,255

dd:  dec r21

 brne dd

 dec r27

 brne dd

 dec r26

 brne dd

 ret




1. Диалектика ~ это наиболее полное и глубокое учение о развитии
2. АКартография наука об отображении и познании природных и социальноэкономических геосистем посредством ка
3. Определение эффективности рекламной деятельности
4. Считывание данных из гостевой книги
5. Free
6. Разностные аппроксимации
7. Биосинтез аскорбиновой кислоты листьями ячменя в атмосфере азота
8. Емельян Пугачёв.html
9. Методические основы диагностики несостоятельности банкротства организации
10. Волновые и корпускулярные свойства света1
11. Р. Годуниным ' преподавателем кафедры экономического права факультета управления и социальных технологий Б
12. Нужен тонкий тут подход Всё отлично впрочем Посмотрите вот стоит Синяя лошадка Прокачусь верхом на ней
13. На тему- Организация защиты и жизнеобеспечения населения в чрезвычайных ситуациях- обязанность и ответст
14. Инфляция, ее особенности в Росси
15.  Понимаете ли вы теорию или нет если вы сознательно будете практиковать эту супертехнику то увеличатся ваши
16. по генетическим признакам делятся на терригенные хемогенные и органогенные Болото участок земной пов
17. Краткая история времени
18. Тема- Английское Рождество Тип урока- урок обобщения и систематизации знаний Цель урока- повторить и об
19. реферат дисертації на здобуття наукового ступеня кандидата психологічних наук2
20. Лица страдающие от недавно испытанных унижений или трагических утрат