ЛАБОРАТОРНА РОБОТА №2.
РЕАЛІЗАЦІЯ ДОДАВАННЯ ТА ВІДНІМАННЯ ЧИСЕЛ З ФІКСОВАНОЮ
КОМОЮ
Мета: Ознайомитися прийомами реалізації операцій додавання і
віднімання чисел в форматі з фіксованою комою.
2.1 Короткі теоретичні відомості
Принципи зберігання чисел з фіксованою комою
У сучасних ЕОМ загального призначення, як правило, використовуються
двійкові і двійково-десяткові позиційні системи числення. При цьому мають
місце два способи представлення в них чисел з фіксованою комою (крапкою) і з
плаваючою комою (крапкою).
При роботі з фіксованою комою оперують з правильними дробами, тобто
з числами, які по модулю строго менше одиниці.
При цьому застосовується природний запис числа у вигляді послідовності
цифр, у якій кома фіксована перед першим (старшим) цифровим розрядом.
Зліва від коми відводиться розряд (або два розряду) для зображення знака
числа. Прийнято наступні позначення знака числа: "+" = 0; "-" = 1.
Таким чином, в знаковому розряді розташований 0, якщо число
позитивне, і 1, якщо число від’ємне.
Приклад:
0,101101 - додатне число;
1,101101 - від'ємне число, що збігається за модулем з наведеним вище
позитивним числом.
Перевагами такого уявлення чисел є прості арифметичні операції, що
забезпечують високу швидкодію ЕОМ.
Недоліком уявлення чисел з фіксованою комою є невеликий діапазон
представлених чисел, який визначається виразом:
i
n
i
n
2 2
1
,
15
де
n - кількість розрядів, призначених для дробової частини числа.
Можливо також переповнення розрядної сітки при додаванні чисел з
фіксованою комою з однаковими знаками, кожне з яких по модулю менше 1, а
сума по модулю більше або дорівнює 1. Переповнення розрядної сітки можливо
також при розподілі, якщо модуль діленого більше або дорівнює модулю
подільника.
Переповнення розрядної сітки проявляється в тому, що результат операції
(сума чи приватне),
1
, тобто старший розряд результату операції
виявляється в знаковому розряді, що неприпустимо і вимагає зупинки
обчислювального процесу.
Можливий також «машинний нуль», тобто вихід старшого розряду числа,
рівного 1, за межі молодшого розряду розрядної сітки.
Приклади використання базових команд AVR Assembler
Команда LDI – завантажити безпосереднє значення
Опис:
Завантажується 8-разрядна константа в регістр від 16 до 31
Операція:
(i) Rd<-- K
Синтаксис Операнди: Лічильник програм:
(i) LDI Rd, K
16 < Rd < 31, 0 < K <
255
PC<-- + 1
Приклад:
clr r31 ; Очистити старший байт Z
ldi r30, $F0 ; Встановити $F0 до молодшого байту Z
lpm ; Завантажити константу з програми
Слів: 1 (2 байти)
Циклів: 1
16
Команда MOV - копіювати регістр
Опис:
Команда створює копію одного регістра в іншому регістрі. Вихідний регістр Rr
залишається незмінним, в регістр призначення Rd завантажується копія вмісту регістра Rr.
Операція:
(i) Rd<-- Rr
Синтаксис Операнди: Лічильник програм:
(i) MOV Rd, Rr 0 < d < 31, 0 < r <31 PC<-- + 1
Приклад:
mov r16, r0 ; Копіювати r0 в r16
callcheck ; Викликати підпрограму
. . .
checkcpi r16, $11 ; Порівняти r16 с $11
. . .
ret ; Повернутись з підпрограми
Слів: 1 (2 байта)
Циклів: 1
Команда NOP – виконати холосту команду
Опис:
Команда виконується за один цикл без виконання операції
(i) NOP
Синтаксис Операнди: Лічильник програм:
(i) NOP None PC<-- + 1
Приклад:
clr r16 ; Очистити r16
ser r17 ; Встановити r17
out $18, r16 ; Записати 0 в Порт B
nop ; Очікувати (пуста Операція)
out $18, r17 ; Записати 1 в Порт B
Слів: 1 (2 байти)
Циклів: 1
17
Команда ADD - AddwithoutCarry – Скласти без переносу
Опис:
Додавання двох регістрів без додавання вмісту прапора перенесення (С), розміщення
результату в регістрі призначення Rd.
Операція:
(i) Rd<- Rd + Rr
Синтаксис Операнди: Лічильник програм:
(i) ADD Rd, Rr 0 < d < 31, 0 < r < 31 PC < PC + 1
Приклад:
add r1,r2 ; Скласти r2 з r1 (r1=r1+r2)
adc r28,r28 ; Скласти r28 з собою (r28=r28+r28)
Слів: 1 (2 байти)
Циклів: 1
Команда SUB - відняти без переносу
Опис:
Віднімання вмісту регістра-джерела Rr з вмісту регістра Rd, розміщення результату в
регістрі призначення Rd.
Операція:
(i) Rd<-- Rd – Rr
Синтаксис Операнди: Лічильник програм:
(i) SUB Rd, Rr 16 < d < 31, 0 < r < 31 PC <- PC + 1
Приклад:
sub r13, r12 ; Відняти r12 з r13
brne noteq ; Перейти якщо r12 <> r13
noteq: nop ; Перейти за призначенням (пуста Операція)
Слів: 1 (2 байти)
Циклів: 1
Команда CP – порівняти
18
Опис:
Команда виконує порівняння вмісту двох регістрів Rd і Rr. Вміст регістрів не змінюється.
Після цієї команди можна виконувати будь-які умовні переходи.
Операція:
(i) Rd = Rr
Синтаксис Операнди: Лічильник програм:
(i) Cp Rd, Rr 0 < d < 31,0 < r < 31 PC <- PC + 1
Приклад:
cp r4, r19 ; Порівняти r4 с r19
brne noteq ; Перейти якщо r4 <> r19
. . .
noteq: nop ; Перейти за призначенням (пуста Операція)
Слів: 1 (2 байти)
Циклів: 1
Команда CPI – порівняти з константою
Опис:
Команда виконує порівняння вмісту регістра Rd з константою. Вміст регістра не
змінюється. Після цієї команди можна виконувати будь-які умовні переходи.
Операція:
(i) Rd = K
Синтаксис Операнди: Лічильник програм:
(i) CPI Rd, K 16 =< d =< 31, 0 < K <255 PC <- PC + 1
Приклад:
cpi r19, 3 ; Порівняти r19 с 3
brne error ; Перейти якщо r4 <> 3
. . .
error: nop ; Перейти за призначенням (пуста Операція)
Слів: 1 (2 байти)
Циклів: 1
X1+X2-X3=C, ЯКЩО С>0 ТО V=C+X4-X5, ЯКЩО С=0 ТО V=C+X4+X5
P.S.:Викладач сказав все є с методичці(тобто весть текст, що зверху).Можливо я помиляюсь і тут все Є, але мені потрібен хоча би приклад, як його зробити в ідеалі у AVRStudio 4.0, але хоча би денебуть.