начинаеться так:
DivWord:
ldi R22, 17
cp R21, R19
brcs _DWRet
...
кончаеться так:
_DWRet: ret
Тоесть если R21, R19 не равны, то конец всему делению
Похоже самому сочинять прийдёться , методом вычитания...
Код: Выделить всё
ldi R16, 0xFF
ldi R17, 0xFF
clr R18
clr R19
ldi R20, 0x55
ldi R21, 0x55
call DivWord
Судя по задаче, за которую взялся топикстартер и которая - увы - пока превышает его возможности, для апроксимации следует применять плавающую арифметику, что еще несколько сложнее. Ну поделит он 16 бит на 16 бит, получит частное и остаток. А что потом делать с этим остатком - съесть с маслом или на хлеб намазывать - XZ. Для следующей операции нужен результат предыдущей - число, а не 2 никак не связанных числа - частное и остаток.VIY писал(а):
И обязательно разбираться с "низкоуровневыми" алгоритмами (те же операции умножения и деления "ручками", а не с помощью команд процессора), даже если используемый процессор умеет их делать сам или доступны выполняющие их чужие подпрограммы: понимание принципов никогда не помешает, а иногда может и помочь.Jack_A писал(а):Лично мой совет - сначала заняться чем-либо попроще. Ну и читать литературу. Она иногда сеет свет.
Код: Выделить всё
; =======================
;
; Беззнаковое деление четырёхбайтовой величины на двухбайтовую
;
; =======================Код: Выделить всё
.include"tn2313def.inc"
.cseg
.org 0
ldi r16,RamEnd
out SPL,r16
; R17H R16L ДЕЛИМОЕ/ОСТАТОК
; R19H R18L ДЕЛИТЕЛЬ
; R21H R20L РЕЗУЛЬТАТ
LDI R17,0XFF
LDI R16,0XFF
LDI R19,0
LDI R18,6
RCALL DEL
CICL:
RJMP CICL
DEL:
CP R17,R19
BRSH BOL_H
RJMP RET_DEL
BOL_H:
CP R16,R18
BRSH MIN_DEL
RJMP MEN_L
RET_DEL:
RET
MIN_DEL:
CLC
SUB R16,R18
BRCS DEC_H
RET_DEC_H:
SUB R17,R19
INC R20
BRNE DEL
INC R21
RJMP DEL
DEC_H:
DEC R17
RJMP RET_DEC_H
MEN_L:
CP R17,R19
BREQ RET_DEL
RJMP MIN_DEL
Когда в том же проекте мне понадобилась быстрая и точная п.п SQRT ( на счету был каждый байт и каждая микросекунда) я долго мудрил на бумаге и экспериментировал в Excel`е, вспомнил из 6 класса, что (a-b)*(a+b) ~ a^2 , если b сильно меньше a, в результате получил то, что хотел. Потом мне сказали, что это алгоритм Герона, который жил еще во времена Архимеда и еще водяными насосами баловался. "Какой удар со стороны классика! "SII писал(а): И обязательно разбираться с "низкоуровневыми" алгоритмами (те же операции умножения и деления "ручками", а не с помощью команд процессора)