Микроконтроллер ATmega128: команды обработки данных

Автор работы: Пользователь скрыл имя, 29 Мая 2013 в 00:39, лабораторная работа

Краткое описание

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

Вложенные файлы: 1 файл

MPS 2.docx

— 19.85 Кб (Скачать файл)

Лабораторная работа №2 по «Микропроцессорным системам».

Микроконтроллер ATmega128: команды  обработки данных

Студент

 

Группа

 

Дата

 

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

 

Подпись

 

Оценка

 

 

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

 

Задание: выбрать числа с минимальным и максимальным значением из массива, содержащего 40  16-разрядных чисел со знаком, которые размещены в памяти, начиная с адреса $хх. Минимальное и максимальное число записать в регистры R20. R21, а порядковые номера этих чисел в исходном массиве данных - в регистры R22 и R23.

 

Код программы:

.include "m128def.inc"

.equ IniX = $100 ;указатель на память данных

.equ N = 40   ;счетчик циклов

 

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

.def Counter = R16   ;счетчик

.def MinHigh = R20 ;старший байт минимума

.def MinLow  = R19 ;младший байт минимума

.def MaxHigh = R21 ;старший байт максимума

.def MaxLow  = R18 ;младший байт максимума

.def MinPos = R22  ;номер позиции минимума

.def MaxPos = R23  ;номер позиции максимума

.def tmp  = R17  ;регистр, нужный для хранения текущего значения

;по X (для операций сравнения)

 

.ORG 0

ldi R26,low(IniX)  ;загрузка рег.X значением указателя на память

;данных

ldi R27,high(IniX)

ldi Counter,0  ;загрузка счетчика циклов

;инициализация цикла

ld MaxHigh,X  ;загрузка значений максимума и минимума

ld MinHigh,X+

ld MaxLow,X

ld MinLow,X+

mov MaxPos,Counter

mov MinPos,Counter

inc Counter

loop:     ;цикл поиска макс. и мин. числа

;проверка числа на максимум

ld tmp,X

MaxCheck:

cp MaxHigh,tmp

breq MaxHighEqual

brlt MaxHighLess

MaxHighMore:   ;если старший байт максимума больше

;старшего байта числа

jmp MinCheck ;то проверяем число на минимум

MaxHighEqual:  ;если старший байт максимума равен

;старшему байту числа

adiw X,1  ;то сравниваем младшие байты максимума и

;числа

ld tmp,X

cp MaxLow,tmp

breq MaxLowEqual

brlo MaxLowLess

MaxLowMore:

sbiw X,1

jmp MinCheck

MaxLowEqual:

sbiw X,1

jmp MinCheck

MaxLowLess:

ld MaxLow,X

mov MaxPos,Counter

sbiw X,1

jmp NextNumber

MaxHighLess:  ;если старший байт максимума меньше

;старшего байта числа

ld MaxHigh,X ;то число - новый максимум, переходим к       ;следующему числу

adiw X,1

ld MaxLow,X

mov MaxPos,Counter

sbiw X,1

jmp NextNumber

 

;проверка числа на минимум 

MinCheck:

ld tmp,X

cp MinHigh,tmp  ;сравниваем старшие байты минимума и числа

breq MinCheckEqual

brlt MinCheckLess

MinCheckMore:  ;если старший байт минимума больше

;старшего байта числа,

mov MinHigh, tmp ;то число - новый минимум, переходим к

;следующему числу

adiw X,1

mov MinLow, tmp

mov MinPos,Counter

sbiw X,1

jmp NextNumber

MinCheckEqual: ;если старший байты минимума и числа

;равны,

adiw X,1  ;то сравниваем младшие байты

ld tmp,X

cp MinLow,tmp

breq MinLowEqual

brlo MinLowLess

MinLowMore:

mov MinLow,tmp

mov MinPos,Counter

sbiw X,1

jmp NextNumber

MinLowEqual:

MinLowLess:

sbiw X,1

jmp NextNumber

MinCheckLess:  ;если старший байт минимума меньше

;старшего байта числа,

jmp NextNumber ;то переходим к следующему числу

NextNumber:    ;переход к следующему числу

adiw X,2   

inc Counter

cpi Counter,N

brne loop

End: rjmp End


Информация о работе Микроконтроллер ATmega128: команды обработки данных