Якщо цей аспект не врахувати, то правильними результатами будуть тільки множення додатних чисел. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Якщо цей аспект не врахувати, то правильними результатами будуть тільки множення додатних чисел.



 

Ще на що особливо треба звернути увагу, що:

1) нам треба отримати результат додавання трьох байт

2) оскільки AVR-мікроконтролер «вміє» додавати тільки два регістри між собою, то для додавання трьох байт треба використати два рази інструкцію додаванні AVR-мікроконтролера

3) при додаванні двох байт між собою результат може бути 9-ти бітне число. При додаванні трьох байт між собою максимально можливий прогнозований результат може бути 10-ти бітне число.

4) Перенос треба врахувати при формуванні наступного байту результату а не при формуванні результату, для якого виконується дане додавання трьох байт. Тому треба реалізувати алгоритм, який би «запам’ятовував» всі переноси (у нашому випадку максимально можлива кількість 2) і їх враховував при формуванні наступного байту остаточного результату множення.

5) Оскільки інше правило говорить, що при множенні 16-ти бітного числа на 16-ти бітне число, максимально можливий результат може бути -ти бітне число – тобто 4 байти, то при формуванні останнього байту не обов’язково слідкувати за переносом у п’ятий байт, бо, якщо він і буде, то це буде біт, який повторює останній біт 4-ри бітного числа (біт знаку).

 

Деякі рекомендації для полегшення написання програми в AVR Assembler

У цій роботі є необхідність використовувати велику кількість регістрів, кожен з яких має своє смислове навантаження. Щоб програму зробити більш зручною для читання варто використати директиви AVR Assembler.DEF і.UNDEF. Перша з яких дозволяє поставити у відповідність регістру якусь комбінацію символів (пере назвати регістр), а друга – відмінити це назначення.

 

Директива.DEF описана у додатковому теоретичному матеріалі для лабораторної роботи № 5 «Вивчення роботи з пам’яттю даних»

 

Директива UNDEF – «Відміна встановлення символьного значення вибраному регістрові»

Ця директива є доступною тільки при використанні AVRASM2 (використовується AVR Studio v.4.18 по замовчуванню)

Ця директива використовується для відміни символьного назначення регістру, попередньо використовуваною директивою.DEF.

Синтаксис:

.UNDEF Символьне ім’я

Наприклад:

.DEF temp = R16

.UNDEF temp

 

Опис деяких мнемонік інструкцій, які використовуються у цій лабораторній роботі і не були описані у описах до попередніх лабораторних робіт

MUL – «Множення беззнакових чисел»

Ця інструкція здійснює множення 8-и бітного числа з 8-и бітним числом. Результатом буде 16-и бітне беззнакове число.

Rd   Rr   R1 R0
Множене Множник Старший байт результату Молодший байт результату
8-біт   8-біт   16-біт

Множене (регістр Rd) і множник (регістр Rr) – це два регістри у яких зберігаються беззнакові числа. 16-ти бітний беззнаковий добуток поміщається у регістр R1 (старший байт добутку) і R0 (молодший байт добутку). Якщо множене чи множник розміщений у регістрі R0 чи R1, то результат обновить ці значення у цих регістрах після множення.

 

R1:R0 ← Rd x Rr (беззнакове число ← беззнакове число x беззнакове число)

Синтаксис Операнди Лічильник команд
MUL Rd,Rr 0 ≤ d ≤ 31, 0 ≤ r ≤ 31 PC ← PC + 1

 

Вплив на регістри статусу:

 

Вплив на регістри статусу:

I T H S V N Z C
- - - - - - <> <>

Біт Z:

Встановлюється, якщо результатом є число $0000, у іншому випадку – скидається.

Біт C:

Встановлюється якщо біт 15 результату встановлюється, у іншому разі - скидається.

 

 

Наприклад:

mul r16,r17;Множення регістрів r16 і r17

 

MULS – «Множення знакових чисел»

Ця інструкція здійснює множення 8-и бітного числа з 8-и бітним числом. Результатом буде 16-и бітне знакове число.

Rd   Rr   R1 R0
Множене Множник Старший байт результату Молодший байт результату
8-біт   8-біт   16-біт

Множене (регістр Rd) і множник (регістр Rr) – це два регістри у яких зберігаються знакові числа. 16-ти бітний знаковий добуток поміщається у регістр R1 (старший байт добутку) і R0 (молодший байт добутку).

 

R1:R0 ← Rd x Rr (знакове число ← знакове число x знакове число)

Синтаксис Операнди Лічильник команд
MULS Rd,Rr 16 ≤ d ≤ 31, 16 ≤ r ≤ 31 PC ← PC + 1

 

Вплив на регістри статусу:

 

Вплив на регістри статусу:

I T H S V N Z C
- - - - - - <> <>

Біт Z:

Встановлюється, якщо результатом є число $0000, у іншому випадку – скидається.

Біт C:

Встановлюється якщо біт 15 результату встановлюється, у іншому разі - скидається.

 

 

Наприклад:

muls r16,r17;Множення регістрів r16 і r17

 

MULSU – «Множення знакового числа з беззнаковим числом»

Ця інструкція здійснює множення 8-и бітного числа з 8-и бітним числом. Результатом буде 16-и бітне число, яке є результатом множення знакового числа з беззнаковим числом.

Rd   Rr   R1 R0
Множене Множник Старший байт результату Молодший байт результату
8-біт   8-біт   16-біт

Множене (регістр Rd) і множник (регістр Rr). Множене (регістр Rd) – це є знакове число, множник (регістр Rr) – беззнакове число. 16-ти бітний знаковий добуток поміщається у регістр R1 (старший байт добутку) і R0 (молодший байт добутку).

 

R1:R0 ← Rd x Rr (знакове число ← знакове число x беззнакове число)

Синтаксис Операнди Лічильник команд
MULSU Rd,Rr 16 ≤ d ≤ 23, 16 ≤ r ≤ 23 PC ← PC + 1

 

Вплив на регістри статусу:

 

Вплив на регістри статусу:

I T H S V N Z C
- - - - - - <> <>

Біт Z:

Встановлюється, якщо результатом є число $0000, у іншому випадку – скидається.

Біт C:

Встановлюється якщо біт 15 результату встановлюється, у іншому разі - скидається.

 

 

Наприклад:

mulsu r16,r17;Множення регістрів r16 і r17

 

FMUL – «Множення беззнакових дробових чисел»

Ця інструкція здійснює множення 8-и бітного числа з 8-и бітним числом. Результатом цієї інструкції буде беззнаковий добуток цих регістрів, який попередньо піддається побітному зсуву на один біт вліво.

 

Rd   Rr   R1 R0
Множене Множник Старший байт результату Молодший байт результату
8-біт   8-біт   16-біт

Нехай (N.Q) позначає дробове число з N бінарними цифрами зліва від коми, яка відділяє цілу і дробові частини і Q бінарними цифрами справа від коми. Добутком між двома числами у форматах (N1.Q1) і (N2.Q2) буде формат ((N1+N2).(Q1+Q2)). Для програм, які обробляють аналогові сигнали, формат (1.7) широко використовується для вхідних сигналів, (2.14) формат результату. Зміщення вліво потрібне для старшого байту результату для того, щоб зрівняти формат результату з форматом вхідного сигналу. Інструкція FMUL з’єднує операцію зміщення разом із інструкцією MUL.

Множене Rd і множник Rr – це два регістри, які містять беззнакові дробові числа, де мається на увазі, що кома між цілою і дробовою частиною знаходиться між 6-им і 7-им бітом. Результатом є 16-и бітне беззнакове зміщене число де мається на увазі, о кома, яка розділяє цілу і дробову частину знаходиться між 14-им і 15-им бітом і записується в R1 (старший байт) і R0 (молодший байт).

R1:R0 ← Rd x Rr (беззнакове число (1.15) ← беззнакове число (1.7) x беззнакове число (1.7))

Синтаксис Операнди Лічильник команд
FMUL Rd,Rr 16 ≤ d ≤ 23, 16 ≤ r ≤ 23 PC ← PC + 1

 

Вплив на регістри статусу:

 

Вплив на регістри статусу:

I T H S V N Z C
- - - - - - <> <>

Біт Z:

Встановлюється, якщо результатом є число $0000, у іншому випадку – скидається.

Біт C:

Встановлюється якщо біт 15 результату встановлюється перед зміщенням, у іншому разі - скидається.

 

 

Наприклад:

fmul r16,r17

 

FMULS – «Множення знакових дробових чисел»

Ця інструкція здійснює множення 8-и бітного числа з 8-и бітним числом. Результатом цієї інструкції буде знаковий добуток цих регістрів, який попередньо піддається побітному зсуву на один біт вліво.

 

Rd   Rr   R1 R0
Множене Множник Старший байт результату Молодший байт результату
8-біт   8-біт   16-біт

Нехай (N.Q) позначає дробове число з N бінарними цифрами зліва від коми, яка відділяє цілу і дробові частини і Q бінарними цифрами справа від коми. Добутком між двома числами у форматах (N1.Q1) і (N2.Q2) буде формат ((N1+N2).(Q1+Q2)). Для програм, які обробляють аналогові сигнали, формат (1.7) широко використовується для вхідних сигналів, (2.14) формат результату. Зміщення вліво потрібне для старшого байту результату для того, щоб зрівняти формат результату з форматом вхідного сигналу. Інструкція FMULS з’єднує операцію зміщення разом із інструкцією MULS.

Множене Rd і множник Rr – це два регістри, які містять знакові дробові числа, де мається на увазі, що кома між цілою і дробовою частиною знаходиться між 6-им і 7-им бітом. Результатом є 16-и бітне знакове зміщене число де мається на увазі, що кома, яка розділяє цілу і дробову частину знаходиться між 14-им і 15-им бітом і записується в R1 (старший байт) і R0 (молодший байт).

Зверніть увагу, що множення $80 (-1) з $80 (-1) – результатом операції зсуву буде $8000 (-1). Таким цином операція зсуву дає переповнення у додатковому коді. Це треба враховувати при написанні програмного забезпечення для AVR-мікроконтролера.

R1:R0 ← Rd x Rr (знакове число (1.15) ← знакове число (1.7) x знакове число (1.7))

Синтаксис Операнди Лічильник команд
FMULS Rd,Rr 16 ≤ d ≤ 23, 16 ≤ r ≤ 23 PC ← PC + 1

 

Вплив на регістри статусу:

 

Вплив на регістри статусу:

I T H S V N Z C
- - - - - - <> <>

Біт Z:

Встановлюється, якщо результатом є число $0000, у іншому випадку – скидається.

Біт C:

Встановлюється якщо біт 15 результату встановлюється перед зміщенням, у іншому разі - скидається.

 

 

Наприклад:

fmuls r16,r17

 

FMULSU – «Множення знакового дробового числа із беззнаковим дробовим числом»

Ця інструкція здійснює множення 8-и бітного числа з 8-и бітним числом. Результатом цієї інструкції буде беззнаковий добуток цих регістрів, який попередньо піддається побітному зсуву на один біт вліво.

Rd   Rr   R1 R0
Множене Множник Старший байт результату Молодший байт результату
8-біт   8-біт   16-біт

Нехай (N.Q) позначає дробове число з N бінарними цифрами зліва від коми, яка відділяє цілу і дробові частини і Q бінарними цифрами справа від коми. Добутком між двома числами у форматах (N1.Q1) і (N2.Q2) буде формат ((N1+N2).(Q1+Q2)). Для програм, які обробляють аналогові сигнали, формат (1.7) широко використовується для вхідних сигналів, (2.14) формат результату. Зміщення вліво потрібне для старшого байту результату для того, щоб зрівняти формат результату з форматом вхідного сигналу. Інструкція FMULSU з’єднує операцію зміщення разом із інструкцією MULSU.

Множене Rd і множник Rr – це два регістри, які містять беззнакові дробові числа, де мається на увазі, що кома між цілою і дробовою частиною знаходиться між 6-им і 7-им бітом. Результатом є 16-и бітне беззнакове зміщене число де мається на увазі, о кома, яка розділяє цілу і дробову частину знаходиться між 14-им і 15-им бітом і записується в R1 (старший байт) і R0 (молодший байт).

R1:R0 ← Rd x Rr (знакове число (1.15) ← знакове число (1.7) x беззнакове число (1.7))

Синтаксис Операнди Лічильник команд
FMULSU Rd,Rr 16 ≤ d ≤ 23, 16 ≤ r ≤ 23 PC ← PC + 1

 

Вплив на регістри статусу:

 

Вплив на регістри статусу:

I T H S V N Z C
- - - - - - <> <>

Біт Z:

Встановлюється, якщо результатом є число $0000, у іншому випадку – скидається.

Біт C:

Встановлюється якщо біт 15 результату встановлюється перед зміщенням, у іншому разі - скидається.

 

 

Наприклад:

fmulsu r16,r17

 

Завдання:

1. Об’явити дві двобайтні знакові константи:

2. У сегменті пам’яті даних об’явити змінну у яку буде записуватися результат множення

3. Розмістити вхідні величини у регістри мікроконтролера

4. Здійснити побайтне множення (з врахуванням того, які інструкції треба використати MUL, MULS, MULSU) і результати цих множень перемістити у резервні регістри для подальшого опрацювання.

5. Визначити значення третього байту множення

6. Записати перший (молодший) байт результату множення двох двобайтних знакових чисел у ОЗУ мікроконтролера (визначену попередньо змінну в п.2)

7.Сформувати другий байт результату множення двох двобайтних знакових чисел

7.1 Додати відповідні регістри

7.2 При додаванні здійснювати акумулювання всіх переносів у старші розряди

7.3 Записати другий байт множення двобайтним знакових чисел у ОЗУ двох двобайтних знакових чисел у ОЗУ мікроконтролера (визначену попередньо змінну в п.2)

8.Сформувати третій байт результату множення двох двобайтних знакових чисел

8.1 Додати відповідні регістри і переносів при формуванні другого байту результату

8.2 При додаванні здійснювати акумулювання всіх переносів у старші розряди

8.3 Записати третій байт множення двобайтним знакових чисел у ОЗУ двох двобайтних знакових чисел у ОЗУ мікроконтролера (визначену попередньо змінну в п.2)

9.Сформувати четвертий байт результату множення двох двобайтних знакових чисел

9.1 Додати відповідні регістри і переносів при формуванні третього байту результату

9.2 Записати четвертий байт множення двобайтним знакових чисел у ОЗУ двох двобайтних знакових чисел у ОЗУ мікроконтролера (визначену попередньо змінну в п.2)

9. Перевірити виконання програми на двох двобайтних додатних числах, двох від’ємних двобайтних числах, додатного двобайтного числа і від’ємного двобайтного числа.

 



Поделиться:


Последнее изменение этой страницы: 2016-04-18; просмотров: 299; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.111.183 (0.063 с.)