Страница 1 из 1

Atmega48 ассемблер.

Добавлено: Вт фев 26, 2019 13:20:07
metcal
Всем привет. Нужна помощь - вытащить несколько функций из хекса для атмеги48. Может кто-то помочь за вознаграждение?

Re: Atmega48 ассемблер.

Добавлено: Вт фев 26, 2019 15:42:07
Demiurg
Лучше всего будет пояснить, что за функции вам нужны. Хекс не всегда полезен.

Re: Atmega48 ассемблер.

Добавлено: Вт фев 26, 2019 16:44:16
metcal
Математика. Что точно, надо смотреть.

Re: Atmega48 ассемблер.

Добавлено: Вт фев 26, 2019 17:27:34
GoldenAndy
А не проще ли написать свою математику, нежели заниматься дизассемблированием и догадываться о ходе мысли автора?
Что именно за математика ?

Реализация какого то известного алгоритма или какие то проприетарные вычисления ?

Re: Atmega48 ассемблер.

Добавлено: Вт фев 26, 2019 22:50:54
metcal
Алгоритм работы не известен. А нужен именно он. Обработка данных.

Re: Atmega48 ассемблер.

Добавлено: Ср фев 27, 2019 06:53:44
ARV
сумму вознаграждения озвучьте.

Re: Atmega48 ассемблер.

Добавлено: Ср фев 27, 2019 08:15:07
BOB51
metcal
А просто прогнать в дебаггере авр студии сапсем влом?
8)

Re: Atmega48 ассемблер.

Добавлено: Ср фев 27, 2019 08:16:46
pyzhman
Напишите подробности мне в личку и приложите хекс.

Re: Atmega48 ассемблер.

Добавлено: Ср фев 27, 2019 14:07:35
metcal
[uquote="BOB51",url="/forum/viewtopic.php?p=3578791#p3578791"]metcal
А просто прогнать в дебаггере авр студии сапсем влом?
8)[/uquote]

Я с атмелом последний раз лет 12 назад работал. Разбираться с студией времени нет, да и асм плохо знаю.

Re: Atmega48 ассемблер.

Добавлено: Ср фев 27, 2019 18:45:02
BOB51
ГЫММ...
А что в таком случае даст вычитка ассемблерного кода?...
:?
:dont_know:

Re: Atmega48 ассемблер.

Добавлено: Ср фев 27, 2019 19:05:32
metcal
Алгоритм работы интересует. Договорился с человеком. Всем спасибо.

Re: Atmega48 ассемблер.

Добавлено: Пн янв 11, 2021 15:49:40
onwire
Понимаю что не в тему но в лом искать подходящую, что-то они все закрытые.
Видно АВР совсем не в моде нынче..
Надо стало быстрое деление константы 32767 на переменную 16 бит.
Придумал вот такую делилку.
Она проста, понятна, легко может быть приспособлена под любую разрядность
Для сравнения, делилка 16\16 из АВР аппноты тратит 260 тактов



DivU_TempHL_BT: ; TempH:L делимое (потом здесь будет удвоенный остаток)-
ldi Cnt, 1 ; -Buff:Temp делитель, R1:R0 округленный результат
mov One, Cnt
clr R1 clr R0
mov R2, One ; начальное значение маски для записи единиц в результат-
clr R3 clr Zero ; -она же будет счетчиком в цикле деления
cpi Temp, 128
cpc Buff, Zero
brsh shl
cpi Temp, 32 ; чтоб не повиснуть при делении на 0 :
cpc Buff, Zero
brsh swdv
ldi Temp, 32
swdv:
mov Buff, Temp ; для ускорения работы, если делитель <128-
clr Temp ; -можно сдвинуть делитель влево сразу на 8 бит
mov R3, One ; -и маску тоже
clr R2
shl:
sbrc Buff, 6
rjmp dv
lsl Temp rol Buff ; сделать делитель близким к делимому
lsl R2 rol R3 ; при этом приготовить маску
rjmp shl
dv:
cp Temp_L, Temp ; в цикле, сравнить делимое и делитель
cpc Temp_H, Buff
brlo shr
sub Temp_L, Temp ; если можно то вычесть
sbc Temp_H, Buff
or R1, R3 ; и маской внести единицу в результат
or R0, R2
shr:
lsr R3 ror R2 ; в любом случае, сдвинуть 1 в маске вправо
brcs edv ; (пока она совсем не обнулится, тогда выйти из цикла)
lsr Buff ror Temp ; и сдвинуть вправо делитель
rjmp dv
edv:
lsl Temp_L rol Temp_H ; удвоить остаток
cp Temp, Temp_L ; сравнить его с делителем
cpc Buff, Temp_H
adc R0, Zero ; округлить
adc R1, Zero
ret ; 185 тактов макс. время, мин. время 31 тактов

Re: Atmega48 ассемблер.

Добавлено: Пн янв 11, 2021 16:19:30
Starichok51
по округлению:
при равенстве делителя и удвоенного остатка у тебя не будет округления (добавки 1 к целой части).
а положено 0,5 округлять до 1.

Re: Atmega48 ассемблер.

Добавлено: Вт янв 12, 2021 07:00:55
onwire
Да, Вы правы, спасибо

Re: Atmega48 ассемблер.

Добавлено: Вт янв 12, 2021 09:31:35
Starichok51
обычно делается так:
сравнивается удвоенный остаток с делителем - если меньше, то 1 не прибавляется.
либо (больше или равно) - то прибавляется.