* HexBCD - 32-разрядное двоичное число (целое) делить на
* 16-разрядное.
delit: пор
;Пересылка данных з рабочие регистры
;сброс ненужных разрядов ;сброс ненужных разрядов ;сброс ненужных разрядов ;делитель
,-делитель 16 разрядов
;подпрограмма со старшим полубайтом ;сохранение регистра состояния ;прозерка младшего полубайта
/•переход, если не было переноса
;восстановление старшего полубайта
г вычисление разницы старшего полубайта
sr3 :
|
clr |
r7 |
|
clr |
r6 |
|
clr |
r3 |
|
mov |
r2, tmp2 |
|
ldi |
tmpl, |
|
mov |
rO, tmpl |
|
nop |
|
|
rcall |
HL2 |
|
in |
rl7, SREG |
|
rcall |
DE2 |
|
nop |
|
|
brcc |
PERI |
|
nop |
|
|
rcall |
INXH |
|
nop |
|
|
rcall |
HLMNBC |
|
nop |
|
|
brcs |
PER2 |
|
out |
SREG, rl7 |
|
rcall |
INXD |
|
nop |
|
|
rjmp |
PER4 |
;переход, если перенос .-восстановление регистра состояния ;зосстановление младшего полубайта
130
Глава 6
Листинг 6.1. Продолжение
|
PER2 : |
out |
SREG, rl7 |
;восстанозление регистра состояния |
|
|
brcs |
PER3 |
;переход, если перенос |
||
|
nop |
||||
|
rcall |
DADB |
;восстановление старшего полубайта |
||
|
PER4 : |
clz mov |
tmp3, rO |
||
|
dec |
tmp3 |
;уменьшение 16 разрядов |
||
|
mov |
rO, tmp3 |
|||
|
brbc |
1, DCLK |
/переход, если Z=0 |
||
|
nop |
||||
|
ret |
||||
|
;подпрограмма |
со старшим |
полубайтом |
||
|
HLMNBC |
clc |
;сброс флага переноса |
||
|
mov |
tmpl, гб |
;переслать г6 во временный |
регистр |
|
|
sbc |
tmpl, r2 |
;вычитание с заемом |
||
|
mov |
r6, tmpl |
;сохранение в гб |
||
|
mov |
tmp2, r7 |
;переслать г7 во временный |
регистр |
|
|
sbc |
tmp2, r3 |
;вычитание с заемом |
||
|
mov |
r7, tmp2 |
;сохранение з г7 |
||
|
ret |
||||
|
.■восстановление старшего |
полубайта |
|||
|
DADB: |
mov |
tmpl, гб |
;переслать гб зо временный |
регистр |
|
add |
tmpl, r2 |
;сложение |
||
|
mov |
r 6, tmp1 |
;сохранение в гб |
||
|
mov |
tmp2, r7 |
;переслать г7 во временный |
регистр |
|
|
adc |
tmp2, r3 |
;сложение с переносом |
||
|
mov |
r7, tmp2 |
;сохранение в г7 |
||
|
ret |
||||
|
;подпрограмма |
с младшим полубайтом |
|||
|
DE2: |
clc |
.•сброс флага переноса |
||
|
mov |
tmpl, r4 |
;переслать г4 во временный |
регистр |
|
|
rol |
tmpl |
;сдвиг злево через перенос |
||
|
mov |
r4, tmpl |
.•сохранение в г4 |
||
|
mov |
tmp2, r5 |
;переслать г5 во зременный |
регистр |
|
|
rol |
tmp2 |
;сдвиг злезо через перенос |
||
|
mov |
r5, tmp2 |
;сохранение в г5 |
||
|
ret |
||||
|
;сдвиг |
старшего полубайта |
|||
|
HL2 : |
clc |
.•сброс флага переноса |
||
|
mov |
tmpl, r6 |
.•переслать г4 во временный |
регистр |
|
|
rol |
tmpl |
;сдвиг влезо через перенос |
||
|
mov |
гб, tmpl |
;сохранение в гб |
||
|
mov |
tmp2, r7 |
;переслать г7 во зременный |
регистр |
|
|
rol |
tmp2 |
;сдвиг влево через перенос |
||
|
mov |
r7, tmp2 |
;сохранение з г7 |
||
|
ret |
||||
Простой термометр 131
| НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |