Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Какая разница "Двоичный, десятичный, натуральный", если легко масштабируется.
А почему логарифм не имеет смысла для целых чисел?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Ассемблер не СИ и не какой другой "более высокоуровневый" язык - здесь не так легко формулы высшей математики применять - надо до уровня примитива "единичек-ноликов" опускаться или спецалгоритмы жестко привязанные к конкретной задачке применять.
Особо ежли имеем дело с ограниченными ресурсами МК в отношении объемов памяти.
8)
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение oleg110592 »

[uquote="trofim2",url="/forum/viewtopic.php?p=3105191#p3105191"]расчет логарифма 16 бит на асме ?[/uquote]
может пригодится
в примерах Алгоритм Билдера есть библиотека Геннадия Кабардина. Cодержит:
- пример реализации алгоритмов вычисления натурального логарифма
http://algrom.net/lib-r.html
Состав пакета:
1) Каталог «Stack_machine» содержит файлы с модулями, обеспечивающим работу с вещественными числами в среде стековой машины, и программу «fish.alp», в которой показан пример реализаций функций Ln и Exp.
2) Файл «описание_Stack_machine.doc» содержит описание функций для работы с вещественными числами и в среде стековой машины.
3) Каталог «Ln_Exp» модель реализации функций Ln и Exp в Delphi, которая переносится в программу «fish.alp».
4) Файл « Из Википедии.doc» содержит алгоритм нахождения Ln для любого целого положительного числа.
5) Программа «Test3Float.exe» позволяет преобразовать вещественное число из шестнадцатеричного представления в десятичное.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jack_A »

trofim2 писал(а): А почему логарифм не имеет смысла для целых чисел?
Да потому что и для целых чисел логарифм будет вещественным. Точнее, не будет никаким, потому что если, к примеру, в Дельфи попытаемся вычислить ln(n), где n - целое, то компилятор выдаст ошибку - несоответствие типов. Или же автоматически приведет тип int к extended. Ну нет в библиотеке логарифмов от целых. Например, log2 (7) - сколько будет ? А log2 (7.0) - пожалуйста. Ну а "масштабирование" для других оснований - это в чистом виде плавающая арифметика.
Изображение
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Согласен, неверно выразился.
Имел ввиду число с фиксированной точкой типа 1.15 в диапазоне от 1 до 2 (почти), результат для LOG2 в диапазоне от 0 до 1.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jack_A »

Опять же непонятен формат представления аргумента и результата. Покажи на паре примеров - что на входе и что хочется на выходе. Чувствуется, что число разных значений будет небольшим и сведется к кратенькой таблице, без всяких алгоритмов и п/п . Какая точность нужна? Хотя раз речь о 2 байтах - какая уж там точность... И результат не от 0, а от 0,20163 .
Для дела надо или для баловства (зачета) ? :)
Изображение
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Аргумент от $8000 до $FFFF, на выходе логарифм. Доработка милливольтметра для непосредственного отсчета в дБ.
Кратенькая таблица на получится, а после последнего зачета прошло более 40 лет.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Z_h_e »

Есть такая наука под названием Вычислительные методы. Сложные математические операции заменяются более простыми формулами. С помощью итераций приближаешься к ответу, чем их больше, тем точнее ответ. Наверняка там и для логарифма есть.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Этим и занимаюсь.
Есть такая книжка "Вычисление элементарных функций в ЭКВМ", вроде получается неплохо.
AQ29
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Сб июл 30, 2011 21:00:24

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение AQ29 »

[uquote="Jack_A",url="/forum/viewtopic.php?p=3106011#p3106011"]Какая точность нужна? Хотя раз речь о 2 байтах - какая уж там точность.[/uquote]
Ежели писать на нормальном макроассемблере, думаю, без труда получите требуемую точность.
Вот пример.
Логарифм вызывается одной командой. Аргумент и результат логарифма - двухбайтные переменные Точность - 0,5 %, диапазон - в 64 раза (от 1024 до 64000 с копейками). Думаю, без проблем можно получить и большую точность, скажем, 0,1 %, только нужен доступ к соответствующей расчётной программе.
Думаю, в основном, ответы по теме логарифма не связаны с профессионалами, пишущими на макроассемблере.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jack_A »

Давно такого потока сознания на форуме не наблюдал... Особенно впечатлило :
только нужен доступ к соответствующей расчётной программе.
Так вроде ТС и ищет эту "соответствующую расчётную программу"
Или:
Логарифм вызывается одной командой.
я даже подозреваю, эта команда CALL - вызов соответствующей подпрограммы. Вот и выдал бы человек, учитывая его космических высот квалификацию, текст проги - на посрамление нам, неразумным.
trofim2 - $8000 - это 1, $FFFF - это 2 ? Логарифм $0000 ... $FFFF - это 0..1 ?
Согласен с Z_h_e : таблица на несколько опорных точек, в промежутках - апроксимация. И насколько я понял, тут нужен не логарифм, а антилогарифм: для заданного отсчета в дБ ищем точку, куда его поместить на линейной шкале.
Последний раз редактировалось Jack_A Вт май 16, 2017 09:08:08, всего редактировалось 1 раз.
Изображение
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Логарифм получил с достаточной, для меня, точностью. Разбираюсь с масштабированием.
Где то так:


; input ah:al = $8000 .. $FFFF
; out ah:al = 0 .. $3FFF


Log_2:
pushw Z
pushw X
pushw B
push cl
ldiw Z,(TablLog2*2)
ldiw X,(1<<15)
clr rl
clr rh
ldi cl,16
lgrt_a: movw bl,xl
ldi Tmp,17
sub Tmp,cl
lgrt_b: lsrw B
djnz Tmp,lgrt_b
addw X,B
brcs lgrt_e
cpw X,A
brcs lgrt_c
lgrt_e: subw X,B
adiw zl,2
rjmp lgrt_d
lgrt_c:
lpmw B,Z+
addw R,B
lgrt_d: djnz cl,lgrt_a
movw al,rl
pop cl
popw B
popw X
popw Z
ret


TablLog2:
.dw 9583,5274,2784,1433 ;16383*Lg(1+(1/2)^^(i+1))/lg(2) i=0..15
.dw 727,366,184,92
.dw 46,23,12,6
.dw 3,1,1,0
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jack_A »

Что-то не могу понять - какого МК это ассемблер и что он делает в теме про AVR?
Логарифм получил с достаточной, для меня, точностью.
Кстати, точность -- по заявлению авторов -- или алгоритм откомпилирован и проверен в симуляторе, подтвердив заявленную точность ?
Ну, успехов, земляк :)
Прибор с цифровым отсчетом ? Ну тогда точно нужен логарифм, а не анти- . Признаю.
К слову: код оформлен ужасно, точнее, никак не оформлен, потому читать его захочет только очень мазохист. :(
Изображение
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Табуляция игнорируется при вставке

Код: Выделить всё


; input ah:al = $8000 .. $FFFF 
;  out ah:al = 0 .. $3FFF


Log_2:
	pushw Z
	pushw X
	pushw B
	push cl
	ldiw Z,(TablLog2*2)
	ldiw X,(1<<15)		
	clr rl
	clr rh
	ldi cl,16																
lgrt_a:	movw bl,xl		 		
	ldi Tmp,17
	sub Tmp,cl
lgrt_b:	lsrw B				
	djnz Tmp,lgrt_b		
	addw X,B
	brcs lgrt_e
	cpw X,A
	brcs lgrt_c
lgrt_e:	subw X,B
	adiw zl,2
	rjmp lgrt_d		
lgrt_c:				
	lpmw B,Z+
	addw R,B
lgrt_d:	djnz cl,lgrt_a		
	movw al,rl
	pop cl
	popw B
	popw X
	popw Z
	ret


TablLog2:
	.dw 4791,2637,1392,716	;8191*Lg(1+(1/2)^^(i+1))/lg(2)	i=0..15
	.dw 364,183,92,46
	.dw 23,12,6,3
	.dw 1,1,0,0



;	.dw 9583,5274,2784,1433	;16383*Lg(1+(1/2)^^(i+1))/lg(2)	i=0..15
;	.dw 727,366,184,92
;	.dw 46,23,12,6
;	.dw 3,1,1,0


Так лучше?
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jack_A »

Ну дык совсем друго дело !
И раскрой гос.тайну: для какого МК этот код ?
Изображение
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Какая-то смесь команд с макросами...
:dont_know:
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение oleg110592 »

старинные Ченовские (тот что FatFs сделал) AVR макросы:

Код: Выделить всё

...............
.def	AL	= r16
.def	AH	= r17
.def	BL	= r18
.def	BH	= r19
.def	CL	= r20
.def	CH	= r21
.def	DL	= r22
.def	DH	= r23
.def	EL	= r24
.def	EH	= r25
;------------------------------------------------;
; Push/Pop register pair
;
; 	pushw	Z

.macro	pushw
	push	@0H
	push	@0L
.endm

.macro	popw
	pop	@0L
	pop	@0H
.endm
............
видать x86 ассемблер оказал влияние
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

А
djnz r,expr
?
это ж от 51-й
:roll:
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение oleg110592 »

[uquote="BOB51",url="/forum/viewtopic.php?p=3106904#p3106904"]А
djnz r,expr
?[/uquote]
никто не мешает и на AVR изобразить:

Код: Выделить всё

.macro	djnz
	dec	@0
	brne	@1
.endm

Код: Выделить всё

djnz cl,lgrt_a
=
dec cl
brne lgrt_a
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

В макросах pushw и popw поменять порядок, сохранять в стеке сначала младший, потом старший.
Это позволяет сохраняя регистровую пару с адресом, по ret выходить в нужную точку.
Ответить

Вернуться в «AVR»